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

Microsoft 365 Switcher entre 3 couleurs et 3 textes

  • Initiateur de la discussion Initiateur de la discussion pat66
  • Date de début Date de début

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 !

pat66

XLDnaute Impliqué
Bonjour le forum,,

J'ai besoin de vos lumières car actuellement j'utilise cette macro qui fonctionne très bien, mais je souhaite avoir la possibilité de switcher avec 3 valeurs au lieu de 2
soit au lieu de switcher entre LMNP et LLI, pouvoir le faire entre LMNP, LLI et LLI vide et bien sur avoir 3 couleurs différentes, j'ai pensé à select case, mais je ne sais le rédiger, en tout cas merci pour aide.

Sub LLI()
With ActiveSheet.DrawingObjects("Rectangle : coins arrondis 1")
.Characters.Text = Array("LMNP", " LLI")(Abs(.Characters.Text = "LMNP"))
.Interior.Color = Array(RGB(0, 158, 71), RGB(217, 217, 217))(Abs(.Characters.Text = "LMNP"))
.Font.Color = Array(RGB(217, 217, 217), RGB(22, 54, 92))(Abs(.Characters.Text = "LMNP"))
End With
End Sub

cdt
 
Solution
Comme ça, ça a l'air d'aller :
VB:
Sub LLI()
   Dim Obj As Object, N As Integer
   Set Obj = ActiveSheet.DrawingObjects(Application.Caller)
   On Error Resume Next
   N = WorksheetFunction.Match(Obj.Characters.Text, Array("LLI vide", "LMNP", "LLI"), 0)
   If Err Then N = 1
   On Error GoTo 0
   Obj.Characters.Text = Choose(N, "LMNP", "LLI", "LLI vide")
   Obj.Interior.Color = Choose(N, RGB(0, 158, 71), RGB(217, 217, 217), RGB(186, 186, 186))
   Obj.Font.Color = Choose(N, RGB(217, 217, 217), RGB(22, 54, 92), RGB(150, 150, 150))
   End Sub
Avec DrawingObjects on utilise la propriété .Text :
VB:
Sub LLI()
Dim a, N
a = Array("LMNP", "LLI", "LLI VIDE")
With ActiveSheet.DrawingObjects("Rectangle : coins arrondis 1")
    N = Application.Match(.Text, a, 0)
    If IsError(N) Then
        MsgBox "Le texte de la forme doit être LMNP, LLI ou LLI VIDE, la casse est ignorée...", vbInformation
    Else
        .Text = UCase(a(N - 1)) 'majuscules
        .Interior.Color = Array(RGB(0, 158, 71), RGB(217, 217, 217), RGB(255, 192, 0))(N - 1)
        .Font.Color = Array(RGB(217, 217, 217), RGB(22, 54, 92), RGB(255, 0, 0))(N - 1)
    End If
End With
End Sub
 

Pièces jointes

Surtout pour tous vous saluer😉,

Donc un autre petit code (rien de bien original):
VB:
Sub LLI()
Dim valeurs, fonds, polices, n&
   valeurs = Split("LMNP,LLI,LLI vide", ",")                            ' liste des valeurs à considérer
   fonds = Array(RGB(0, 0, 0), vbRed, vbYellow, RGB(255, 255, 255))     ' couleurs selon les valeurs - chaque 1ère couleur
   polices = Array(RGB(255, 255, 255), vbWhite, vbCyan, RGB(0, 0, 255)) ' est appliquée si le texte n'est pas dans valeurs
   With ActiveSheet.DrawingObjects("Rectangle : coins arrondis 1")
      ' n = rang des couleurs à appliquer - n vaut 0 si le texte est différent d'un des éléments de valeurs
      n = Application.IfError(Application.Match(.Characters.Text, valeurs, 0), 0)
      .Interior.Color = fonds(n): .Font.Color = polices(n)     ' couleur du fond et de la police
   End With
End Sub
 

Pièces jointes

Dernière édition:
On peut faire un carrousel :
VB:
Sub LLI()
Dim a, N
a = Array("LMNP", "LLI", "LLI VIDE")
With ActiveSheet.DrawingObjects("Rectangle : coins arrondis 1")
    N = Application.Match(.Text, a, 0)
    If IsError(N) Then
        MsgBox "Le texte de la forme doit être LMNP, LLI ou LLI VIDE, la casse est ignorée...", vbInformation
    Else
        If N < 3 Then N = N + 1 Else N = 1 'carrousel
        .Text = a(N - 1) 'majuscules
        .Interior.Color = Array(RGB(0, 158, 71), RGB(217, 217, 217), RGB(255, 192, 0))(N - 1)
        .Font.Color = Array(RGB(217, 217, 217), RGB(22, 54, 92), RGB(255, 0, 0))(N - 1)
    End If
End With
End Sub
 

Pièces jointes

re,

d'abord merci pour votre aide à tous

Job75 #10 avait raison, j'ai testé en remplaçant rectangle arrondi par rectangle et cela fonctionne, mais je souhaite conserver la forme arrondie

Je vais donc opter pour la solution de Dranreb du post #13 qui fonctionne, mais je garde aussi les autre solutions et vous en remercie

Pour compléter, cette solution, j'aimerai aussi pouvoir ajouter une boucle dans D90 avec la séquence suivante :
Si texte Rectangle : coins arrondis 1 = "LMNP", D90 = 10
Si texte Rectangle : coins arrondis 1 = "LLI",D90 = 0
Si texte Rectangle : coins arrondis 1 = "LLI vide",D90 = 0
etc....

merci beaucoup....
 
 

Pièces jointes

- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…