Macro Openoffice Calc

Je viens de transférer un fichier Excel sous OpenOffice, j'avais un bouton macro me permettant d'ajuster la hauteur des lignes qui ne fonctionne plus. J'ai voulu créer cette macro dans OpenOffice calc, sans connaitre Basic je l'ai enregistré. Outils / Macro / Enregistrer / puis j'ai sélectionné tout le document et en cliquant sur un inter-ligne au hasard, toutes les lignes s'ajustent, puis Terminer l'enregistrement.
Ensuite lorsque j'exécute la macro, rien ne se passe. ESt-ce un problème de fonctionnalité, de langage ou autre...
Merci de votre aide.
Nb: si vous voulez m'envoyer la macro écrite, je serai ravie.

58 réponses

Résumé de la discussion

Le problème porte sur une macro enregistrée dans Calc destinée à ajuster la hauteur des lignes, qui ne s’exécute pas après son enregistrement et son lancement. Un intervenant propose d’activer le support VBA (OPTION VBASupport 1) pour permettre l’exécution de code VBA dans OpenOffice, ce qui implique que la macro est potentiellement écrite en VBA. Il est aussi rappelé que les macros ne sont pas aisément transférables entre MS Office et OpenOffice et qu’il faut souvent les reprogrammer en OpenOffice Basic, avec une ressource pédagogique recommandée. En pratique, la solution consiste à développer ou adapter la macro directement en OpenOffice Basic et à la lier à un bouton d’action, plutôt que d’espérer une compatibilité directe avec du VBA sans adaptation.

Bobot (l’IA à votre service)
  1. Modérateur
    Salut,

    si tu mets cette option au début de ta macro

    OPTION VBASupport 1

    le code vba pourra s'exécuter sur ooopenoffice.org ;-)

    donc pas besoin d'une conversion
    7
    1. Bonjour,
      J'ai le problème suivant, toute ma macro affiche 'Rem' au début de chaque ligne ? et quand je corrige toutes les lignes sans les 'Rem' et que je réédite la macro tout est revenu comme dans l'exemple si dessous ?
      J'ai un fichier "Fabien.XLT"
      Merci

      Rem Attribute VBA_ModuleType=VBAFormModule
      OPTION VBASupport 1
      Sub Commande
      Rem Private Sub CommandButton6_Click()
      Rem
      Rem End Sub
      Rem
      Rem Private Sub CommandButton8_Click()
      Rem Sheets("Data").Select
      Rem ActiveSheet.Shapes("WordArt 4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem Range("E1").Select
      Rem ActiveSheet.Paste
      Rem Selection.ShapeRange.IncrementLeft -70.5
      Rem Selection.ShapeRange.IncrementTop -8.25
      Rem Range("E3").Select
      Rem Dim vFichier As String, vChemin As String
      Rem vChemin = "d:\FG entreprise\Factures\"
      Rem vFichier = vChemin & ("F") & ("_") & ActiveSheet.Range("H1") & ("_") & ActiveSheet.Range("F8")
      Rem ActiveWorkbook.SaveAs Filename:=(vFichier)
      Rem End Sub
      Rem
      Rem Private Sub arretroyal_Click()
      Rem
      Rem End Sub
      Rem
      Rem Private Sub DEVIS_Click()
      Rem Sheets("Data").Select
      Rem ActiveSheet.Shapes("WordArt 3").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem Range("F1").Select
      Rem ActiveSheet.Paste
      Rem Selection.ShapeRange.IncrementLeft -76.5
      Rem Selection.ShapeRange.IncrementTop -9.75
      Rem Selection.ShapeRange.IncrementLeft -3#
      Rem Selection.ShapeRange.IncrementTop -0.75
      Rem Range("H1:I1").Select
      Rem End Sub
      Rem
      Rem Private Sub devisrenvoyer_Click()
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = False
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = True
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem End Sub
      Rem
      Rem Private Sub Facture_Click()
      Rem Sheets("Data").Select
      Rem ActiveSheet.Shapes("WordArt 4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem Range("E1").Select
      Rem ActiveSheet.Paste
      Rem Selection.ShapeRange.IncrementLeft -35.25
      Rem Selection.ShapeRange.IncrementTop -11.25
      Rem Range("H1:I1").Select
      Rem End Sub
      Rem
      Rem Private Sub Image1_Click()
      Rem
      Rem End Sub
      Rem
      Rem Private Sub print_couleur_bw_Click()
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = False
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = True
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = False
      Rem End With
      Rem End Sub
      Rem
      Rem Private Sub Sfacture_Click()
      Rem Dim vFichier As String, vChemin As String
      Rem vChemin = "c:\MN entreprise\Factures\"
      Rem vFichier = vChemin & ("F") & ("_") & ActiveSheet.Range("H1") & ("_") & ActiveSheet.Range("F8")
      Rem ActiveWorkbook.SaveAs Filename:=(vFichier)
      Rem End Sub
      Rem
      Rem Private Sub Svdevis_Click()
      Rem Dim vFichier As String, vChemin As String
      Rem vChemin = "d:\FG entreprise\Devis\"
      Rem vFichier = vChemin & ("D") & ("_") & ActiveSheet.Range("H1") & ("_") & ActiveSheet.Range("F8")
      Rem ActiveWorkbook.SaveAs Filename:=(vFichier)
      Rem End Sub
      Rem
      Rem Private Sub TVA21_Click()
      Rem ActiveWindow.ScrollRow = 20
      Rem Range("G47").Select
      Rem Sheets("Data").Select
      Rem Range("A4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("H47:I47").Select
      Rem Sheets("Data").Select
      Rem Range("B4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Sheets("DF").Select
      Rem End Sub
      Rem
      Rem Private Sub TVA6_Click()
      Rem Range("G47").Select
      Rem Sheets("Data").Select
      Rem Range("A3").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("H47:I47").Select
      Rem Sheets("Data").Select
      Rem Range("B3").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("A48").Select
      Rem End Sub
      Rem
      Rem Private Sub TVACC_Click()
      Rem Range("G47").Select
      Rem Sheets("Data").Select
      Rem Range("A6").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("H47:I47").Select
      Rem Sheets("Data").Select
      Rem Range("B6").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("B46").Select
      Rem Sheets("Data").Select
      Rem ActiveSheet.Shapes("AutoShape 1").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Selection.ShapeRange.IncrementLeft 47.25
      Rem Selection.ShapeRange.IncrementTop -1.5
      Rem Range("A48").Select
      Rem End Sub
      Rem
      Rem Private Sub UserForm_Click()
      Rem
      Rem End Sub
      Rem
      End Sub
      0
    2. bonjour tt le monde!

      oui j'ai essayé OPTION VBASupport 1 marche à merveille.
      cependant est ce que ça marche pour tt les programmes VB??
      merci de votre aide!!
      parallelement j'ai une autre question:

      est ce que vous pouvez m'aider sur un point particulier qui me bloque énormément.
      en fait j'arrive pas à executer pas à pas mes macros (disons que je connai pas du tt comment faire sur open office). si j'appuis sur f8 j'execute une macro(la premiere) mais aprés j'arrive plus à en sortir et à executer les suivantes.

      merci de votre attention
      0
    3. Modérateur
      @loksSalut,

      cependant est ce que ça marche pour tt les programmes VB??
      Ne confonds pas VB avec VBA.

      Pour la deuxième question il faut un peu plus de détails.
      0
  2. Re,

    Mon probème est que je suis niveau 0 sur le basic de Open Office.org.
    Par contre je sais programmer en VBA car je l'ai appris en classe mais jamis le basic de open office.org.

    Alors est ce que vous voulez bien aidez s'il vous plait?
    0
    1. Bonjour lami20j,

      J'espere que mon fichier ne t'a pas beaucoup fatigué!
      0
      1. Re,

        Application.Run ("DocAvId") fonctionne bien sur Excel VBA mais elle bug sur OPEn OFFICE VBA

        Savez vous pourqoi?

        merci
        0
        1. Re,

          Au fait ma fonction ne bug plus sur open office

          en effet il fallait déclarer les variables dans la fonction et non à l'exterieur: j'ai tatonné et ça marche maintenant reste à savoir si elle fonctionne partout.

          merci de ton aide!!
          0
          1. Re,

            Ok merci!!
            Mais en fait c'est xd qui améne le bug. J'ai pensé que la déclaration de variables de dates n'est peut etre la même sous Excel que sous Open? Mais vu que je suis nul en progammation je sais pas trop ce qu'il faut faire?
            0
            1. Modérateur
              Re,

              Un exemple pour cette partie

              c1 = a_y1(xy) 
              c2 = Int((a_m1(xm - 1) + a_y2(xy) + a_y3(xy) + xj - xw) / 7)  
              c3 = Right(a_m1(xm - 1) + a_y2(xy) + a_y3(xy) + xj + 999, 3) 
              
              
              If c2 = 0 Then 
              If a_y3(xy) = 0 Then 
              c2 = 0 
              Else 
              c2 = IIf(a_y3(xy) > 3, 52, c2) 
              c1 = IIf(a_y3(xy) > 3, a_y1(xy - 1), c1) 
              End If 
              End If


              qui deviens
              c1 = a_y1(xy) 
              c2 = Int((a_m1(xm - 1) + a_y2(xy) + a_y3(xy) + xj - xw) / 7) 
              c3 = Right(a_m1(xm - 1) + a_y2(xy) + a_y3(xy) + xj + 999, 3) 
              
              
              If c2 = 0 Then 
                If a_y3(xy) = 0 Then 
                  c2 = 0 
                Else 
                  if a_y3(xy) > 3 then 'les valeurs de c1 et c2  change seulement si a_y3(xy) > 3
                    c2 = 52 
                    c1 = a_y1(xy - 1) 
                End If 
              End I

              0
              1. Re,
                Sachant que ela fonctionne parfaitement sur Excel VBA ce n'est que sous Open Basic que cela bug au niveau du calcul de xd.
                En fait xd est une date mais je la connais pas au début:
                attend je te passe ma fonction tu verra: je t'ai mis quelques commentaires

                Public ty As String, mois As String, sem As String, ys As String, ysj As String, yj As String, xd As Date

                ' Fonction de calcul d'interval de temps de 1998 à 2014

                ' Datecode de la variable xd facultative ( Date system par defaut )
                ' En année ty="a" ( Type par défaut )
                ' En année mois ty="amm"
                ' En semaine ty="ss"
                ' En année semaine ty="ass"
                ' En année semaine jour ty="assj"
                ' En année Jour ty="ajjj"

                Public Function datecode(ty, xd)

                Dim a_y1, a_y2, a_y3, a_m1, xy, xm, xj, c1, c2

                'lettre correspondant à l'année
                a_y1 = Array("K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "A")
                'année bissextile à 1 sinon 0
                a_y2 = Array(0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0)
                '1er jour de l'année lundi=0
                a_y3 = Array(3, 4, 5, 0, 1, 2, 3, 5, 6, 0, 1, 3, 4)
                'ne pas changer correspond au mois
                a_m1 = Array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)

                xd = IIf(IsDate(xd), xd, Date)

                xy = Year(xd) - 1998
                xm = Month(xd)
                xj = Day(xd)
                xw = WeekDay(xd, vbMonday)

                c1 = a_y1(xy)
                c2 = Int((a_m1(xm - 1) + a_y2(xy) + a_y3(xy) + xj - xw) / 7)
                c3 = Right(a_m1(xm - 1) + a_y2(xy) + a_y3(xy) + xj + 999, 3)

                If c2 = 0 Then
                If a_y3(xy) = 0 Then
                c2 = 0
                Else
                c2 = IIf(a_y3(xy) > 3, 52, c2)
                c1 = IIf(a_y3(xy) > 3, a_y1(xy - 1), c1)
                End If
                End If

                mois = Right(Str(xm + 100), 2)
                ym = LCase(c1) & mois

                c2 = IIf(a_y3(xy) < 4, c2 + 1, c2)
                'c1 = IIf(c2 = 53 And a_y3(xy) = 0, a_y1(xy + 1), c1)
                'c2 = IIf(c2 = 53 And a_y3(xy) = 0, 1, c2)

                sem = Right(Str(c2 + 100), 2)
                sem = IIf(sem = "00", "53", sem)

                ys = c1 & sem
                ysj = ys & xw
                yj = LCase(c1) & c3
                ty = LCase(ty)
                datecode = c1
                datecode = IIf(ty = "amm", ym, datecode)
                datecode = IIf(ty = "ss", sem, datecode)
                datecode = IIf(ty = "ass", ys, datecode)
                datecode = IIf(ty = "assj", ysj, datecode)
                datecode = IIf(ty = "ajjj", yj, datecode)

                End Function

                0
                1. Modérateur
                  Re,

                  je vais le faire un peu plutard si ça ne te pose aucun probléme.
                  Pas de problèmes.

                  En fait tu n'as pas besoin de else. Il suffit de tester si xd est date ou pas

                  Voici deux exemples

                  xd n'est pas une date
                  Sub date1()
                      Dim xd
                      xd = "salut"
                      If Not IsDate(xd) Then
                          xd = Date
                      End If
                      MsgBox xd
                  End Sub
                  xd est une date
                  Sub date2()
                      Dim xd
                      xd = #1/1/2009#
                      If Not IsDate(xd) Then
                          xd = Date
                      End If
                      MsgBox xd
                  End Sub

                  0
                  1. Ok je vais te dire exactement ce qu'il faut faire et vu que tu le regardes ce soir je vais le faire un peu plutard si ça ne te pose aucun probléme.

                    sinon l'expression IIf tu m'avait di que ça équivaut à
                    If condition
                    instruction
                    else instruction...

                    mais en fait si je te donne l'expression xd = IIf(IsDate(xd), xd, Date) comment tu le mettrai en if, else... car j'y arrive pas
                    0
                    1. Modérateur
                      Re,

                      Ben, je vais tester à la maison ce soir.
                      Toutefois tu me dis qu'il y a des macros que je ne pourrai pas exécuter : il faudra me dire lesquelles, comme ça je ne vais pas me casser la tête pour rien.

                      Tu ne m'as dit non plus l'erreur que tu obtiens.
                      En fait, tu pourra par exemple me dire exactement (dans l'ordre) ce que tu fais, et où ça coince.
                      0
                      1. Re,

                        j'espere que tu t'en sors bien. Ce n'est pas un fichier simple à traiter
                        0
                        1. en fait moi je les télécharge sur un site intranet malheureusement tu pourra pas le faire car il te faut un mot de passe et je peux pas t'en filer car moi même je n'en dispose pas.
                          0
                          1. Dans DocAv2_DocAv3 execute la macro Sub DocAvR2() en enlevant ou pas les commentaires et ensuite tu peux executer les autres macros si tu a en besoin.
                            Cependant, il existe des macros que tu ne pourra pas executer car elles sont en lien avc des sites web et des mots de passe donc impossible que ça marche(je n'ai pas acces au mot de passe ,désolais) c'est le cas de toutes les macros contenant des fichiers .jsp
                            0
                            1. Modérateur
                              Re,

                              Encore une chose.
                              Ces fichiers csv tu les obtiens comment?
                              0
                              1. Modérateur
                                Re,

                                tu peux essayer d'executer les macros du docAv pas à pas et ensuite tu verras.
                                Il doit avoir un ordre d'exécution je suppose.

                                Je vois les modules
                                DocAv
                                DocAv1n
                                DocAv2_DocAv3
                                etc.

                                Les modules contiennent des procécures et fonctions.
                                Les quelles je dois exécuter?!
                                0
                                1. Re,

                                  Je viens de te donner une veritable usine à gaz alors tu peux essayer d'executer les macros du docAv pas à pas et ensuite tu verras. Dans les 2 premiers csv il n'ya pas de problemes mais c'est la 3eme qui bug.
                                  Si tu veux plus de détails n'hésites pas!
                                  0
                                  1. troisieme fichier csv http://host01.pipebytes.com/get.php?key=10147654546867
                                    0
                                    1. Modérateur
                                      Re,

                                      Le 3ème fichier ne passe pas.
                                      Il y a une chose que je ne comprends pas.
                                      Tes fichiers CSV ne contient qu'un seul champ.
                                      Je ne vois pas où est le problème.

                                      Pour comprendre ton souci il faut que tu me dises ce que tu fais et aussi me dire les erreurs que tu rencontres.
                                      0
                                      1. http://host01.pipebytes.com/get.php?key=10147654021867
                                        0
                                        • 1
                                        • 2
                                        • 3