Liste Déroulante et sélection conditionnelle de Range

Bonjour à tous,

Je cherche à créer une liste déroulante qui varie en fonction d'un critère, ci-après mon code :

Sub dmg2()

Dim DLig As Long
DLig = Workbooks("Classeur1.xlsm").Sheets("Feuil1").Columns("B").End(xlDown).Row
Dim Odec As Range

For Each o In Sheets("Feuil1").Range("D3:D" & DLig)
If o.Value = "OK" Then
x = o.Row
If Odec Is Nothing Then
Set Odec = Range("E" & x)
Else
Set Odec = Union(Odec, Range("E" & x))
End If
End If
Next o

Sheets("Feuil2").Activate
With Sheets("Feuil2").Range("G5").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Odec"
End With

End Sub

Mais je bug sur l'implémentation de la sélection crée "Odec" dans une liste de validation, je tombe sur l'erreur d'éxecution '1004': erreur définie par l'application ou par l'objet

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Odec"

J'ai tenté de mettre :

Formula1:=Odec

Formula1:= "=" & Odec

Ce qui n'a pas abouti.

Le problème c'est que je ne comprend pas cette partie de code, je l'ai vu sur des forums et dans l'enregistreur mais je ne suis pas sur de comprendre ce qui est attendu.

Auriez-vous une solution ? Hormis celle de récupérer un copié collé de la selection ?

Bien à vous

Abuza

Yo Abuza !

Avec ce code tu souhaite nommer une plage "Odec" puis t'en servir dans une liste déroulante c'est sa ?

Bonjour,

Il serait bon d'intenter ton code, on aurait moins de pein à le lire !

La validation attend une donnée de type String comme critère, tu lui fournis un objet Range, ta méthode est donc inadéquate.

NB- Hormis cela, il y aurait des éléments à épurer (relevant de l'enregistreur...) dans le code.

Salut et merci pour vos réponses,

Juice : Je ne suis pas encore très à l'aise avec la terminologie informatique mais je crée un objet range Odec contenant un ensemble de cellules qui répondent à une même condition et assemblées par Union. Je ne pense pas que ce soit une plage de cellule mais plutôt une sélection de cellule.

MFerrand : Merci pour ton retour, j'ai essayé de stocker les valeurs des cellules dans une chaîne de caractère avec un séparateur "," pour les appeler dans la liste déroulante. Mais mon problème c'est que mes cellules contiennent des "," ce qui donne comme résultat :

Valeur Cellule : 168,5 x 85

Valeur liste :

168

5 x 85

Je n'ai pas le code sous la main, je pourrais le mettre en ligne demain.

Du coup je suis un peu en panne sur le sujet, si vous aviez des conseils je suis preneur.

Ps : OK pour les commentaires dans le code

Bien à vous

Abuza

C'est un problème auquel je n'ai pas trouvé de solution (pour l'instant ! ) et je ne sais s'il en existe...

La solution est de regrouper tes données dans une plage et renvoyer l'adresse de la plage.

Bonsoir,

De tout façon, modifier en cours d'exécution la validation d'une cellule n'est pas une méthode fiable car elle risque d'entraîner un plantage d'Excel.

La bonne méthode est de créer sous Excel la validation par liste de ta cellule via référence à une plage de cellules et ensuite de modifier à l'exécution les valeurs contenues dans cette plage.

Rechercher des sujets similaires à "liste deroulante selection conditionnelle range"