Macro Liste Déroulante

Résolu
Signaler
Messages postés
2
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
16 avril 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour,

Je débute en macro sur Excel et mon problème est le suivant :

Je travaille sur une liste de documents (une bonne centaine), répartis en 5 catégories :
- Procédures
- Instructions
- Documents d'information
- Formulaires
- Documents d'animation

J'ai mis une liste déroulante dans A1 avec ces 5 mots.
Je souhaite qu'en A2, si je selectionne en A1 par exemple le mot "Procédures", une liste déroulante contenant la liste des procédures apparaisse. Pour cela, j'ai selectionné chacune des plages contenant les documents de chaque catégorie et je leur ai attribué un nom. Par exemple, la plage de cellules contenant les procédure se nomme "ListePro", etc... Donc si je sélectionne A2 et que je fais la commande "Données/Validation", que je sélectionne "Liste" et que je met la formule: "=ListePro", j'obtiens une liste déroulante contenant la liste des procédures...
Pour en revenir à ce que je voulais faire à la base, j'ai entré à la place la formule :
"=SI(A1="";"";SI(A1="Procédures";ListePro;SI(A1="Instructions";ListeIns;SI(A1="Documents d'information";ListeInf;SI(A1="Formulaires";ListeFor;)))))"

Jusque là tout fonctionne. Par contre, maintenant, je voudrais intégrer cette manipulation dans une macro. En la reproduisant avec l'enregistrement de macros, j'obtiens:

Sub Macro1()
Range("A2").Select
   With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=SI(A1="""";"""";""Procédures"";ListePro;SI(A1=""Instructions"";ListeIns;SI(A1=""Documents d'information"";ListeInf;SI(A1=""Formulaires"";ListeFor;))))"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
   End With
End Sub

Quand je déclanche la macro, j'ai un message "Erreur d'exécution '1004': Erreur définie par l'application ou par l'objet". L'erreur sempble semble s'appliquer depuis "Add Type" jusqu'à la fin de ma formule.
J'ai essayé de remplacer les "SI" par des "IF", mais le résultat reste le même.
Je ne comprends pas d'où ça vient... ça m'énerve !
Alors merci d'avance de vore réponse !

Col.

3 réponses

Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Je ne connais pas les fonctions que tu utilises, je ne peux donc pas te dire si il y a une erreur dans leur ecriture ; néanmoins je peux deja te conseiller de remplacer tes ":=" par des "=" simples.

Sinon la ligne :
Formula1:="=SI(A1="""";"""";""Procédures"";ListePro;SI(A1=""Instructions"";ListeIns;SI(A1=""Documents
d'information"";ListeInf;SI(A1=""Formulaires"";ListeFor;))))"

me parait très compliqué ^^, a mon avis faudrait que tu revois ca (les macros ne s'ecrivent pas comme les formules excel).
Messages postés
2
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
16 avril 2008

Merci de cette réponse si rapide.
Je viens d'essayer, mais cela ne fonctionne toujours pas...

En revanche, je m'aperçois que j'étais tellement dans mon trip que ce que je demande semble hyper complexe, alors je vais l'expliquer plus simplement :
En gros, je veux que la cellule A2 contienne une liste déroulante qui varie en fonction de la valeur de A1.Donc j'ai intégré une fonction SI dans le menu "Données/Validation/Liste", pour dire SI(A1 valeur1;A2 liste valeur1;SI(A1 = valeur2;A2 = liste valeur2...)).
Cette fonction avec des SI imbriqués permet de faire varier le contenu de la liste déroulante A2 en fonction de la valeur de A1.
Le seul problème, c'est de faire cette commande par le biais d'une macro...

En tout cas merci, j'espère que ça pourra vous aider à me conseiller.

Col.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Si tu sais faire ta formule dans Excel, utilise l'enregistreur de macro et il ne te restera qu'à épurer le code généré.

PS: sélectionne "Réponse acceptée" seulement sur le message qui aura solutionné ton problème.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI