OPEN OFFICE - Macro pour calcul simple

Fermé
Hadryan - 19 mai 2009 à 02:51
Hadryan Messages postés 5 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009 - 20 mai 2009 à 03:37
Bonjour,

Je suis obliger de passer sous OPEN OFFICE moi qui est travaillé durant presque 10 ans sur EXCEL, certes c'est un logiciel libre (Youppi !) mais la doc est vraiment pas clair du tout :o(

Voici donc mon problème assez basique je dois bien l'avouez ! Je veux faire un calcul dans un macro et que cela donne le résultat dans une cellule qui fait partie de ce même calcul.

EXEMPLE:
A1+B1+C1=C1

100+200+300=600

La valeur 100 étant en A1, le 200 en B1, le 300 en C1. J'aimerais que le calcul additionne donc A1+B1+C1 et qu'il me renvoie la réponse dans la cellule C1.

Je me doutes que cela doit être d'une simplicité désarmante, mais je cherche depuis des heures une façon de faire le tout sans avoir une tonne de ligne de code... Certes l'enregistreur m'a donné une formule mais c'est tellement long que je me revoie pas copier la formule pour plusieurs calcul à faire ! Cela serait juste impossible vue l'ampleur des calculs à faire...

Merci d'avance pour toute réponse
Hadryan
A voir également:

9 réponses

effectivement, le code UNO n'est pas forcément adapté pour des macros simples.
je te conseille donc http://www.openoffice.org/fr/Documentation/How-to/indexht-programmation.html qui te montrera que le Basic d'OOo est aussi simple que le VBA de Microsoft.

Le conseil du jour : OOo n'ayant pas d'inspecteur d'objets, je te conseille XRay pour ausculter les différents objets que tu vas manipuler en Basic

Quant à ton exemple, tu devrais te retrouver avec qqe chose d'aussi simple qu'en VBA genre Cells("C1").value = Cells.("A1").Value+Cells.("B1").Value+Cells.("C1").Value le tout précédé d'un With Classeur.Feuille dont j'ai totalement oublié la syntaxe... heureusement la page citée dessus te montrera comment faire.
0
Ok je voie, ce qui me donnerait donc une formule comme cela:

sub Main

Cells("C1").value = Cells("A1").Value+Cells("B1").Value+Cells("C1").Value

end sub

Sauf que ça me renvoie une erreur d'exécution BASIC.
Sous-procédure ou procédure non définie.

Youppi j'ai comme l'impression que ma conversion à OO ne sera pas de tout repos... Et dire que l'on croyait avoir fini le travail d'ici quelques semaines... (Ouin j'ai des doutes tout à coup !)

Hadryan
Qui déchante...
0
Ok j'avance tranquillement je suis rendu avec le code suivant pour ma macro:

REM ***** BASIC *****

Sub Main

End Sub

Sub test19mai2009

Cells("C1").value = Cells("A1").Value + Cells("B1").Value + Cells("C1").Value

End Sub

Mais bien que cela ne me renvoie pas d'erreur cela ne calcul pas rien non plus ! ? Où est donc mon erreur s.v.p ?
0
Hadryan Messages postés 5 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 19:02
Bon pour éviter d'écrire 10 messages de suite, je me suis enregistré sur le forum histoire de pouvoir éditer mes futurs messages aux besoin...

Youppi je sais comment faire un calcul simple ! :)

Est-ce que l'utilisation de nom de cellule est utile et rend l'écriture d'une macro plus simple ?

[ code ]
Sub Test
Dim oSheet as Object
oSheet = ThisComponent.Sheets.getByName("Professeur")
with oSheet

.getCellRangeByName("D2").value = .getCellRangeByName("B2").value + .getCellRangeByName("C2").value _
+ .getCellRangeByName("D2").value

.getCellRangeByName("D3").value = .getCellRangeByName("B3").value + .getCellRangeByName("C3").value _
+ .getCellRangeByName("D3").value

.getCellRangeByName("D4").value = .getCellRangeByName("B4").value + .getCellRangeByName("C4").value _
+ .getCellRangeByName("D4").value

end with
End Sub
[ /code ]

Je tiens à faire remarque que je sais qu'il existe une fonction plus facile pour faire une "boucle" mais comme les données ne sont pas toujours en A1,B1,C1 cela serait assez dur à faire je crois... :( À moins que de faire plusieurs boucle reviendrait à me sauver du temps ? Vue que j'ai un fichier entre autre avec 60 entrées en A1, C1, F1 (résultat en F1) ???

J'ai cherché mais tout les exemples que j'ai trouvé mon plus dérouté qu'autre chose je dois bien avouer ! :os

Sinon existe-t-il une liste des balise obligatoire et régulièrement utilisé car après cela j'aurai fini et les professeurs dont je dois m'occuper de leurs fichiers d'ici là fin de l'année seront assez content je crois :) (C'était quoi l'idée aussi de changer le système informatique juste avant la fin de l'année... Ah oui pour que tout soit en place pour l'an prochain...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hello

je vois que t'as bien avancé dans la production d'un code lisible et facilement maintenable.
en placant des appels à XRay ici et là dans ton code, tu pourras ausculter tel ou tel objet et apprendre encore plus rapidement le bidule.
note aussi qu'il existe (ou existait - je suis pas très à jour) un Kit de développement OOo constistant en un mega fichier d'aide associé à XRay, mais j'ai pas eu le temps de bcp m'en servir.

par contre, je ne comprends pas ta demande quant à des balises. comment vois-tu ces balises ou comment t'imagines-tu les utiliser ?
0
Hadryan Messages postés 5 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 20:34
Je ne sais pas, on m'avait parlé qu'au lieu de faire A1+B1=C1 on pouvait faire par exemple: Argent+Prime=Salaire ... je ne sais pas si cela est utile ? Sauf peut-être pour relire un code plus tard ce qui en effet pourrait vachement aider j'imagine !

Sinon mon problème actuel est rendu à l'exécution de plusieurs calcul sur divers feuille. Je sais comment faire une macro sur une seule feuille mais pas sur plusieurs... Voici mon code actuel qui ne fonctionne pas il va s'en dire :os

[ code ]

Sub Test
Dim oSheet as Object
oSheet = ThisComponent.Sheets.getByName("Ménage")
with oSheet

.getCellRangeByName("D2").value = .getCellRangeByName("B2").value + .getCellRangeByName("C2").value _
+ .getCellRangeByName("D2").value

.getCellRangeByName("D3").value = .getCellRangeByName("B3").value + .getCellRangeByName("C3").value _
+ .getCellRangeByName("D3").value

.getCellRangeByName("D4").value = .getCellRangeByName("B4").value + .getCellRangeByName("C4").value _
+ .getCellRangeByName("D4").value

end with
End Sub


Sub Test2
Dim oSheet as Object
oSheet = ThisComponent.Sheets.getByName("Professeur")
with oSheet

.getCellRangeByName("D2").value = .getCellRangeByName("B2").value + .getCellRangeByName("C2").value _
+ .getCellRangeByName("D2").value

.getCellRangeByName("D3").value = .getCellRangeByName("B3").value + .getCellRangeByName("C3").value _
+ .getCellRangeByName("D3").value

.getCellRangeByName("D4").value = .getCellRangeByName("B4").value + .getCellRangeByName("C4").value _
+ .getCellRangeByName("D4").value

end with
End Sub


Sub Test3
Dim oSheet as Object
oSheet = ThisComponent.Sheets.getByName("Dépense")
with oSheet

.getCellRangeByName("C2").value = .getCellRangeByName("A2").value + .getCellRangeByName("B2").value _
+ .getCellRangeByName("C2").value

.getCellRangeByName("C3").value = .getCellRangeByName("A3").value + .getCellRangeByName("B3").value _
+ .getCellRangeByName("C3").value

.getCellRangeByName("C4").value = .getCellRangeByName("A4").value + .getCellRangeByName("B4").value _
+ .getCellRangeByName("C4").value

end with
End Sub

[ /code]

Ceci dit les cellules sont uniquement à titre d'exemple car ce n'est pas toujours des cellules qui se suivent...
0
Hadryan Messages postés 5 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
19 mai 2009 à 23:26
Voici donc ma formule à l'heure actuelle, qui fait ce que je lui demande, la seule chose que je me demande c'est si elle est optimisé ou pas ?

NOTE: La première partie suppose que les cellules ne seront pas à la suite (A,B,C, etc.)

[ code ]
Sub Test
Dim oSheet as Object
oSheet = ThisComponent.Sheets.getByName("Essaie")
with oSheet

.getCellRangeByName("D2").value = .getCellRangeByName("B2").value + .getCellRangeByName("C2").value _
+ .getCellRangeByName("D2").value

.getCellRangeByName("D3").value = .getCellRangeByName("B3").value + .getCellRangeByName("C3").value _
+ .getCellRangeByName("D3").value

.getCellRangeByName("D4").value = .getCellRangeByName("B4").value + .getCellRangeByName("C4").value _
+ .getCellRangeByName("D4").value

end with



oSheet = ThisComponent.Sheets.getByName("Ménage")
with oSheet
for r=2 to 20
.getCellRangeByName("D" & r).value = .getCellRangeByName("B" & r).value + _
.getCellRangeByName("C" & r).value + .getCellRangeByName("D" & r).value
next r
end with
End Sub

[ /code ]
0
Je rebondis sur le post 6

au lieu de multiples Test, Test2 etc
pkoi ne pas faire faire un TestGeneral(Feuille)
Sub Test(Feuille)
Dim oSheet as Object
oSheet = ThisComponent.Sheets.getByName(Feuille)
with oSheet

.getCellRangeByName("D2").value = .getCellRangeByName("B2").value + .getCellRangeByName("C2").value _
+ .getCellRangeByName("D2").value

.getCellRangeByName("D3").value = .getCellRangeByName("B3").value + .getCellRangeByName("C3").value _
+ .getCellRangeByName("D3").value

.getCellRangeByName("D4").value = .getCellRangeByName("B4").value + .getCellRangeByName("C4").value _
+ .getCellRangeByName("D4").value

end with
End Sub
et ensuite
sub Main
  TestGeneral "Ménage"
  TestGeneral "Professeur"
  TestGeneral "Dépense"
end sub


cct le post 7 : oui, tu peux tout à fait construire dynamiquement des références à des cellules en ne forunissant que leur coordonnées !
0
Hadryan Messages postés 5 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 03:37
Merci, je crois que pour cette partie je suis correct maintenant, d'autres questions mais je vais créer d'autre fil de discussion vue que ce n'est pas le même problème...
0