Créer une validation list

annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011 - 24 mars 2011 à 20:05
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 - 25 mars 2011 à 19:36
bijour !

je cherche a savoir comment créer une validation list avec VBA.
il y a le "xlvalidationlist" mais je ne sais pas comment l'employer.

vous auriez un exemple pour illustrer ?

c'est pour créer une liste simple.
sauf que je veux faire passer ca sous VBA, car je veux créer plusieurs listes à chaque ouverture du workbook, et les listes peuvent etre differentes car, je veux donner a l'utilisateur la possibilité d'ajouter a sa guise des données dans la liste.

Merci !

14 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 mars 2011 à 09:40
Salut,

as-tu regarder ce que donne l'enregistreur de macro ?

A+
0
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011
25 mars 2011 à 13:36
oui, justement, j'ai fais une premiere manip avec l'enregistreur de macros pour voir.
je pensais adapter ensuite.
ca donne un truc pas très joli de ce style :

Range("D3:D26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$G$5:$G$9"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
0
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
25 mars 2011 à 13:41
Bonjour
voici un exemple

With Worksheets(feuille)
.Activate
Range("e:e").Select ====>c'est là que s'appliquera la validation
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=plage ===> plage = laliste de validation
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End With


Bonne journée
0
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011
25 mars 2011 à 14:38
j'ai une piste :
ca ressemblerait a ca :

.Validation.Add(type as xlDVtype, alertstyle, operator, formula1, formula2)

je sais pas ce qu'excel attend comme formula 1 et formula 2.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011
25 mars 2011 à 14:40
c148270>

merci pour ta réponse, je vais faire avec ca alors.

par contre, ma liste de cellules que t'appelles plage ici, est dans une autre feuille.
je la définis avec un : Set plage=worksheets.range(blabla...)

mais ca ne marche pas quand je l'appelle dans la fonction validation ensuite.
tu sais comment ecrire ca ?
0
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
25 mars 2011 à 14:54
Voilà si la liste est dans une autre feuille :

With Sheets("service")
plage = "=indirect(""service!" & .Range("h1:h" & .Range("g65536").End(xlUp).Row).Address & """)"
End With
With Worksheets(feuille)
.Activate
Range("e:e").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=plage
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End With

formula1 et formula2 sont utilisées si l'on utilise xlbetween. par exemple si la validation est ok entre formula1=5 et formula2=10
0
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011
25 mars 2011 à 15:25
tu as une idée pourquoi ca ne marche pas quand je fais un truc comme ca :

Set plage = Worksheets("maworksheet").Range("D3:D8")
...
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=plage
0
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011
25 mars 2011 à 15:46
et si je ne met pas xlbetween ?
(je voudrais bien que excel me repropose les choix possibles comme parametres de la fonction apres avoir ecrit : selection.validation.add(
mais il ne veut plus...encore un mystere de MS excel...bref)

quel autre parametre je peux mettre au lieu de xlbetween pour selectionner qu'un range (cad pas de formula 2) ?
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 mars 2011 à 16:09
Salut,

tu as une idée pourquoi ca ne marche pas quand je fais un truc comme ca :

Set plage = Worksheets("maworksheet").Range("D3:D8")
...
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=plage


Comme son nom l'indique "Formula1" attend une formule autrement du texte ! ors plage est objet de type range.

si tu veux utiliser ta variable plage tu dois l'utiliser comme ceci :

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= "=" & plage.Address


A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 mars 2011 à 16:11
Pardon en français :

Comme son nom l'indique "Formula1" attend une formule, autrement dit du texte ! or plage est un objet de type range.
0
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
25 mars 2011 à 16:32
pour faire référence à une liste qui n'est pas dans la feuille où l'on veut une validation, il faut faire une indirection.
C'est excel qui veut ça

address a plusieurs écritures;

Tu peux obtenir de l'aide sous VBA en utilisant l'explorateur d'objets
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 mars 2011 à 16:39
RE,

pour faire référence à une liste qui n'est pas dans la feuille où l'on veut une validation, il faut faire une indirection.
C'est excel qui veut ça


une phrase bien compliquée
pour dire qu'il suffit d'utiliser une plage nommée puis de faire référence au Nom de la plage plutôt qu'a sont adresse.

A+
0
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011
25 mars 2011 à 17:26
merci !

mais l'astuce avec plage.address ne marche pas chez moi :(

ok pour indirect. il n'existe pas apparement dans l'object browser :(
y'a t'il une solution pour utiliser indirect en mode VBA plutot que en mode enregistreur macro ?
0
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
25 mars 2011 à 19:36
clique droit sur le nom de la feuille où sont les données à valider
clique sur visualiser le code
copier coller l'exemple avec l'indirection
rajoute sub en tête, end sub en fin
adapte en fonction de ton classeur les noms de feuilles et de plage

dans l'exemple :
plage = "=indirect(""service!" & .Range("h1:h" & .Range("g65536").End(xlUp).Row).Address & """)"

service est le nom de la feuille où est la liste
range h la colonne de la liste
le fait de faire end(xlup) permet de se positionner sur la dernier ligne renseignée

celà permet si le nombre de lignes de la liste change de ne pas avoir à réécrire la formule

fin
bonne journée
0
Rejoignez-nous