(VBA) Liste déroulante en fonction d'une couleur
Bonjour le forum,
Je viens vous demander de l'aide car je sèche sur le problème ...
Je veux faire une liste déroulante en fonction de la couleur intérieur d'une cellule
Exemple : Ma liste se trouve de J1 à J9 et dans cette liste j'ai 3 valeurs en couleur.
Je veux que dans ma cellule B2 j'ai juste la liste de ces 3 valeurs...
Voici mon code :
Sub Macro2()
'
' Macro2 Macro
Dim Plage As Range
Dim Cellule As Object
Set Plage = Range("J1:J9")
For Each Cellule In Plage
If Cellule.Interior.ColorIndex = 6 Then
resultat = vbLf & resultat + Cellule.Value
End If
Next Cellule
Range("B2").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=resultat
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Merci de votre aide
Bonsoir Rag, bonsoir le forum,
Essaie comme ça :
Sub Macro2()
Dim Plage As Range
Dim Cellule As Range
Dim Resultat As String
Set Plage = Range("J1:J9")
For Each Cellule In Plage
If Cellule.Interior.ColorIndex = 6 Then Resultat = IIf(Resultat = "", Cellule.Value, Resultat & "," & Cellule.Value)
Next Cellule
Range("B2").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Resultat
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Hello ThauThème,
Merci pour ta réponse rapide.
Ton code fonctionne parfaitement
Peux-tu m'expliquer cette partie stp :
If Cellule.Interior.ColorIndex = 6 Then Resultat = IIf(Resultat = "", Cellule.Value, Resultat & "," & Cellule.Value)
Surtout après le "Then"
Juste une petite évolution si ma liste est dans une autre feuille j'ai la première valeur qui apparaît avec "Nom_de_la_feuille"&Resultat
Sais-tu d'où viens mon erreur stp ? Merci à toi
Sub Macro2()
Dim Plage As Range
Dim Cellule As Range
Dim Resultat As String
Set Plage = Sheets("Feuil2").Range("J1:J9")
For Each Cellule In Plage
If Cellule.Interior.ColorIndex = 6 Then Resultat = IIf(Resultat = "", Cellule.Value, Resultat & "," & Cellule.Value)
Next Cellule
Range("B2").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Feuil2!" & Resultat
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Bonjour Rag, bonjour le forum,
• IIf fonctionne un peu comme un If.... Else... mais en une seule commande : IIf(Test, Valeur si Test est vrai, Valeur si Test est faux).
Pour toi ça donne :
Test = Resultat est vide
Test est vrai Resultat = Valeur de la cellule (Test n'est plus vrai)
Test n'est pas vrai Resultat = Resultat + virgule + Valeur de la cellule
À la fin, sur 5 cellules traitées on obtient : [b]Resultat[/b] = "Cellule1,Cellule2,Cellule3,Cellule4,Cellule5"
• Dans la validation supprime "Feuil2!" et laisse comme dans le code que je t'ai proposé. À partir du moment ou la liste est stocké dans une variable (Resultat), tu n'a plus besoin de spécifier sa provenance (Feuil2).
Nickel,
Merci pour ton aide c'est top