needlesurfer
Messages postés2Date d'inscriptionmardi 15 décembre 2009StatutMembreDernière intervention15 décembre 2009
-
15 déc. 2009 à 22:02
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
15 déc. 2009 à 23:28
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...
needlesurfer
Messages postés2Date d'inscriptionmardi 15 décembre 2009StatutMembreDernière intervention15 décembre 20091 15 déc. 2009 à 22:50
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 15 déc. 2009 à 22:17
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 15 déc. 2009 à 23:25
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 15 déc. 2009 à 23:28
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.