Changer automatiquement la couleur d'un bouton

Bonjour a tous, j'aimerais que la couleur de mon bouton change a chaque clic. Un choix de quelques couleurs de base serait suffisant.

Le but est de connaitre la couleur de remplissage d'une cellule, qui se ferait par simple clic sur les cellules.

Merci!

Bonjour le Canada,

tu peux être plus précis?

Tu veux changer la couleur de ton bouton en cliquant sur le bouton (quelles sont les conditions du changement de couleur?) ou en cliquant sur une cellule colorée (dont le bouton prendrait alors la couleur?).

Quelle info veux-tu en retirer et comment l'utilise-t-on mis à part la couleur?

A+

Bonjour la France et vive le francais!

Oui, que la couleur du bouton change a chaque fois que je clic dessus. Il pourrait y avoir un cycle de 3 couleurs, et apres la 3ieme couleur sa revient au clic suivant sur la premiere couleur.

Ce que je veux c'est que lorsque je cliquerai sur des cellules par la suite, elle prendront la couleur du bouton. L'idée c'est de pouvoir avoir une apercu visuel de toute les lignes qui contiennent une certaine couleur dans la colonne B, sorte d'association.

Mon application c'est un petit répertoire de tout les bouts de morceaux de piano que je compose, avec des informations comme l'heure, le style,la note d'apréciation ... Pour le moment j'ai 175 petites et moyenne passe de piano et j'essai de les intégrés dans des compositions. Je cherche un moyen de m'y retrouver plus rapidement, d'ou mon projet.

Je t'envoi un exemple fictif de mon application avec le fameux bouton 'couleur'

23multipiste.zip (42.33 Ko)

J'y suis presque: il y a juste ceci qui n'est pas légal: Selection.Interior.ColorIndex = CommandButton3.BackColor

Quel serait la syntaxe?

Private Sub CommandButton3_Click() 'bouton Couleur

If CommandButton3.BackColor = vbRed Then
   CommandButton3.BackColor = vbBlue
ElseIf CommandButton3.BackColor = vbBlue Then
   CommandButton3.BackColor = vbGreen
ElseIf CommandButton3.BackColor = vbGreen Then
   CommandButton3.BackColor = vbYellow
ElseIf CommandButton3.BackColor = vbYellow Then
   CommandButton3.BackColor = vbRed
End If

End Sub
Private Sub Worksheet_SelectionChange(ByVal target As Range) 'lorsqu'on clic sur une cellule

If Not Application.Intersect(target, Range("B3:B1000")) Is Nothing Then    'clic dans une cellule de colonne B
       Selection.Interior.ColorIndex = CommandButton3.BackColor
End If

End Sub

Bonjour Capucin,

pas loin en effet!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then    'clic dans une cellule de colonne B
      Target.Interior.color = CommandButton1.BackColor
End If
'
End Sub

Au fait : I come from Belgium! Pas confondre, s'il te plaît! 8)

A+

Bonjour, Salut Curulis...

Proposition de code pour le bouton :

Private Sub CommandButton3_Click()
    Static clrec As Integer
    Dim clr
    clr = Array(couleur3, couleur1, couleur2)
    clrec = (clrec + 1) Mod 3
    CommandButton3.BackColor = clr(clrec)
End Sub

Remplacer couleur1, couleur2, couleur3 par la définition RGB des 3 couleurs voulues (pas trouvées dans ton fichier).

Au premier clic, le bouton prendra la couleur1, au 2e la couleur2, au 3e la couleur3, au suivant la couleur1, ainsi de suite.

Cordialement.

Désolé Curulis

Merci a vous deux, votre code est plus simple que le mien.

Hier, j'avais réussi a faire comme voici:

J'avais ajouter les valeurs pour la variable couleur.

J'ignore pourquoi, si je clic trop rapidement sur mon bouton, la couleur ne change pas. Par ailleurs, il arrive que la cellule visée ne prenne pas la couleur du bouton, je dois cliquer ailleurs puis revenir sur cette cellule, avez-vous une idée?

Private Sub Worksheet_SelectionChange(ByVal target As Range) 'lorsqu'on clic sur une cellule

If Not Application.Intersect(target, Range("B2:D600")) Is Nothing Then    'clic dans une cellule de colonne B
       Selection.Interior.ColorIndex = couleur
End If

End Sub
Private Sub CommandButton3_Click() 'bouton Couleur

If CommandButton3.BackColor = vbRed Then
   CommandButton3.BackColor = vbBlue
   couleur = 5
ElseIf CommandButton3.BackColor = vbBlue Then
   CommandButton3.BackColor = vbGreen
   couleur = 4
ElseIf CommandButton3.BackColor = vbGreen Then
   CommandButton3.BackColor = vbYellow
   couleur = 6
ElseIf CommandButton3.BackColor = vbYellow Then
   CommandButton3.BackColor = vbMagenta
   couleur = 7
ElseIf CommandButton3.BackColor = vbMagenta Then
   CommandButton3.BackColor = vbCyan
   couleur = 8
ElseIf CommandButton3.BackColor = vbCyan Then
   CommandButton3.BackColor = vbWhite
   couleur = 2
ElseIf CommandButton3.BackColor = vbWhite Then
   CommandButton3.BackColor = vbRed
   couleur = 3
End If

End Sub

Où se trouve la variable couleur ? Et déclarée comment ?

J'avais oublié de joindre mon fichier.

La déclaration est sur la feuille 1 mais pas complete, peut etre j'aurais du mettre dim couleur as integer ou quelque chose du genre.

La variable couleur a été ajouter dans Private Sub CommandButton3_Click() 'bouton Couleur

Option Explicit
 Dim couleur
30multipiste.zip (45.85 Ko)

Tout est dans le même module. Ça fonctionne, pas de problème a-priori.

Mais tu as une variable couleur publique dans un module. Cela peut parfois créer confusion. Il serait bon de la supprimer.

Parfait, alors je l'ai supprimé du module.

As-tu une idée pourquoi un clic ne declenche pas toujours le processus? J'ai remarqué que si je fais plusieurs clic, je dois y aller lentement.

Ce n'est pas le clic qui colore, c'est le changement de sélection.

Si tu cliques sur une cellule déjà sélectionnée, cela ne fonctionnera pas.

Pour un fonctionnement au clic en tant que tel, c'est double-clic ou clic droit.

Cordialement.

Parfait, alors j'ai trouvé une solution qui fonctionne: sélectionner par VBA une autre cellule puis revenir a l'ancienne cellule toujours par VBA. J'ai mis ca aux dernieres lignes de ce code:

Private Sub CommandButton3_Click() 'bouton Couleur

If CommandButton3.BackColor = vbRed Then
   CommandButton3.BackColor = vbBlue
   couleur = 5
ElseIf CommandButton3.BackColor = vbBlue Then
   CommandButton3.BackColor = vbGreen
   couleur = 4
ElseIf CommandButton3.BackColor = vbGreen Then
   CommandButton3.BackColor = vbYellow
   couleur = 6
ElseIf CommandButton3.BackColor = vbYellow Then
   CommandButton3.BackColor = vbMagenta
   couleur = 7
ElseIf CommandButton3.BackColor = vbMagenta Then
   CommandButton3.BackColor = vbCyan
   couleur = 8
ElseIf CommandButton3.BackColor = vbCyan Then
   CommandButton3.BackColor = vbWhite
   couleur = 2
ElseIf CommandButton3.BackColor = vbWhite Then
   CommandButton3.BackColor = vbRed
   couleur = 3
End If
 Set Oldcel = ActiveCell    'on sauvegarde la position de la cellule
       Range("A600").Select 'pour que un clic sur une cellule soit tjrs vu comme une nouvelle sélection
       Oldcel.Select                  ' On reprend la position de depart sauvegarde
End Sub
32multipiste-2.zip (44.12 Ko)
Rechercher des sujets similaires à "changer automatiquement couleur bouton"