Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Bouton avec 2 macro (Position 1 - Position initiale)

Mel976

XLDnaute Nouveau
Bonjour à tous,

N'ayant pas réussi à adapter les codes que j'ai pu trouver sur internet à mon cas. De plus mon niveau en VBA étant proche de 0. Je me résigne donc à demander de l'aide.

J'ai créé un bouton "OK" qui lorsque l'on clique dessus se renomme "PAS OK " et modifie une pastille rouge en vert.

Je souhaiterais qu'avec ce même bouton en cliquant une 2ème fois dessus, celui-ci se remet en position initiale.
> Bouton "OK"
> Pastille couleur Rouge

J'ai déjà créé une macro pour chaque (OK et PasOK) mais comme on ne peut affecter qu'une seule macro à un bouton je ne sais plus quoi faire

D'avance, merci pour votre aide.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mel, et bienvenu sur XLD,
Voir PJ avec :
VB:
Sub Ex()
With ActiveSheet.Shapes("Bouton")
    If .TextFrame2.TextRange.Text = "OK" Then
        .TextFrame2.TextRange.Text = "PAS OK"
        .Fill.ForeColor.RGB = RGB(0, 255, 0)
        .TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
    Else
        .TextFrame2.TextRange.Text = "OK"
        .Fill.ForeColor.RGB = RGB(255, 0, 0)
        .TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = RGB(255, 255, 255)
    End If
End With
End Sub

Voir aussi le tuto sur les shapes :
 

Pièces jointes

  • Ex bouton.xlsm
    13.7 KB · Affichages: 11

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Une autre syntaxe pour les IIFophiles
VB:
Sub Ex_B()
Dim sh As Shape
Set shp = ActiveSheet.Shapes("Bouton")
With shp
    .TextFrame2.TextRange.Text = IIf(.TextFrame2.TextRange.Text = "OK", " PAS OK", "OK")
    .Fill.ForeColor.RGB = IIf(.Fill.ForeColor.RGB = vbGreen, vbRed, vbGreen)
End With
End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonsoir
une autre proposition pour les BOOLEANophiles
et les adeptes de l'utilisation de la collection d'object "DrawingObjects"
VB:
Sub Ex_B()
    With ActiveSheet.DrawingObjects("Bouton")
        .Characters.Text = Array("OK", " PAS OK")(Abs(.Characters.Text = "OK"))
        .Interior.Color = Array(vbRed, vbGreen)(Abs(.Characters.Text = "OK"))
    End With
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour a tous
tiens on peut s'amuser a faire multi position avec un match aussi
et dans ce cas là dans les arrays ,le dernier doit être identique au premier
VB:
Sub Ex_B()
  Dim X, Z,y
  With ActiveSheet.DrawingObjects("Bouton")
        x = Array("OK", " PAS OK", "peut être", "je sais pas", "pas du tout", "OK")
        Z = Array(vbBlue, vbRed, vbMagenta, vbYellow, vbCyan, vbBlue)
        y = Application.Match(.Characters.Text, x, 0)
        .Characters.Text = x(y)
        .Interior.Color = Z(y)
    End With
End Sub
 

Mel976

XLDnaute Nouveau
Bonjour,

Je te remercie pour ton message, mais là partie du code ci-dessous bloque:
.TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
 

patricktoulon

XLDnaute Barbatruc
re
essayez l'autre méthode d'approche
 

patricktoulon

XLDnaute Barbatruc
re
la voici avec le font color
VB:
Sub Ex_Z()
    With ActiveSheet.DrawingObjects("Bouton")
        .Characters.Text = Array("OK", " PAS OK")(Abs(.Characters.Text = "OK"))
        .Interior.Color = Array(vbRed, vbGreen)(Abs(.Characters.Text = "OK"))
        .Font.Color = Array(vbWhite, vbBlack)(Abs(.Characters.Text = "OK"))
    End With
End Sub
on constate quoi;
et bien que les property sont les même que les cells (interior.color/ font.color)
et ces property sont child direct de l'object

@sylvanu: c'est l'autre alternative dont je te parlais dans ta ressource
voilà

de même que passer par la collection shapes ne t'empeche pas de passer par l'object "DrawingObject" (sans le "s") afin de simplifier l'acces aux property
VB:
Sub Ex_Z()
    With ActiveSheet.Shapes("Bouton").DrawingObject
        .Characters.Text = Array("OK", " PAS OK")(Abs(.Characters.Text = "OK"))
        .Interior.Color = Array(vbRed, vbGreen)(Abs(.Characters.Text = "OK"))
        .Font.Color = Array(vbWhite, vbBlack)(Abs(.Characters.Text = "OK"))
    End With
End Sub

tu sais tout
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour,

Pourquoi pas un contrôle ActiveX :
VB:
Private Sub CommandButton1_Click()
Dim test As Boolean
With CommandButton1
    test = .Caption = "OK"
    .Caption = IIf(test, "PAS OK", "OK")
    .BackColor = IIf(test, vbGreen, vbRed)
    .ForeColor = IIf(test, vbBlack, vbWhite)
End With
End Sub
A+
 

Pièces jointes

  • CommandButton.xlsm
    18.9 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
re
@sylvanu
personne ne te dis que ça pose problème
je te donne une autre alternative qui peut te simplifier la vie c'est tout
il n'y a que les contours que je ne sais pas faire avec drawingobject
tiens reconnais que c'est plus simple quand même
VB:
Sub test()
    With ActiveSheet
        On Error Resume Next
        .Shapes("toto").Delete
        On Error GoTo 0

        .Shapes.AddShape(msoShapeRectangle, 50, 50, 200, 60).Name = "toto"

        With .DrawingObjects("toto")
            .Interior.Color = vbYellow                  'la couleur de fond  de ta shape
            .Characters.Text = "Bouton"                 'le text de ta shape
            .Font.Size = 36                             'le fontsize de ta shape
            .Font.Color = vbRed                         'fontcolor de ta shape
            .Font.Name = "algerian"                     'la police de caracteres
            .Font.Italic = True                         'font italic
            .Font.Bold = True                           'texte en gras
            .Font.Underline = xlUnderlineStyleSingle    'texte souligné
            .HorizontalAlignment = xlCenter             'alignement du texte horizontalement (xlLeft/xlCenter/xlRight)
            .VerticalAlignment = xlCenter               'alignement du text verticalement    (xlTop/xlCenter/xlBottom)

        End With
       
        With .Shapes("toto")
            .Line.Weight = 5
            .Line.ForeColor.RGB = vbRed
       End With
    End With
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…