Macro et openoffice

Utilisateur anonyme -  
 jeje -
bonjour,
Je veux ecrire une macro sous openoffice qui me créerai plusieurs nouvelles feuilles avec des noms différents mais je ne vois pas vraiment comment faire. Quelqu'un peut-il m'aider.

Merci

11 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    à adapter selon les besoins.
    Sub AddSheet()
       Dim myDoc as Object, mySheets as Object
       Dim name1 as String, name2 as string
    
       myDoc = thisComponent
       mySheets = myDoc.Sheets
       
      ' le nom de la feuille après laquelle on crée la nouvelle
       name1 = InputBox("Insérer une feuille après : ")
       name2 = InputBox("La feuille crée aura pour nom : ")
    
       mySheets.insertNewByName(name2, getIndexByName(mySheets,name1) +1)
    End Sub
    0
  2. Utilisateur anonyme
     
    Merci pour cette macro mais elle ne fonctionne pas. Je recois le message suivant:

    Runtime error BASIC
    La sous-procédure ou procédure fonctionnelle n'est pas définie

    Que dois-je faire pour corriger cette erreur.

    Merci
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    La sous-procédure ou procédure fonctionnelle n'est pas définie

    C'est ma faute.
    getIndexByName c'est une fonction dont je ne t'ai pas donné le code.

    Maintenant tu as plusieurs posibilités :

    1. tu ajoute la nouvelle feuille à la fin
    Sub AddSheet()
       Dim myDoc as Object, mySheets as Object
       Dim name as String
    
       myDoc = thisComponent
       mySheets = myDoc.Sheets
       
       name = InputBox("La feuille crée aura pour nom : ")
       mySheets.insertNewByName(name2, -1)
    End Sub


    2. Ajouter la feuille par rapport à une autre feuille
    Sub AddSheet()
     Dim myDoc as Object, mySheets as Object
     Dim name1 as String, name2 as string
    
     myDoc = thisComponent
     mySheets = myDoc.Sheets
       'le nom de la feuille après laquelle on crée la nouvelle
     name1 = InputBox("Insérer une feuille après : ")
     name2 = InputBox("La feuille crée aura pour nom : ")
    
     mySheets.insertNewByName(name2, _
                                         getIndexByName(mySheets, name1) +1)
    End Sub
    
    'en cas de succes la fonction renvoie l'index correspondant
    'en cas d'échec elle affiche un message d'erreur
    'et renvoie un index hors-limite (la feuille est ajouter à la fin)
    
    Function getIndexByName(collection As Object, _
                                theName As String) As Long
    Dim i As Long
    for i = 0 to collection.Count -1
     if collection(i).Name = theName then
       getIndexByName = i ' renvoyer l'index correspondant au nom
       Exit Function
     end if
    next
    MsgBox("Feuille inexistante : " & theName & ". La nouvelle feuille a été ajoutée à la fin.", 16, "Collection")
    getIndexByName = -100 ' la feuille est ajoutée à la fin si theName inexistant
    End Function 


    lami20j
    0
    1. Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   214
       
      salut à Lamij et olivier3006,

      lamij,

      ta macro fonctionne certainement sous Microsoft Office Excel, mais olivier3006 s'interesse à openoffice ;-)

      J'ai oOo, mais je n'ai pas encore eu le temps d'approfondir son basic. Voici ce que j'ai obtenu avec l'enregistreur de macro, pour ajouter une feuille dans un classeur existant :

      sub Main
      	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(1) as new com.sun.star.beans.PropertyValue
      	args1(0).Name = "Name"
      	args1(0).Value = "Feuille4"
      	args1(1).Name = "Index"
      	args1(1).Value = 2
      	
      	dispatcher.executeDispatch(document, ".uno:Insert", "", 0, args1())
      end sub
      


      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention  
         
        Salut,

        ta macro fonctionne certainement sous Microsoft Office Excel, mais olivier3006 s'interesse à openoffice ;-)


        Je suppose que tu l'as tester sur Excel. Je parle de mon code. Et tu l'as testé aussi sous OpenOffice.

        je crois que cette ligne devra te dire qu'on est dans OOoBasic
        myDoc = thisComponent


        Malheureusement, ta remarque m'a bien fait rigoler.
        Je n'envoie jamais un code sans l'avoir tester avant. La seul faute que j'ai fait c'est que j'ai oublié la fonction
         getIndexByName
        .

        Et ça marche.
        0
      2. Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   214 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        salut lamij,

        autant pour moi :-(
        comme je l'ai dit, je n'ai pas eu le temps de tester oOo Basic en profondeur. Et le peu que j'en avais vu, le code oOo Basic ne m'avait pas semblé ressembler autant au Visual Basic.

        sans rancune j'espère ? :-)

        0
      3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention  
         
        Salut Kobaya,

        ne t'inquiète pas, je ne suis pas rancunier.

        Je crois que tu sais déjà que l'enregistrement des macros sous Excel est très bavard.

        Ex.
        Voilà ce que Excel écrit si on veut la feuille en paysage
        Sub Macro2()
        '
        ' Macro2 Macro
        ' Macro enregistrée le 17/09/2005 par lami
        '
        
        '
            With ActiveSheet.PageSetup
                .PrintTitleRows = ""
                .PrintTitleColumns = ""
            End With
            ActiveSheet.PageSetup.PrintArea = ""
            With ActiveSheet.PageSetup
                .LeftHeader = ""
                .CenterHeader = ""
                .RightHeader = ""
                .LeftFooter = ""
                .CenterFooter = ""
                .RightFooter = ""
                .LeftMargin = Application.InchesToPoints(0.787401575)
                .RightMargin = Application.InchesToPoints(0.787401575)
                .TopMargin = Application.InchesToPoints(0.984251969)
                .BottomMargin = Application.InchesToPoints(0.984251969)
                .HeaderMargin = Application.InchesToPoints(0.4921259845)
                .FooterMargin = Application.InchesToPoints(0.4921259845)
                .PrintHeadings = False
                .PrintGridlines = False
                .PrintComments = xlPrintNoComments
                .PrintQuality = 96
                .CenterHorizontally = False
                .CenterVertically = False
                .Orientation = xlLandscape
                .Draft = False
                .PaperSize = xlPaperA4
                .FirstPageNumber = xlAutomatic
                .Order = xlDownThenOver
                .BlackAndWhite = False
                .Zoom = 100
                .PrintErrors = xlPrintErrorsDisplayed
            End With
        End Sub
        


        En fait on n'a besoin que de

        Sub Macro2()
         ActiveSheet.PageSetup.Orientation = xlLandscape
        End Sub


        C'est pareil avec OpenOffice, lui aussi il est bavard.

        Ex :
        -pour écrire dans une cellule les 2 macros font la même chose

        1. macro enregistée
        sub test
        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 = "StringName"
        args1(0).Value = "Azerty"
        
        dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())
        
        rem ----------------------------------------------------------------------
        dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
        
        
        end sub
        

        2. macro écrit
        sub test2 ()
        
        ThisComponent.Sheets.getByName("Feuille1").getCellByPosition(0,0).string="Azerty"
        
        end sub


        A+

        lami20j
        0
  4. Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   214
     
    effectivement, côté bavardage, oOo n'est pas mal, peut-être même pire que VBA!

    Merci du tuyau lamij :-)

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

    Posez votre question
  6. allamezon
     
    Bonjour,

    Je voulais demander à lami20j s'il connaissait un bon moyen d'avoir le code du basic que oOo utilise ?

    J'ai fait un outil sous Excel et voudrait le mettre sous openoffice mais j'avoue que ce n'est pas aussi facile de le dire que de le faire....

    Merci d'avance,

    Sébastien
    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    un bon moyen d'avoir le code du basic que oOo utilise

    je te recommande ce livre Programmation OpenOffice.org 2

    en revanche si tu n'as besoin que pour ton application seulement tu peux m'envoyer le code de ton appli (voir le fichier excel entier) pour faire la conversion

    tu peux aussi chercher sur google

    à toi de voir
    0
  8. allamezon
     
    Salut et merci à toi pour la réponse !

    Je vais voir pour ton bouquin, j'aimerais tellement basculer complètement sous openoffice et diffuser autour de moi pour faire en sorte que l'informatique soit pour tous et abordable !

    En fait, j'aimerai te l'envouer tout en essayant de m'y mettre moi-même. Tu verras qu'il n'y a rien de compliqué. Tu peux même me donner quelques billes pour que je le fasse seul mais j'ai quelques soucis à démarrer, question de code.
    Il me manque juste ton adresse électronique ?!

    A bientôt !

    Sébastien
    0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Il me manque juste ton adresse électronique ?!
    ou la tienne ;-))
    tu peux mettre ton fichier sur https://www.cjoint.com/
    0
  10. allamezon
     
    Bonjour,
    fauvel.sebastien@wanadoo.fr
    0
  11. billouane Messages postés 4 Statut Membre
     
    Hello tt le monde,

    Je vois qu'il y en a qui maîtrise un max les macros sur Oo... n'étant pas aussi doué, je viens quérir un peu d'aide :-)

    Voila, j'ai fais une macro trés simple sur Excel dont voici le but:
    Si, dans la première feuille, on inscrit une valeur dans une cellule de la première colonne (exemple : 3:1), la macro va chercher dans la seconde feuille les renseignements (à savoir des références) associées à cette valeur et les copie dans les deux cellules suivantes ( 3:2 et 3:3).

    Sub Copie_conditionnelle()
    Dim i As Integer
    Dim j As Integer
    For i = 3 To 13
    For j = 3 To 13
    If Worksheets(2).Cells(j, 1) = Worksheets(1).Cells(i, 1) Then
    Worksheets(1).Cells(i, 2) = Worksheets(2).Cells(j, 2)
    Worksheets(1).Cells(i, 3) = Worksheets(2).Cells(j, 3)
    End If
    Next
    Next
    End Sub

    Si quelqu'un pouvait me donner un coup de pouce pour la traduire en Open office 2.2 ce serait impecc!!!
    Merci
    0
  12. Gihef Messages postés 5165 Statut Contributeur 2 781
     
    Bonjour,
    Des feuilles de classeur ?
    Clic droit sur un onglet de feuille de calcul—Insérer une feuille…—Indiquer le nombre.
    Sinon, des noms comment ?
    -2
    1. jeje
       
      bonjour comment on fait pour faire des fichier sur imacro
      0