Boucle FOR / EACH sur des boutons de commande

Bonjour à tous,

Je vous souhaite une très bonne année et surtout la santé !!

j'ai une question sur des boucles concernant des boutons.

je m'explique : j'ai crée un plan interactif avec beaucoup de boutons et quand on clique sur un bouton, celui-ci change de couleur et affiche une donnée via une rechercheV. tout marche très bien mais j'ai 180 boutons et j'ai MouseUP et MouseDown a gérer donc 360 procédures. Je les ai écrites mais je ne suis pas content du résultat et je voudrais les remplacer par des boucles. Comment peut-on transformer ce qui suit en boucle ? franchement je sèche...

Sachant qu'il n'y a que CommandButton32 qui va varier, tout le reste est invariant.

Private Sub CommandButton32_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
TextBox3.Value = Application.VLookup("RDC" & CommandButton32.Caption, Feuil3.Range("D:E"), 2, False)
CommandButton32
.BackColor = &HFF00&
TextBox3.BackColor = &HFF00&
End Sub

Merci d'avance pour vos idées !

Bonjour

Merci d''utiliser les balises de code disponible dans la barre de menu. Cliquez sur l'icone </>, et placer votre code dans la fenêtre.

Sachant qu'il n'y a que CommandButton32 qui va varier, tout le reste est invariant.

Il faut passer par les modules de classe.

Sinon peut être une solution dans ce fil mais les boutons ne sont pas des activeX mais bien fait via Controle de formulaire --> https://forum.excel-pratique.com/excel/extraire-le-texte-d-un-bouton-dans-une-cellule-165397

Cordialement

Bonjour Dan,

J'ai vu qu'il fallait utiliser les modules de classe en effet.

je vais creuser ta solution mais changer une propriété d'une shape en boucle, ok, mais comment dire que c'est quand je clique sur le bouton par exemple ? (Mouse Up/down dans mon cas)

Merci

Il y a quelques internautes ici qui connaissent bien les modules de classe. ce n'est pas mon cas malheureusement.
C'est l'idéal par rapport à ce que vous avez effectué dans votre fichier. Pour ne pas tout changer.

je vais creuser ta solution mais changer une propriété d'une shape en boucle, ok, mais comment dire que c'est quand je clique sur le bouton par exemple ? (Mouse Up/down dans mon cas)

Pas sûr d'avoir bien saisi là...

en fait, j'ai des centaines de procédures "Sub MouseUp" ou "Sub MouseDown" pour tous les cas ou je clique ou relache le clic d'un bouton car j'ai 150 boutons différents. c'est cela que je cherche à boucler en une procèdure.

Bonsoir,

ci joint un petit fichier sans prétention et sans module de classe :

En fait c'est une shape à laquelle on donne une apparence de bouton et à laquelle on affecte une macro unique.
On récupère le nom du shape cliqué, car une fois l'affectation de la macro le shape devient cliquable, et vu que l'on sait sur lequel on a cliqué, on peut récupérer son texte et en faire ce que l'on veut. Ici pour l'exemple je change simplement le texte en un autre.

Si le besoin se fait d'avoir un nouveau bouton, on copie colle "un ancien" et voilà vous avez trois boutons qui réagissent de la même manière, mais toujours en fonction de leur valeur texte.

En plus ils ne sont pas ActiveX donc l'application est "plus" partageable.
C'est ce que je fais sur mes applications, comme cela je sort du carcan des bouton gris, mais il est vrai que je perd l'effet "bouton appuyé"...

@ bientôt

LouReeD

Bonjour LouReed,

C'est très intéressant comme concept !

je vais voir si j'arrive à l'adapter à mes besoins, j'aime bien le côté diffèrent du bouton classique

Merci !

J'ai adapté votre code et c'est parfait !

voici le résultat basé sur votre exemple.

un grand merci !

Cela dit, j'ai une dernière demande : comment transformer une shape en objet que l'on peut cliquer ? j'ai essayé de comprendre comment vous faites mais je n'ai pas trouvé.

Avec ça, je serai complètement autonome.

Merci

Bonjour

comment transformer une shape en objet que l'on peut cliquer ? j'ai essayé de comprendre comment vous faites mais je n'ai pas trouvé.

Vous devez aller dans le menu "Developpeur" --> "Insérer". Là vous choisissez votre bouton dans l'espace "controle ActiveX"
Le code de LoodReed fait appel aux boutons "Controle de formulaire".
Si vous utilisez un bouton "Activex", vous devrez refaire le code.

Cordialement

Edit : voir ma réponse dans mon post suivant

Bonjour Dan,

Vous êtes sûr ? car je cite LouReed : " En fait c'est une shape à laquelle on donne une apparence de bouton et à laquelle on affecte une macro unique "

Si vous cliquez dessus, cela n'a pas du tout le comportement d'un bouton, ActiveX ou formulaire. et leurs noms sont du style "Rectangle 3".

Il a, selon moi, crée des formes auxquelles il a affecté la macro mais c'est cette étape qu'il me manque

re

Si vous cliquez dessus, cela n'a pas du tout le comportement d'un bouton, ActiveX ou formulaire. et leurs noms sont du style "Rectangle 3".

Hum... exact je me suis mêlé les pinceaux là....

la création faite par LooReed, c'est via Insertion --> Illustrations --> Formes
Mais ce que vous ai donné avant existe aussi bien entendu. Là les codes changeront.

Encore désolé....

Ca y est, j'ai compris la manip. Pas de soucis Dan et un grand merci pour votre réactivité

Bonjour tout le monde !

Une fois la forme insérée, et mise en forme, clic droit dessus et choisir "affecter une macro".

Ceci est à faire avant les copies de ce bouton comme cela l'affectation est également copiée.

@ bientôt

LouReeD

Bonjour LouReed,

Merci bien, j'ai pigé le truc juste avant votre réponse, Dan m'a mis sur la piste.

En tout ca, ça marche nickel

a+

Et en lieu et place des formes, vous pouvez mettre des images png (par exemple) avec les bibliothèques de boutons en tout genre que l'on peut trouver sur le net !

Merci pour vos remerciements !

@ bientôt

LouReeD

Bonsoir, avec le bouton "formulaire" c'est tout aussi simple... Voici un fichier où j'ai essayé de mettre une animation sur les "formes" pour donner un semblant de dynamisme :

Et le bouton formulaire une fois une macro affectée peut également être copier/coller pour en créer un deuxième qui fonctionne pareil !

@ bientôt

LouReeD

Merci

Bonjour LouReeD,

Je me suis rendu compte d'un

problème après coup, suite à la mise en place de cette nouvelle méthode.

je cherche à boucler sur toutes les formes d'un onglet et à changer la couleur d'une shape si le texte = 2 (voir l'exemple fourni).

Mon code ne fonctionne pas, je ne vois vraiment pas pourquoi.

Pourriez vous y jeter un oeil svp ?

Merci d'avance

Bonjour,

première chose (mais je n'en suis pas sur) :
Il faut que le code lié aux formes soit dans un module standard et non pas dans un module de feuille et encore moins avec une instruction Private.

deuxième point :
Les code des formes ne sont pas égaux aux code des ActiveX ou autre, il faut utiliser le "bon dictionnaire", pour cela vous avez l'enregistreur de macro ou bien internet ou plus précisément Excel-Pratique.com !

Ci dessous le code modifié pour passer en vert les boutons qui ont un texte = 2 :

Sub CommandButton1_Click()
    Dim shp As Shape
    Dim sTemp As String
    For Each shp In ActiveSheet.Shapes
        sTemp = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
        If sTemp = 2 Then
            With ActiveSheet.Shapes(Application.Caller)
                .Fill.ForeColor.RGB = RGB(146, 208, 80)
            End With
        End If
    Next shp
End Sub

Il ne faut pas oublier le "Application.caller" sinon vous ne savez pas quel bouton a été cliqué !

@ bientôt

LoiuReeD

Rechercher des sujets similaires à "boucle each boutons commande"