Changer la couleur d'une forme "temporairement" lors d'une macro

Bonjour à tous

Voilà je souhaite mettre 2 boutons dans ma feuille excel, mais je n'aime pas la forme du bouton de base (gris en mode windows95)

du coup j'ai plutôt fait une zone de texte encadré avec fond transparent et du texte au milieu et je lui ai affecté une macro.

Soucis par rapport au bouton classique ou on voit le bouton "s'enfoncer" ici et bien il ne se passe rien, et la macro que je lance avec se bouton est justement

pas "visible" je voudrais donc que mon bouton (sous forme de zone de texte), change de couleur pendant 1/10 seconde lorsque que je clique dessus pour confirmer que le bouton à été cliqué.

est-ce possible?

je vous joint le fichier, ici le bouton 1 blanc lance la macro "chiffre55" qui met un chiffre 55 en case A5, oui c'est de la très grosse macro

J'ai trouvé des pistes sur le net avec le mode "Sleep"

En début de macro "celle qu'actionne le bouton"

- Je change la couleur du bouton en vert (celà fonctionne si je ne met que cette partie du code)

- je met un sleep de 100

- Je change a nouveau le bouton en blanc (il ne se passe rien le bouton reste blanc)

#If VBA7 And Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub chiffre55()

    'transforme le bouton en vert

        ActiveSheet.Shapes.Range(Array("TextBox 1")).Select
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 8).Font.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorAccent6
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
        .Solid
    End With
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorAccent6
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
    End With

'mode sleep

Sleep 100

    'remet le bouton en blanc

    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorBackground1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
    End With
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 8).Font.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorBackground1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
        .Solid
    End With

'execution de la macro

Range("A5") = 55

End Sub
5bouton.xlsm (17.38 Ko)

J'ai mis les changements de couleurs dans des modules pour y voir plus clair .

Sub chiffre55()

Call vert

Sleep 100

Call blanc

Range("A5") = 55

End Sub

attention call vert n'a rien à voir avec le canard ...

j'ai essayé de mettre

Application.ScreenUpdating = True

après call vert et call blanc mais toujours pareil mon bouton reste blanc

3bouton.xlsm (17.19 Ko)
13bouton.xlsm (19.78 Ko)

Bonjour,

avec 2 Doevents on arrive à le voir :

Call vert
DoEvents
DoEvents
Sleep 100

Je t'ai mis un autre bouton (plus joli ) avec une autre façon de faire.

eric

Bonjour…

De l’esthétisme* avec 2 zones de texte é1 et é2 ?

#If VBA7 And Win64 Then
  Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
  Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub chiffre55()
 [A5] = ""
  Call f("é1", 1): Sleep 1000: Call f("é1", 0)
 [A5] = 55
End Sub

Sub Fin()
  Call f("é2", 1): timerS 0.4: Call f("é2", 0): [A5].Select
End Sub

Sub timerS(t As Double)
  Dim s As Double
  s = Timer: Do While Timer < s + t: DoEvents: Loop
End Sub

Sub f(B, n As Byte)
  DoEvents: ActiveSheet.Shapes(B).Fill.Visible = n: DoEvents
End Sub

* personnel ou imposé ?

ordonc,

Ha non pas imposé, je suis juste aller au plus simple ... car j'ai vue que certain faisais avec des userform mais je ne sais pas faire.

car idéalement je connais assez bien Photoshop, je peux donc créer une image de bouton non cliqué et une d'un bouton cliqué, mais

mettre c'est deux images alternativement dans Excel là je sais pas faire

Genre

Bouton1.png avec macro assigné

quand click :

bouton2.png au même endroit affiché pendant 1/10eme de seconde.

False,

Le doevents 2 fois à l'air de fonctionner, par contre il me montre la sélection de la zone de texte comme pour la modifier.

Tu as regardé le fonctionnement de 2nd bouton du fichier ?

oui mais pareille le bouton est sélectionné, regarde j'ai réussi a faire une capture d'écran pile au bon moment (le click)

sans titre

Pour changer ses propriétés, pas d'autre choix que de le sélectionner.
La macro sélectionne ensuite une cellule ( tu as dû en chier pour réussir ta capture d'écran...).

Bon en tout cas merci pour vos réponses! je vais voir comment je peut utiliser tout ça

Re

Une fois les boutons créés (le premier appelé TC et le second TV) puis enregistrés, les intégrer dans la feuille ainsi

Placer le second à l’endroit voulu puis faire glisser le premier au-dessus.

image

Tu auras alors une macro plus simple qui va jouer sur leur affichage :

#If VBA7 And Win64 Then
  Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
  Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Dim s As Double
Sub Copie()
  [A5] = ""
  ActiveSheet.Shapes("TV").ZOrder 1 ‘préventif : le bouton passe en dessous
  DoEvents: s = Timer: Do While Timer < s + 2: Loop
  [A5] = 55
  ActiveSheet.Shapes("TV").ZOrder 0
End Sub
Sub Fin()
  s = Timer: Do While Timer < s + 1: DoEvents: Loop
  ActiveSheet.Shapes("TV").ZOrder 1
End Sub

Salut le fil ...

Et pourquoi ne pas utiliser les outils qui te sont fournis avec Excel du style ton ruban ...

image

Télécharges IDBE RibbonCreator il fait très bien son travail et gratuits pour les petits projets

Rechercher des sujets similaires à "changer couleur forme temporairement lors macro"