XL 2021 Intervertir deux images dans un bouton, ou autre.

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

DenisHen

XLDnaute Nouveau
Bonjour à la communauté.
Une question une tarode depuis quelques jours et je cherche mais sans trouver.
Il me semblait qu'on pouvait faire un ToggleButton avec 2 images, une "On" et une "Off" (mais c'était sous VB6).
J'ai déjà fais la technique de l'échange de 2 buttons, un hors de la fenêtre et l'autre dedans, et on les interverti lors du clique.
Mon but, car je ne sais pas si c'est très claire, c'est de cliquer sur un cadena fermé, et un cadena ouvert le remplace. Et vice et versa.
Bien à toi la communauté.
Denis...
 
Solution
Bonjour à tous 😀,

Pour varier une version avec des images dans un CommandButton.
Le code du CommandButton :
VB:
Private Sub CommandButton1_Click()
   With CommandButton1
      If LCase(.Caption) Like "verr*" Then
         .Caption = "Déverrouillé": .Picture = imgOuvert.Picture
      Else
         .Caption = "Verrouillé  ": .Picture = imgFermé.Picture
      End If
   End With
End Sub
Bonsoir,
On peut le faire simplement sur deux images, comme en PJ.
Sur un bouton de commande c'est la même chose. Voir les cadenas.
Bien sur on peut optimiser le code, mais le principe est là. Avec :
VB:
Sub Essai()
Etat = IIf(ActiveSheet.Shapes("Image 1").Visible = True, False, True)
ActiveSheet.Shapes("Image 1").Visible = Etat
ActiveSheet.Shapes("Image 2").Visible = Not Etat
End Sub
 

Pièces jointes

Dernière édition:
Bonsoir à tous 😉,

Avec deux images appelées "Ouvert" et "Fermé". On affecte à chaque image la même macro OuvertFermé().
Idem que @sylvanu mais sans variable 🤓.
VB:
Sub OuvertFermé()
   ActiveSheet.Shapes("Ouvert").Visible = Not ActiveSheet.Shapes("Ouvert").Visible
   ActiveSheet.Shapes("Fermé").Visible = Not ActiveSheet.Shapes("Ouvert").Visible
End Sub
 

Pièces jointes

Bonjour à la communauté.
Un grand merci à toutes et à tous.
Je vois que ma demande n'était assez précise, désolé.
Je suis bien en VBA mais quand je parlais de "fenêtre", je pensais à un UserForm.
 
Dernière édition:
Bonjour à tous,

Au post #1 on parle d'un ToggleButton alors le code de l'UserForm de Classeur1 :
VB:
Private Sub ToggleButton1_Click()
Image1.Visible = Not ToggleButton1
Image2.Visible = ToggleButton1
End Sub

Private Sub UserForm_Initialize()
Image2.Top = Image1.Top
Image2.Left = Image1.Left
End Sub
Edit : sans ToggleButton le code dans Classeur2 :
VB:
Private Sub Image1_Click()
Image1.Visible = Not Image1.Visible
Image2.Visible = Not Image2.Visible
End Sub

Private Sub Image2_Click()
Image1_Click
End Sub

Private Sub UserForm_Initialize()
Image2.Top = Image1.Top
Image2.Left = Image1.Left
End Sub
A+
 

Pièces jointes

Dernière édition:
Bonjour à tous 😀,

Pour varier une version avec des images dans un CommandButton.
Le code du CommandButton :
VB:
Private Sub CommandButton1_Click()
   With CommandButton1
      If LCase(.Caption) Like "verr*" Then
         .Caption = "Déverrouillé": .Picture = imgOuvert.Picture
      Else
         .Caption = "Verrouillé  ": .Picture = imgFermé.Picture
      End If
   End With
End Sub
 

Pièces jointes

Dernière édition:
Bonjour

Description de l'astuce VBA :

Ce code associé à un contrôle ToggleButton sur une feuille Excel et permet de modifier dynamiquement l'affichage du bouton pour représenter un cadenas ouvert ou fermé.
  • Configuration de la police et de l'apparence :
    Le code définit la police du ToggleButton à "Segoe UI Symbol"qui prend en charge les symboles Unicode.
    • Cadenas fermé : Unicode (U+1F512)
    • Cadenas ouvert : Unicode (U+1F513)

  • La taille de la police est réglée sur 14, ce qui peut être ajusté selon vos préférences.

  • Changement de l'icône et de la couleur :
    • Si le ToggleButton est activé (Value = True), il affiche le symbole Unicode pour le cadenas ouvert, obtenu grâce à la fonction ChrW avec les codes &HD83D et &HDD13. Le texte du bouton passe en vert (vbGreen) pour indiquer visuellement l'état "ouvert".
    • Sinon, lorsque le ToggleButton est désactivé, il affiche le symbole pour le cadenas fermé avec ChrW(&HD83D) & ChrW(&HDD12) et le texte passe en rouge (vbRed).
Ce mécanisme permet d'avoir un bouton interactif dont l'apparence change non seulement en fonction de l'état (ouvert/fermé) mais aussi par la couleur, offrant ainsi une interface


VB:
Private Sub ToggleButton1_Click()
    With ToggleButton1
        ' Configuration de la police
        .Font.Name = "Segoe UI Symbol"
        .Font.Size = 14  ' Vous pouvez ajuster la taille si besoin
      
        If .Value = True Then
            ' Lorsque le ToggleButton est activé, affiche le cadenas ouvert en vert
            .Caption = ChrW(&HD83D) & ChrW(&HDD13)   ' Unicode U+1F513
            .ForeColor = vbGreen
        Else
            ' Lorsque le ToggleButton est désactivé, affiche le cadenas fermé en rouge
            .Caption = ChrW(&HD83D) & ChrW(&HDD12)   ' Unicode U+1F512
            .ForeColor = vbRed
        End If
    End With
End Sub
 
Rebonjour à la communauté.
Je recommence mes remerciements : mille mercis à vous !
J'ai regardé vos codes avec grand intéret, et j'ai fini par choisir une solution "colégiène".
Voici ma solution :
VB:
Private Sub TogEtsCadena_Click()
  With TogEtsCadena
    If .Value = True Then
      .Picture = ImgFerme.Picture
    Else
      .Picture = ImgOuvert.Picture
    End If
  End With
End Sub
Qu'on peut réduire à une ligne :
Code:
If TogEtsCadena.Value = True Then TogEtsCadena.Picture = ImgFerme.Picture Else TogEtsCadena.Picture = ImgOuvert.Picture
Je pense que la solution a été apporté par @mapomme , mais pas uniquement.
Encore merci, vos codes m'ont donnés d'autres idées !
Denis...
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour