Changement de couleur bouton Activex à la fin d'une macro
Résoludanielc0 Messages postés 2191 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai créé deux boutons de contrôle de formulaires Activex, chacun relié à une macro différente.
J'aimerais qu'à la fin d'exécution de la 1ère macro, le bouton qui lui est attribué devienne vert, puis de même pour le 2ème bouton à l'exécution de la seconde macro.
Ci-dessous, le fichier.
https://uploadnow.io/f/P5DkxKY
Merci d'avance
Gexelpas
Windows / Chrome 109.0.0.0
10 réponses
Le problème porte sur deux boutons de contrôle reliés à deux macros et sur le fait de les voir devenir verts à l’issue de chaque macro. Il apparaît que les boutons actuels ne sont pas des ActiveX mais des boutons de forme, ce qui empêche de modifier leur couleur via VBA; il faut donc soit passer sur des contrôles ActiveX, soit adopter une autre approche graphique. Si l’on utilise des boutons ActiveX, on place dans chaque gestionnaire d’événement Private Sub CommandButtonX_Click() des instructions qui colorent le bouton correspondant et réinitialisent l’autre, en évitant l’emploi de Select et en référant proprement à la feuille. Des rappels indiquent également que Microsoft déconseille ActiveX et qu’il peut être pertinent d’évaluer des alternatives plus simples, tout en montrant comment adresser le BackColor via ActiveSheet.CommandButton1.BackColor = RGB(...).
-
Bonjour à tous,
Les boutons de ton classeur ne sont pas des boutons ActiveX mais des boutons de la boîte à outils "Formulaire". On ne peut pas changer la couleur de ces boutons.
Pour utiliser les contrôles ActiveX :
Pour indiquer que la macro est terminée, ajoute la ligne en fin de code :
MsgBox "fin de la macro"
Daniel
-
... Sinon, pour colorer un bouton ActiveX en gris :
ActiveSheet.CommandButton1.BackColor = RGB(242, 242, 242)
et en vert :
ActiveSheet.CommandButton1.BackColor = RGB(102, 255, 51) 'vert
Daniel
-
Supprime tes deux macros et mets celles-ci dans le module de la feuille Feuil1 :
Private Sub CommandButton1_Click() Sheets("Feuil2").Select ActiveCell.FormulaR1C1 = "testun" Sheets("Feuil2").Range("B1").Select Sheets("Feuil1").Select CommandButton1.BackColor = RGB(102, 255, 51) 'vert CommandButton2.BackColor = RGB(242, 242, 242) End Sub Private Sub CommandButton2_Click() Sheets("Feuil2").Select Sheets("Feuil2").Range("A2").Select ActiveCell.FormulaR1C1 = "testdeux" Sheets("Feuil2").Range("A3").Select Sheets("Feuil1").Select CommandButton2.BackColor = RGB(102, 255, 51) 'vert CommandButton1.BackColor = RGB(242, 242, 242) End SubDaniel
-
Bonjour CBRiste31,
Ma petite contribution : https://www.swisstransfer.com/d/281e47ed-5fb3-4bc7-ba48-c679f42ad11b
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour à tous,
Puisque, semble-t-il, tu débutes dans la programmation des command buttons, il y a une bizarrerie qu'il est important de connaître : quand tu indiques une cellule sans spécifier le nom de la feuille, VBA considère que la cellule fait partie de la feuille du bouton et non pas de la feuille active. On le voit dans la fenêtre d'exécution :
sheets("Feuil2").select
?Range("A1").Parent.name
Feuil1Par exemple, si le bouton est sur Feuil1 et que tu veuilles écrire en A1 de Feuil2, tu dois spécifier le nom de la feuille :
Sheets("Feuil2").Select Sheets("Feuil2").Range("A2").SelectDaniel
PS. Note que j'ai repris des lignes de ton code. En pratique, il vaut mieux éviter les instructions "Select".
-
Bonjour,
Savez-vous que Microsoft déconseille fortement l'utilisation des ActiveX
https://www.clubic.com/actualite-562332-microsoft-enterre-activex-la-backdoor-involontaire-la-plus-officielle-d-office.htmlPourquoi ne pas utiliser une forme rectangle arrondi (pas exemple) !?
Bien plus simple à gérer et surtout moins dangereuxA+
-
Bonjour et merci pour cette information.
Quelle serait le code à ajouter à ma macro pour que dès la fin de son exécution, une boite de message s'affiche, indiquant qu'elle est achevée ?
Merci d'avance.
Cdlt,
Gexelpas
-
Bonjour,
Ce ne sont pas les Active X en soi qui sont dangereux, mais leur exploitation à partir d'Internet ou d'un fichier tiers en contenant: il n'y a pas de risque sur un fichier Excel local où on a soi-même mis en place un contrôle de ce type.
Sur la dernière question, il suffit normalement d'insérer en fin de code un
MsgBox "Mon texte".
-
-
Bonjour,
Juste au passage est-ce que si Un est terminé devient vert et Deux reste gris puis si Deux est terminé devient vert et Un de vient gris....?
-
Bonjour danielc0,
Belle proposition et le tout sans avoir de réponse du demandeur c'est dommage..
-
Bonjour Daniel,
Eh oui je l'ai ouvert et j'ai vu ces deux codes qui ne peuvent pas prendre en compte les contrôles ActiveX.
Bonne suite
