Je travaille avec OpenOffice
j'ai créé des feuilles de calculs, numérotées 1, 2, . . . , sur lesquelles j'ai une formule de calcul à partir des données.
Je veux récupérer, à l'aide d'une macro tous les résultats de calculs, pas les formules sur une feuille bilan.
J'ai essayé le code suivant :
Code : Tout sélectionner
Sub colle_sur_bilan
Dim oDoc As Object
Dim total As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
oDoc=ThisComponent
total = oDoc.Sheets.Count
k=total-1
Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
Dim UneZone As Object
Dim CoordZone As Object
Dim LigneCourante As Integer, FeuilledeZone As Integer
Dim PremiereColonneZone As Integer, DerniereColonneZone As Integer
Dim PremiereLigneZone As Integer, DerniereLigneZone As Integer
Doc = StarDesktop.CurrentComponent
UneZone = Doc.CurrentSelection
CoordZone = UneZone.RangeAddress
FeuilledeZone = CoordZone.Sheet
PremiereColonneZone = CoordZone.StartColumn
DerniereColonneZone = CoordZone.EndColumn
PremiereLigneZone = CoordZone.StartRow
DerniereLigneZone = CoordZone.EndRow
For i=3 to k
Sheet = Doc.Sheets(i)
CellRangeAddress.Sheet = FeuilledeZone
CellRangeAddress.StartColumn = PremiereColonneZone
CellRangeAddress.StartRow = PremiereLigneZone
CellRangeAddress.EndColumn = DerniereColonneZone
CellRangeAddress.EndRow = DerniereLigneZone
j = i + 30
CellAddress.Sheet = 2
CellAddress.Column = j
CellAddress.Row = 1
Sheet.copyRange(CellAddress, CellRangeAddress)
next
end [/contents/446-fichier-sub sub]
Question 1 : Que faire pour que la commande Sheet.copyRange copie les valeurs à la place des formules, comme le fait la commande collage spécial ?
J'ai donc créé une macro qui, pour une feuille donnée, colle le résultat de la formule, dans une nouvelle cellule.
Cela me permet ainsi de récupérer la valeur avec la macro précédente :
Code : Tout sélectionner
sub copie_nombres
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$G$33:$Z$33"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$G$34"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "VT"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())
end sub
J'ai tenté la macro suivante :
Code : Tout sélectionner
sub copie_nombres_tout
Dim oDoc As Object
Dim i As Integer
Dim j As Integer
Dim k As Integer
oDoc=ThisComponent
k = oDoc.Sheets.Count
j=i-1
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
For i=3 to k
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 3
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
copie_nombres
next
end sub
Question 2 : qui peut me donner une solution car cela fait une bonne semaine que je cherche désspérément.
A tout hasard, je joint le projet sur lequel je travaille.
merci d'avance