[Résolu] [Calc] Enregistrer une Macro

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Ar Foll
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 28 avr. 2016 16:30
Localisation : Addis Abeba - Éthiopie

[Résolu] [Calc] Enregistrer une Macro

Message par Ar Foll »

Bonjour,
Je découvre la fonction macro et je fais toute sorte d’essais pour me familiariser avec la "bête".
En suivant le tutoriel suivant (guide du débutant LibreOffice 4.0 - chapitre 13 - Débuter avec les macros)
  • 1- Vérifiez que l'enregistrement de macro est bien actif en allant dans Outils > Options >LibreOffice > Avancé et en cochant l'option Activer l'enregistrement de macro. Par défaut, cette fonction est désactivée lors de l'installation de LibreOffice sur votre ordinateur.
    2- Choisissez Outils > Macros > Enregistrer une macro dans la barre de menus principale pour démarrer l'enregistrement de la macro. Une petite boîte de dialogue Enregistrer une macro apparaît, indiquant que l'enregistrement de macro est en cours.
    3- Effectuez la séquence d'opérations que vous désirez. Par exemple, saisissez votre nom.
    4- Cliquez sur Terminer l'enregistrement dans la boîte de dialogue Enregistrer une macro pour arrêter l'enregistrement. La boîte de dialogue Macros LibreOffice Basic s'ouvre (Figure 1).
    5- Étendez le conteneur de bibliothèques Mes macros et trouvez la bibliothèque Standard. Notez que chaque conteneur de bibliothèques contient une bibliothèque nommée Standard.
    6- Sélectionnez la bibliothèque Standard et cliquez sur Nouveau Module pour créer le nouveau module qui va contenir la macro. La boîte de dialogue Nouveau module s'ouvre.
    7- Saisissez un nom significatif pour le nouveau module, Enregistrements par exemple, et cliquez sur OK pour le créer. Le nouveau module figure désormais dans la bibliothèque Standard dans la boîte de dialogue Macros LibreOffice Basic.
    8- Dans la zone Nom de la macro, saisissez le nom de la macro que vous venez d'enregistrer, SaisieNom par exemple.
    9- Cliquez sur Enregistrer pour enregistrer la macro et fermer la boîte de dialogue Macros LibreOffice Basic.
Le code suivant est attendu :

Code : Tout sélectionner

REM ***** BASIC *****
Sub Main
End Sub
sub SaisieNom
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 = "Jean Dupont"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
end sub
Or le mien donne :

Code : Tout sélectionner

  REM ***** BASIC *****
    Sub Main
    End Sub

sub SaisieNom
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 = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())


end sub
J'ai bien conscience que le tutoriel se base sur la version 4.0 et je possède la version 5.0 mais j'imagine que pour une telle requête le protocole ne doit guère changer.
J'ai cherché un peu partout une case à cocher ou à décocher mais je ne vois pas où le bas blesse.
Pas plus d'info sur le forum, à moins que je ne choisisse pas les mots-clés.

Merci de votre aide
Dernière modification par Ar Foll le 29 avr. 2016 19:11, modifié 2 fois.
LibreOffice 5.0.5.2 sous Ubuntu 14.04
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Enrigistrer une Macro

Message par Piaf »

Bonjour
Tu cites deux chapitres différents du guide en question.
Les arguments ne sont pas les mêmes, et la commande du dispatcher est différente..
L'argument de ta macro demande de te positionner dans la cellule A1.
L'argument de la seconde macro demande d'insérer le nom dans la cellule active puis de passer à la cellule suivante.
La seconde macro a été écrite, pas enregistrée (à priori) :lol:
L'enregistreur de macros peut être pratique dans certains cas à condition de pouvoir utiliser les arguments qui vont bien.
Et il est très difficile de trouver de la documentation sur ces arguments.
A+
Dernière modification par Piaf le 29 avr. 2016 19:04, modifié 1 fois.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
Ar Foll
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 28 avr. 2016 16:30
Localisation : Addis Abeba - Éthiopie

Re: [Calc] Enrigistrer une Macro

Message par Ar Foll »

Bonsoir,
Merci de ta réponse
Le tutoriel se trouve page 8 du document suivant https://wiki.documentfoundation.org/ima ... Macros.pdf, rubrique "Enregistrer une macro"
La page de garde stipule bien qu'il s'agit du "Guide du débutant LibreOffice 4.0 - Chapitre 13 - Débuter avec les macros", jusque là je ne vois pas où est l'erreur.
Le code attendu se trouve page 9 du même guide: section "Afficher et éditer des macros". Sauf erreur de ma part, il s'agit de l'édition de la macro "SaisieNom" réalisée grâce au tutoriel de la page 8.
Ce code est le premier que j'ai copier/coller depuis le guide dans ma question (qu'il ait été écrit ou enregistré, je ne saurais le dire puisque je n'en suis pas l'auteur).
Le second code est celui qui j'ai obtenu en suivant le tutoriel (Il n'a donc pas été écrit mais enregistré et copier/collé par mes soins dans le message).
Ces deux codes ne devraient-ils pas être identiques ?
En les comparant, j'ai bien compris la fonction différente de ces deux macros.
J'aimerais juste comprendre comment, en suivant le tutoriel d'une macro destinée à inscrire un nom dans une cellule, j'en obtiens une destinée à positionner le curseur dans une cellule.
LibreOffice 5.0.5.2 sous Ubuntu 14.04
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Enregistrer une Macro

Message par Piaf »

Re
Ar Foll a écrit :J'aimerais juste comprendre comment, en suivant le tutoriel d'une macro destinée à inscrire un nom dans une cellule, j'en obtiens une destinée à positionner le curseur dans une cellule.
Tu n'as pas enregistré la même macro.
Place toi dans la cellule A1 puis Menu Outils <> Macros <> Enregistrer une macro.
Tape le texte que tu veux dans la cellule puis appuie sur Entrée.
Puis clique sur terminer l'enregistrement.
Enregistre la macro.
Je n'ai pas renommé la macro enregistrée.

Code : Tout sélectionner

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(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "StringName"
args1(0).Value = "Duguidon marcel"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())


end sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
Ar Foll
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 28 avr. 2016 16:30
Localisation : Addis Abeba - Éthiopie

Re: [Calc] Enregistrer une Macro

Message par Ar Foll »

Bonsoir et merci de ton explication.

Dans le tutoriel les étapes 3 et 4 étaient notées comme suit :
  • 3) Effectuez la séquence d'opérations que vous désirez. Par exemple, saisissez votre nom.
    4) Cliquez sur Terminer l'enregistrement dans la boîte de dialogue Enregistrer une macro pour arrêter l'enregistrement. La boîte de dialogue Macros LibreOffice Basic s'ouvre (Figure 1).
Après avoir saisi mon nom, j'ai directement cliqué sur "Terminer l'enregistrement" sans taper sur "Entrer" avant (problème de compréhension du terme saisir).
L’enregistreur de Macros a donc bien enregistré mon clique dans la cellule, mais pas ce que j'y ai tapé. D'où le code différent.
Merci encore :wink:
LibreOffice 5.0.5.2 sous Ubuntu 14.04
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Enregistrer une Macro

Message par Piaf »

Re
Sans l'enregistreur tu peux :
Te placer dans une cellule puis Menu Outils <> Macro <> Exécuter la macro

Code : Tout sélectionner

Sub Main
Dim sel as Object
	sel = thisComponent.CurrentSelection
	Sel.String = "Duguidon Marcel"
End Sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64