[Résolu] [Calc] Assignation à un bouton créé dynamiquement

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 !
Happy19
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 06 juil. 2023 17:43

[Résolu] [Calc] Assignation à un bouton créé dynamiquement

Message par Happy19 »

Bonjour

J'ai créé un bouton qui me lance une macro pour créer un bouton, mais je n'arrive pas via oooBasic à assigner ma macro "Message" au bouton que j'ai créé.

Si quelqu'un a une petite idée ca m'aiderai bien :)


Merci et bonne journée
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Happy19 le 07 juil. 2025 20:58, modifié 3 fois.
Libreoffice 25.2.4.3 (X86_64) Linux
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1154
Inscription : 19 août 2018 05:20

Re: [Calc] Assigner macro à un bouton

Message par Dolev »

Bonjour,
Happy19 a écrit : 29 juin 2025 10:54 J'ai créé un bouton qui me lance une macro pour créer un bouton
Il serait plus simple de masquer le 2e bouton et de l'afficher lorsqu'on clique sur le 1er.
Open Office 4.1.15 sous Windows 11
Happy19
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 06 juil. 2023 17:43

Re: [Calc] Assigner macro à un bouton

Message par Happy19 »

Merci pour ta réponse mais ca ne conviendrait pas car pour l'exemple, j'ai tout fait sur une feuille, mais l'objectif est d'ajouter un bouton avec macro suite à l'import d'une feuille
Libreoffice 25.2.4.3 (X86_64) Linux
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26007
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Assigner macro à un bouton

Message par Dude »

Salut,

Déjà il faut publier le code qu'il y a dans ton document. Cela permet de constater des erreurs sans avoir à télécharger de fichier.

Code : Tout sélectionner

Sub AjouterBoutonAvecPosition
    Dim oDoc As Object
    Dim oFeuille As Object
    Dim oDrawPage As Object
    Dim oForm As Object
    Dim oBouton As Object
    Dim oControlShape As Object

    ' Récupérer le document et la feuille active
    oDoc = ThisComponent
    oFeuille = oDoc.CurrentController.ActiveSheet
    oDrawPage = oFeuille.DrawPage

    ' Créer le bouton
    oBouton = oDoc.createInstance("com.sun.star.form.component.CommandButton")
    oBouton.Name = "MonSuperBouton"
    oBouton.Label = "Clique-moi"
    
    
    
        
    
        Dim oEvent As New com.sun.star.script.ScriptEventDescriptor
    oEvent.EventMethod = "actionPerformed"
    oEvent.ScriptType = "Script"
    oEvent.ScriptCode = "vnd.sun.star.script:Standard.Module1.MacroCible?language=Basic&location=document"
    oEvent.ListenerType = "XActionListener"
   ' oBouton.addScriptListener(oEvent)

    ' Créer le formulaire
    oForm = oDoc.createInstance("com.sun.star.form.component.Form")
    oForm.Name = "Message"
    oForm.insertByIndex(0, oBouton)
    
	
    
    

    ' Ajouter le formulaire à la feuille (via DrawPage)
    oDrawPage.Forms.insertByIndex(0, oForm)

    ' Créer la forme associée au contrôle
    oControlShape = oDoc.createInstance("com.sun.star.drawing.ControlShape")

    ' Définir la taille et position AVANT de l’ajouter à la page
    Dim oSize As New com.sun.star.awt.Size
    oSize.Width = 3000 ' En 1/100 mm => 3000 = 3 cm
    oSize.Height = 1500 ' 1.5 cm
    oControlShape.Size = oSize

    Dim oPosition As New com.sun.star.awt.Point
    oPosition.X = 5000 ' 5 cm depuis la gauche
    oPosition.Y = 4000 ' 4 cm depuis le haut
    oControlShape.Position = oPosition

    oControlShape.Control = oBouton

    ' Ajouter le bouton à la feuille
    oDrawPage.add(oControlShape)
End Sub


Sub Message
	MsgBox("test touton")
End Sub
Ensuite, tu devrais te servir de XRay pour comprendre comment affecter ton bouton correctement.
Par exemple, tu indiques un script "MacroCible" qui n'existe pas pour la propriété oEvent.ScriptCode
Et je ne vois nulle part l'affectation de l'événement au contrôle.
Donc forcément, cela ne peut pas fonctionner en l'état.
Enfin, tu as créé énormément de formulaires. On peut le constater avec le navigateur :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Happy19
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 06 juil. 2023 17:43

Re: [Calc] Assigner macro à un bouton

Message par Happy19 »

Dude a écrit : 30 juin 2025 08:03 je ne vois nulle part l'affectation de l'événement au contrôle.

Salut et merci pour ta réponse

Peux tu m'en dire plus où me dire où puis je trouver de la doc concernant l'l'affectation de l'événement au contrôle ?

Je n'ai rien trouvé dans la doc oooBasic

Car je ne suis pas un expert.

Merci et bonne soirée
Dernière modification par Oukcha le 01 juil. 2025 04:07, modifié 1 fois.
Raison : Citation réduite à l'essentiel
Libreoffice 25.2.4.3 (X86_64) Linux
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26007
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Assigner macro à un bouton

Message par Dude »

Happy19 a écrit : 30 juin 2025 21:34 Peux tu m'en dire plus où me dire où puis je trouver de la doc concernant l'l'affectation de l'événement au contrôle ?
Gestionnaire d'affectation d'événement : https://www.openoffice.org/api/docs/com ... nager.html
Utilise la méthode registerScriptEvent sur l'objet formulaire que tu as créé.
Happy19 a écrit : 30 juin 2025 21:34 Car je ne suis pas un expert.
Bis repetitae
Dude a écrit : 30 juin 2025 08:03 tu devrais te servir de XRay pour comprendre comment affecter ton bouton correctement.
Happy19
NOOuvel adepte
NOOuvel adepte
Messages : 24
Inscription : 06 juil. 2023 17:43

Re: [Calc] Assignation à un bouton créé dynamiquement

Message par Happy19 »

J'ai essayé avec Xray mais je n'ai pas réussi, j'ai mis un bouton sur un autre feuille ce qui a permis de contourner mon probléme

Merci pour votre aide, je mets le post en résolu
Libreoffice 25.2.4.3 (X86_64) Linux
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26007
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Assignation à un bouton créé dynamiquement

Message par Dude »

Happy19 a écrit : 07 juil. 2025 20:58 J'ai essayé avec Xray mais je n'ai pas réussi
Ce genre de phrase n'aide pas à comprendre ce qui t'arrive.
XRay est un document avec un mode d'emploi.
Si tu as un problème avec, tu ouvres un sujet et tu fournis des copies d'écran de là où ça coince.
Happy19 a écrit : 07 juil. 2025 20:58 j'ai mis un bouton sur un autre feuille ce qui a permis de contourner mon probléme
Il est d'usage sur un forum de partager en mettant en ligne un document exposant ce contournement.
Ce n'est pas pour toi mais pour les autres qui auraient ensuite la même problématique.

La routine ci-dessous a été corrigée avec ce que je t'ai proposé :

Code : Tout sélectionner

Sub AjouterBoutonAvecPosition
    Dim oDoc As Object
    Dim oFeuille As Object
    Dim oDrawPage As Object
    Dim oForm As Object
    Dim oBouton As Object
    Dim oControlShape As Object

    ' Récupérer le document et la feuille active
    oDoc = ThisComponent
    oFeuille = oDoc.CurrentController.ActiveSheet
    oDrawPage = oFeuille.DrawPage

    ' Créer le bouton
    oBouton = oDoc.createInstance("com.sun.star.form.component.CommandButton")
    oBouton.Name = "MonSuperBouton"
    oBouton.Label = "Clique-moi"
 
    Dim oEvent As New com.sun.star.script.ScriptEventDescriptor
    With oEvent
    	.EventMethod = "actionPerformed"
    	.ScriptType = "Script"
    	.ScriptCode = "vnd.sun.star.script:Standard.Module1.Message?language=Basic&location=document"
    	.ListenerType = "XActionListener"
    End with
   'oBouton.addScriptListener(oEvent)

    ' Créer le formulaire
    oForm = oDoc.createInstance("com.sun.star.form.component.Form")
    oForm.Name = "Message"
    oForm.insertByIndex(0, oBouton)    
    oForm.registerScriptEvent(0, oEvent) '<- ajout de l'événement
    ' Ajouter le formulaire à la feuille (via DrawPage)
    oDrawPage.Forms.insertByIndex(0, oForm)

    ' Créer la forme associée au contrôle
    oControlShape = oDoc.createInstance("com.sun.star.drawing.ControlShape")

    ' Définir la taille et position AVANT de l’ajouter à la page
    Dim oSize As New com.sun.star.awt.Size
    oSize.Width = 3000 ' En 1/100 mm => 3000 = 3 cm
    oSize.Height = 1500 ' 1.5 cm
    oControlShape.Size = oSize

    Dim oPosition As New com.sun.star.awt.Point
    oPosition.X = 5000 ' 5 cm depuis la gauche
    oPosition.Y = 4000 ' 4 cm depuis le haut
    oControlShape.Position = oPosition

    oControlShape.Control = oBouton

    ' Ajouter le bouton à la feuille
    oDrawPage.add(oControlShape)
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.