(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

Rechercher des sujets similaires à "vba liste deroulante fonction couleur"