CommandButton1_Click()

Le
Olivier
Bonjour,
je crée à l'aide d'une macro plusieurs bouton de commande (de 9 à 900) :
tous pareils.
Lorsque je clique sur un bouton, il doit changer de couleur.
J'utilise pour cela la commande CommandButton1_Click() en y mettant ce que
je veux.

Private Sub CommandButton1_Click()
change_la_couleur
End Sub

Mon problème est que je ne sais pas comment générer le même code pour tous
les boutons
Private Sub CommandButton2_Click()
,Private Sub CommandButton3_Click(),
Private Sub CommandButton4_Click(),
Private Sub CommandButton5_Click(),
Private Sub CommandButton6_Click(),

Private Sub CommandButton900_Click()

N'y aurait-il pas une commande du style
Private Sub CommandButton_Click(n° du bouton cliqué) ?
Merci

PS : Je suis sous Excel 97.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fredo P
Le #16355651
"Olivier" 487fad84$0$292$
Bonjour,
je crée à l'aide d'une macro plusieurs bouton de commande (de 9 à 900) :
tous pareils.
Lorsque je clique sur un bouton, il doit changer de couleur.
J'utilise pour cela la commande CommandButton1_Click() en y mettant ce que
je veux.

Private Sub CommandButton1_Click()
change_la_couleur
End Sub



Public Sub change_la_couleur
Nm$ = Application.Caller
ActiveSheet.Shapes("Nm").TextFrame.Characters.Text = "Vert"
ActiveSheet.Shapes("Nm").Fill.ForeColor.SchemeColor = 11
Else
ActiveSheet.Shapes("Nm").TextFrame.Characters.Text = "Rouge"
ActiveSheet.Shapes("Nm").Fill.ForeColor.SchemeColor = 10
End Sub





Mon problème est que je ne sais pas comment générer le même code pour tous
les boutons
Private Sub CommandButton2_Click()
,Private Sub CommandButton3_Click(),
Private Sub CommandButton4_Click(),
Private Sub CommandButton5_Click(),
Private Sub CommandButton6_Click(),
...
Private Sub CommandButton900_Click()

N'y aurait-il pas une commande du style
Private Sub CommandButton_Click(n° du bouton cliqué) ?
Merci

PS : Je suis sous Excel 97.




Fredo P
Le #16356011
Oublie le post précédent, cela aurait pu fonctionner avec des Shapes mais
pour le cas
la solution, pour les boutons de commande, ne peut que se positionner dans
le code de la feuille: ex
Private Sub CommandButton1_Click()
If CommandButton1.Caption = "Vert" Then
CommandButton1.Caption = "Rouge"
CommandButton1.BackColor = &HFF&
Else
CommandButton1.Caption = "Vert"
CommandButton1.BackColor = &HFF00&
End If
End Sub

"Olivier" 487fad84$0$292$
Bonjour,
je crée à l'aide d'une macro plusieurs bouton de commande (de 9 à 900) :
tous pareils.
Lorsque je clique sur un bouton, il doit changer de couleur.
J'utilise pour cela la commande CommandButton1_Click() en y mettant ce que
je veux.

Private Sub CommandButton1_Click()
change_la_couleur
End Sub

Mon problème est que je ne sais pas comment générer le même code pour tous
les boutons
Private Sub CommandButton2_Click()
,Private Sub CommandButton3_Click(),
Private Sub CommandButton4_Click(),
Private Sub CommandButton5_Click(),
Private Sub CommandButton6_Click(),
...
Private Sub CommandButton900_Click()

N'y aurait-il pas une commande du style
Private Sub CommandButton_Click(n° du bouton cliqué) ?
Merci

PS : Je suis sous Excel 97.




Fredo P
Le #16357231
"michdenis"
Oui c'est possible de limiter le code pour tous ces boutons
voir exemple là : http://cjoint.com/?hsbYMT0HNH



Merci pour l'exemple Denis, les modules de classe ne m'ont jusqu'ici jamais
inspiré, cela devient plus clair!.

Il s'agit de faire l'utilisation d'un module de classe !
La procédure à définir est dans le module de classe "CmdBouton"

Amuse-toi bien !




"Olivier" 487fad84$0$292$
Bonjour,
je crée à l'aide d'une macro plusieurs bouton de commande (de 9 à 900) :
tous pareils.
Lorsque je clique sur un bouton, il doit changer de couleur.
J'utilise pour cela la commande CommandButton1_Click() en y mettant ce que
je veux.

Private Sub CommandButton1_Click()
change_la_couleur
End Sub

Mon problème est que je ne sais pas comment générer le même code pour tous
les boutons
Private Sub CommandButton2_Click()
,Private Sub CommandButton3_Click(),
Private Sub CommandButton4_Click(),
Private Sub CommandButton5_Click(),
Private Sub CommandButton6_Click(),
...
Private Sub CommandButton900_Click()

N'y aurait-il pas une commande du style
Private Sub CommandButton_Click(n° du bouton cliqué) ?
Merci

PS : Je suis sous Excel 97.




Olivier
Le #16361321
Je ne connaissais pas l'existence du module de classe !!
Peux tu m'expliquer en 2 mots (j'accepte 3 :-) la différence entre un module
et un module de classe.
Quand doit-on utiliser ce dernier ?
Merci, je vais effectivement m'amuser...
A+


"michdenis"
Oui c'est possible de limiter le code pour tous ces boutons
voir exemple là : http://cjoint.com/?hsbYMT0HNH

Il s'agit de faire l'utilisation d'un module de classe !
La procédure à définir est dans le module de classe "CmdBouton"

Amuse-toi bien !




"Olivier" 487fad84$0$292$
Bonjour,
je crée à l'aide d'une macro plusieurs bouton de commande (de 9 à 900) :
tous pareils.
Lorsque je clique sur un bouton, il doit changer de couleur.
J'utilise pour cela la commande CommandButton1_Click() en y mettant ce que
je veux.

Private Sub CommandButton1_Click()
change_la_couleur
End Sub

Mon problème est que je ne sais pas comment générer le même code pour tous
les boutons
Private Sub CommandButton2_Click()
,Private Sub CommandButton3_Click(),
Private Sub CommandButton4_Click(),
Private Sub CommandButton5_Click(),
Private Sub CommandButton6_Click(),
...
Private Sub CommandButton900_Click()

N'y aurait-il pas une commande du style
Private Sub CommandButton_Click(n° du bouton cliqué) ?
Merci

PS : Je suis sous Excel 97.




michdenis
Le #16364421
Je t'ai fait un fichier exemple un peu plus élaboré.
disponible ici : http://cjoint.com/?hsuaGF0EQA

Ça prend habituellement un "bon moment" pour arriver
à comprendre un peu comment cela fonctionne...
Ce sera peut être suffisant pour t'amener à consulter des
ouvrages sur le sujet...

Ne te gêne pas si tu veux y apporter des améliorations !

Amuse-toi bien !

;-)




"Olivier" Je ne connaissais pas l'existence du module de classe !!
Peux tu m'expliquer en 2 mots (j'accepte 3 :-) la différence entre un module
et un module de classe.
Quand doit-on utiliser ce dernier ?
Merci, je vais effectivement m'amuser...
A+
michdenis
Le #16369581
Comme il n'y a pas eu beaucoup de réactions....;-)

vous trouverez à cette adresse, un fichier zipper contenant
2 applications

A ) la version d'hier + correction du type de variables dans les subs du
module de classe
Exemple Modude de classe - bouton de commande1.xls
Dont le but était d'illustrer comment fonctionne les "Property let
...set ...Get.....etc

B ) Et une version écourtée qui fait la même chose
Exemple Modude de classe - bouton de commande2.xls
Mais beaucoup trop simple pour l'ami Olivier !

;-))

http://cjoint.com/?htnKcfPi4X
Olivier
Le #16372611
Merci pour toutes tes réponses, je réfléchis à tout cela.
Effectivement, je me suis aperçu que trop de boutons pouvait devenir
ingérable.
Je vais donc essayer de remplacer les boutons par des cellules (il faudra
que je cherche les codes pour que lorsqu'on clique dans une cellule, le fond
change de couleur)
Je ne regrette cependant pas ma fausse direction car j'ai appris l'existence
de ces modules de classes. Je vais essayer de finir mon petit projet avec
moins de boutons pour voir si j'y arrive.
C'est en faisant des erreurs que l'on devient forgeron !! Euh, c'est pas
tout à fait ça, mais bon...
Merci pour tout.



"michdenis" %
J'oubliais de mentionner .. ta question initiale fait référence à la
possibilité de 900 boutons !

Je ne sais pas ce à quoi ils sont dessinés... mais 900 boutons de commande
dans une feuille
ça va devenir très lourd peu importe la (les) procédure que tu utiliseras.

Es-tu certain de ne pas avoird'alternatives ?




"Olivier" 48808eeb$0$292$
Je ne connaissais pas l'existence du module de classe !!
Peux tu m'expliquer en 2 mots (j'accepte 3 :-) la différence entre un
module
et un module de classe.
Quand doit-on utiliser ce dernier ?
Merci, je vais effectivement m'amuser...
A+


"michdenis"
Oui c'est possible de limiter le code pour tous ces boutons
voir exemple là : http://cjoint.com/?hsbYMT0HNH

Il s'agit de faire l'utilisation d'un module de classe !
La procédure à définir est dans le module de classe "CmdBouton"

Amuse-toi bien !




"Olivier" 487fad84$0$292$
Bonjour,
je crée à l'aide d'une macro plusieurs bouton de commande (de 9 à 900) :
tous pareils.
Lorsque je clique sur un bouton, il doit changer de couleur.
J'utilise pour cela la commande CommandButton1_Click() en y mettant ce
que
je veux.

Private Sub CommandButton1_Click()
change_la_couleur
End Sub

Mon problème est que je ne sais pas comment générer le même code pour
tous
les boutons
Private Sub CommandButton2_Click()
,Private Sub CommandButton3_Click(),
Private Sub CommandButton4_Click(),
Private Sub CommandButton5_Click(),
Private Sub CommandButton6_Click(),
...
Private Sub CommandButton900_Click()

N'y aurait-il pas une commande du style
Private Sub CommandButton_Click(n° du bouton cliqué) ?
Merci

PS : Je suis sous Excel 97.








Fredo P
Le #16372731
"michdenis" %
Comme il n'y a pas eu beaucoup de réactions....;-)


Mais ce n'est pas pour autant que l'on n'y fait pas attention d'ailleurs la
mémoire est elle encore occupée par ces variables quand Excel est fermé et
est ce absolument nécessaire cette dernière routine?
Private Sub Workbook_Deactivate()
Set ColBouton = Nothing
Set Bouton = Nothing
End Sub


vous trouverez à cette adresse, un fichier zipper contenant
2 applications

A ) la version d'hier + correction du type de variables dans les subs du
module de classe
Exemple Modude de classe - bouton de commande1.xls
Dont le but était d'illustrer comment fonctionne les "Property let
...set ...Get.....etc

B ) Et une version écourtée qui fait la même chose
Exemple Modude de classe - bouton de commande2.xls
Mais beaucoup trop simple pour l'ami Olivier !

;-))

http://cjoint.com/?htnKcfPi4X





Modeste
Le #16372971
Bonsour® Olivier avec ferveur ;o))) vous nous disiez :

Je vais donc essayer de remplacer les boutons par des cellules (il
faudra que je cherche les codes pour que lorsqu'on clique dans une
cellule, le fond change de couleur)



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Cells.Count = 1 Then
With Target
If .Interior.Color = vbBlue Then
.Interior.Color = vbWhite
.Offset(0, 2).Value = "en attente"
'---- inserer éventuellement ici l'appel d'une procédure A
Else
.Interior.Color = vbBlue
.Offset(0, 2).Value = Now()
'---- inserer éventuellement ici l'appel d'une procédure B
End If
End With
End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'---- pour pouvoir cliquer deux fois de suite sur la même cellule
If Target.Column = 1 And Target.Cells.Count = 1 Then
With Target
If .Interior.Color = vbBlue Then
.Interior.Color = vbWhite
.Offset(0, 2).Value = "en attente"
'---- inserer éventuellement ici l'appel d'une procédure A
Else
.Interior.Color = vbBlue
.Offset(0, 2).Value = Now()
'---- inserer éventuellement ici l'appel d'une procédure B
End If
End With
Cancel = True
End If
End Sub

C'est en faisant des erreurs que l'on devient forgeron !! Euh, c'est
pas tout à fait ça, mais bon...



en tout cas ce n'est pas la devise des démineurs ;o)))

--
@+
;o)))
michdenis
Le #16375851
| Private Sub Workbook_Deactivate()
| Set ColBouton = Nothing
| Set Bouton = Nothing
| End Sub

| quand Excel est fermé et est ce absolument
| nécessaire cette dernière routine?

Dans le cas présent, comme j'ai utilisé l'événement "Deactivate"
le classeur ne se ferme pas nécessairement (bien que cet événement)
se produit aussi à la fermeture du classeur), il se peut tout simplement
qu'un autre classeur devienne le classeur actif pour que cet événement
soit appelé. En conséquence, si je ne supprime pas ces variables "objet"
ils vont demeurer en mémoire vive pendant le traitement qui aura lieu dans
l' (les) autre classeur. Est-ce "obligatoire" de les supprimer ... la
réponse est non.
C'est avant tout une question de gestion de ressources !
A ) ressource mémoire : Si chacun des classeur est gros et possède plusieurs
de ces objets en plus ...

B ) risque de confusion :
Par exemple si 2 variables définit au niveau d'un module standard
porte le même nom, il pourrait y avoir confusion

Exemple :

Tu prends 2 classeurs "neufs" et tu places dans un module
standard ce code... à chaque cellule A1 de chacun des
classeur, tu affectes une valeur quelconque.

Pour qu'il n'y aie pas confusion entre les variables, celles-ci
doivent être défini de cette façon ... c'est-à-dire
en spécifiant explicitement le classeur dans lequel elles ont
été créées au moment de leur initialisation...
sans cela, comme ceci ( Set Sh = Worksheets("Feuil"))
tes 2 variables pointeront vers la même valeur

Il y a risque de confusion mais pas nécessairement cela
dépend comment tu codes !!! ;-)))
P.S- Ne me crois pas sur parole... fais le test toi-même !


Public Sh As Worksheet 'Ou Dim Sh as wroksheet

'------------------------------------------
Sub test()
Set Sh = Workbooks("classeur1").Worksheets("toto")
End Sub
'-------------------------------------------
Sub test()
MsgBox Sh.Range("A1")
End Sub
'-------------------------------------------






"Fredo P" message de news:

"michdenis" %
Comme il n'y a pas eu beaucoup de réactions....;-)


Mais ce n'est pas pour autant que l'on n'y fait pas attention d'ailleurs la
mémoire est elle encore occupée par ces variables quand Excel est fermé et
est ce absolument nécessaire cette dernière routine?
Private Sub Workbook_Deactivate()
Set ColBouton = Nothing
Set Bouton = Nothing
End Sub


vous trouverez à cette adresse, un fichier zipper contenant
2 applications

A ) la version d'hier + correction du type de variables dans les subs du
module de classe
Exemple Modude de classe - bouton de commande1.xls
Dont le but était d'illustrer comment fonctionne les "Property let
...set ...Get.....etc

B ) Et une version écourtée qui fait la même chose
Exemple Modude de classe - bouton de commande2.xls
Mais beaucoup trop simple pour l'ami Olivier !

;-))

http://cjoint.com/?htnKcfPi4X





Publicité
Poster une réponse
Anonyme