Ecrire le code du commandButton lors de sa créatio

Résolu
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007 - 22 juin 2007 à 14:36
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007 - 25 juin 2007 à 10:20
Bonjour, 
j'ai écris une macro qui crée un Command bouton "automatiquement" avec des caractéristiques spécifique :

Sub Créer_bouton

    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
    , DisplayAsIcon:=False, Left:=0 + 18.5 * j, Top:=18.5 * i, Width:=18.5, Height:=18.5). _
    Select
    'Selection.ShapeRange.ZOrder msoSendToBack
    Selection.Object.BackStyle = 0 - fmBackStyleTransparent
    Selection.Object.BackColor = &H8000000B
    Selection.Object.Caption = " "
    Selection.ShapeRange.Fill.Visible = msoFalse
    Selection.ShapeRange.PictureFormat.Contrast = 1#
 
End Sub

Mais j'aimerais que lorsque que ce CommandButton se créer, on associe une formule (ou copie une formule) dans le code du CommandButton

un truc du genre : Copy : "aaa", &Selection.Object.Name

Pour avoir comme résultat dans le code du CommandButton :

Private Sub CommandButton1_Click()
aaa CommandButton1
End Sub

aaa étant un sous programme du genre

Sub aaa(Bouton As CommandButton)
...
...
End Sub

Voilà, si quelqu'un a une idée qu'il n'hésite pas.

@+

Je viens de découvrir le bonheur de programmer et le VB me le rend bien

7 réponses

cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016
22 juin 2007 à 15:06
Très simple, mais dangereux, car cela t'oblige à ouvrir la protection de l'éxécution du code VBA

sinon : dans ton Créer_bouton, tu colles :

   ' tu crée un nouveau module nommé "coucou"
    Set num = ThisWorkbook.VBProject.VBComponents.Add(1)
    num.Name = "coucou"
    
  ' tu y colles une nouvelle routine :
    txt = "Sub collage()" + vbCrLf + "Copy : ""aaa"", &Selection.Object.Name" + vbCrLf + "End Sub"
    num.CodeModule.InsertLines 1, txt

et pour supprimer le module

With ThisWorkbook.VBProject.VBComponents
        On Error Resume Next
        .Remove .Item("coucou")
End With

coïto ergo sum
3
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
22 juin 2007 à 15:28
Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
22 juin 2007 à 15:45
Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
22 juin 2007 à 15:58
Re,
je suis débutant avec une expériance de 5 jours de code sous VBA, et je n'ai donc pas tout compris à ta réponse.

 tu crée un nouveau module nommé "coucou"
    Set num = ThisWorkbook.VBProject.VBComponents.Add(1)
    num.Name = "coucou"
apparament cela permet de créer un nouveau module (mais apparament, il faut enlever la protection de VBA)

 tu y colles une nouvelle routine :
    txt = "Sub collage()" + vbCrLf + "Copy : ""aaa"", &Selection.Object.Name" + vbCrLf + "End Sub"
    num.CodeModule.InsertLines 1, txt
ici, cette partie j'ai pas tout compris
Sub collage est une fonction que je doit créee? et que veu dire vbCrLf

Merci d'avance

Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0

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

Posez votre question
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
22 juin 2007 à 16:47
Alors pourquoi avoir accepté la réponse !!!

N'existe-t-il pas un : Selection.Object..OnAction = "NomMacro_A_Exécuter"
Si cela existe, il suffit de créer le code de la macro à exécuter par le bouton et l'association bouton/macro se fera via OnAction
JML
0
cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016
22 juin 2007 à 17:17
ce n'est pas contradictoire :  le .onaction appelle une fonction qui existe déjà ... mais que tu ne peux créer dynamiquement

sinon :

Set num = ThisWorkbook.VBProject.VBComponents.Add(1) : définit la variable objet num comme étant un composant vba (module ...que j'ajoute à ceux existant )
    num.Name = "coucou" : lui donne un nom (autre que celui par défaut)

    txt = "Sub collage()" + vbCrLf + "Copy : ""aaa"", &Selection.Object.Name" + vbCrLf + "End Sub"
    num.CodeModule.InsertLines 1, txt

txt (avec dim txt as string) définit une variable de type string (chaine de caractères)
"   " : entre quillemet le teste
& : opérateur de concatenation (oups, j'ai mis +, qui est une erreur d'écriture)
vbcrlf : pour sauter une ligne (!! vblf et vbcr !! pour faire la distinction entre fin de ligne et fin de paragraphe)
insertlines 1, txt :
- le 1 pour dire où dans le module (ligne 1 dans mon cas, mais on pourrait connaitre la taille du fichier et écrire à la fin)
- txt : ce que l'on colle à partir du numéro de ligne définit

coïto ergo sum
0
taj88 Messages postés 113 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 28 août 2007
25 juin 2007 à 10:20
Slt, apparemment VBA n'accepte pas la méthode que tu préconise.


De plus, comme je crée mon CommandButton, je n'ai pas besoin de créer un module num, mais par contre à l'intérieur de mon code de création du command button, je peux peut-^tre indiquer qqc comme cela  (ligne en rouge):

Sub Créer_bouton

    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
    , DisplayAsIcon:=False, Left:=0 + 18.5 * j, Top:=18.5 * i, Width:=18.5, Height:=18.5). _
    Select

txt = "aaa",&Selection.Object.Name

Select.CodeObject.Insert, txt

Voilà, ceci n'est pas coorect mais est ce quelqu'un connait peut être la commande correcte.

Merci d'avance
@+

Je viens de découvrir le bonheur de programmer et le VB me le rend bien
0