Macro pour coller les résultats de calculs

Fermé
SegreB49 Messages postés 2 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 15 juin 2015 - Modifié par SegreB49 le 12/06/2015 à 08:19
SegreB49 Messages postés 2 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 15 juin 2015 - 15 juin 2015 à 20:19
Bonjour

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 :

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 sub


Le problème est que cette macro colle les formules s'il y en a et donc que les valeurs affichées dans la dernière cellule sont fausses.

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 :

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


Le problème c'est que je n'arrive pas à créer la macro qui me permet de faire cette manipulation automatiquement sur toutes les feuilles.
J'ai tenté la macro suivante :

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


mais j'ai une erreur et je ne comprends pas pourquoi ce qui marche sur la feuille courante sélectionnée ne peut pas se répéter en allant automatiquement sur les autres feuilles ?

Question 2 : qui peut me donner une solution car cela fait une bonne semaine que je cherche désespérement.

merci d'avance
A voir également:

1 réponse

OOoForum Messages postés 3873 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 2 janvier 2025 960
Modifié par OOoForum le 15/06/2015 à 19:37
Lorsqu'on pose la question sur plusieurs forums, le minimum est de revenir donner le lien vers la solution qui vous a été donnée.
https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=47813

.
.
<span class='signature'>Pourquoi pirater MS-Office alors qu'il existe une solution gratuite ?
Utilisez OpenOffice
</span>
0
SegreB49 Messages postés 2 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 15 juin 2015
15 juin 2015 à 20:19
Merci de l'avoir fait pour moi.
Je m'excuse mais comme je suis en pleine recherche je n'avais pas encore eu le temps de le faire
0