Cliquer un bouton via vba(excel)

Signaler
Messages postés
2
Date d'inscription
mardi 15 décembre 2009
Statut
Membre
Dernière intervention
15 décembre 2009
-
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,
Mon premier post ici. J'ai un pépin, défi, vba dans excel et à la lecture de ce forums je me suis dit que vous pourriez peut-être m'aider:

Je dois cliquer un bouton via vba dans une workbook excel. Il existe plusieurs bouton sur ma page et un à un je voudrais qu'excel clique les bouton lorsque j'active la page (worksheet_activate).

J'aimerais qu'Excel clique le bouton car le macro attaché à ce bouton se sert de la position du bouton (application.caller.topleftcell) pour exécuter les commandes qui s'y trouvent.

Donc le plus simple pour moi est de m'arranger pour que worksheet_activate "appuie" sur les boutons un à un et non de réécrire tout le code du bouton dans un worksheet_activate en changeant la source de positionnement.

Je n'ai pas trouvé comment y arriver et je suis incapable de concevoir qu'Excel (vba) ne puisse faire ça, après tout cliquer sur un bouton change son état et cet état est connu d'excel, sûrement Excel peut-il à son tour changer l'état du bouton...

merci

4 réponses

Messages postés
2
Date d'inscription
mardi 15 décembre 2009
Statut
Membre
Dernière intervention
15 décembre 2009
1
désolé pour le mauvais forum...

Bouton1_click ne fonctionne pas, (sub or command not found) j'ai déjà essayé.

en fait voici le code se sera plus facile:

je n'ai pas mis les dim et les set alors j'explique:
worksheet_activate formate d'abord la page en fonction de ce qui se trouve sur d'autre feuilles, ensuite je sélectionne la case ou se trouve le bouton, identifie le bouton qui s'y trouve exactement et de là je voudrais cliquer dessus via vba (les boutons étant créé par script via le worksheet_activate, ensuite une macro leur est assigné, toujours via vba dans worksheet_activate, donc le nom exact n'est pas connu et changera à chaque rafraichissement de la feuille). Dans le script ci-dessous myShape.clic représente le clic, qui ne marche pas. Identifier le bouton est en fait assez facile, le script ci-dessous y arrive via intersect.
buttonrow.Offset(0, 2).Select
    For Each myShape In ActiveSheet.Shapes
        If Intersect(myShape.TopLeftCell, ActiveCell) Is Nothing Then
            'do nothing
        Else
            myShape.clic
        End If
    Next myShape
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour,

ton tout premier "pépin" (comme tu dis) est probablement que tu ouvres sous le thème VB6 une discussion concernant un problème VBA !
C'est ton premier message ici et tu es donc pardonnable, mais il te faudra dorénavant veiller à apporter le plus grand soin au choix de la section où poser ta question (VBA et non VB6)

Ceci étant dit (et tu vas voir comment les choses sont différentes sous VBA) :

tout peut être différent selon le type des "boutons" dont il s'agit. où les as-tu choisis ? dans quelle boîte exactement ? Tu auirais beaucoup moins de problèmes en insérant des boutons de l'onglet "contrôles activex", qui, eux, réagissent fort différemment.

Mais qu'importe : imaginons que ce soit un bouton "purement" Excel (de l'autre boîte, donc) .
Si tu regarde dans la liste des macros, tu verras que la macro associée par exemble au bouton nommé bouton1 a, pour première ligne :
Sub Bouton1_Clic()

si tu veux simuler un click sur ce bouton (et donc exécuter les instructions de cette macro) il te suffit de déclencher Bouton6_Clic(), tout simplement

Ceci étant, ce genre de manoeuvre me laisse perplexe (surtout le fait que tu veux, dis-tu, "simuler un tel click" sur chaque bouton, à l'ouverture de ton classeur. Tu devrais à mon sens revoir complètement ce type d'approche pour le moins peu orthodoxe.
Voilà.
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bon... (et sans préjudice de mes remarques faites plus haut quant à l'orthodoxie de ta manoeuvre) ...
Je viens de coller un bouton6 sur la feuille Feuil1 et de lui affecter la macro (bouton6 par défaut) ===>>
Sub Bouton6_Clic()
  MsgBox "bouton6 de feuil1 cliqué"
End Sub

J'ai également collé un bouton6 sur la feuille Feuil2 ===>> la macro affectée par défaut a eu pour nom Feuil2_Bouton6 === >>
Sub Feuil2_Bouton6_Clic()
  MsgBox "bouton6 de feuil2 cliqué"
End Sub

J'ai ensuite collé de code suivant sur chacune des deux feuilles , dans l'évènement Change, pour voir la réaction :
Private Sub Worksheet_Change(ByVal Target As Range)
 Select Case activeshhet.Name
   Case "Feuil1"
     Bouton6_Clic
   Case "Feuil2"
     Feuil2_Bouton6_Clic
   End Select
End Sub

Je suis allé ensuite, tour à tour, sur chacune de mes deux feuilles ===>> aucun problème ! je reçois bien le message correspondant au bon bouton, lorsque je modifie une valeur dans une cellule.
Voilà.
Le reste est ton affaire.

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
lire activesheet et non activeshhet ...


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.