OPEN OFFICE - Macro pour calcul simple

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
Configuration: Windows Vista
Firefox 3.0.10

9 réponses

  1. 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
    1. 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
      1. 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
        1. 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
          1. 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
            1. 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
              1. 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
                1. 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
                  1. 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