Création d'une liste déroulante dans une cellule sélectionnée

Résolu
dammex Messages postés 31 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 14 février 2017 - 5 nov. 2012 à 21:36
dammex Messages postés 31 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 14 février 2017 - 6 nov. 2012 à 02:20
Bonsoir,

je souhaite écrire une procédure dont le rôle de celle-ci est de créer une liste déroulante dans une cellule préalablement sélectionnée. En d'autres termes, je souhaite que la cellule "A1" de ma feuille "Feuille1" devienne une liste déroulante dont les données sont contenues sur une autre feuille (Feuille2).

Voici le code actuel:

Private Sub Verification_Liste()

Sheets("Feuille1").Select
ActiveSheet.Range("E11").Select
   With Selection.Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="=MFC!L(-8)C(5):L(22)C(5)"
       .IgnoreBlank = True
       .InCellDropdown = True
       .InputTitle = ""
       .ErrorTitle = ""
       .InputMessage = ""
       .ErrorMessage = ""
       .ShowInput = False
       .ShowError = False
    End With
End Sub


Lors de l'exécution de ce code, le message "Erreur d'exécution 1004 : Erreur définie par l'application ou par l'objet" apparaît. J'ai tenté plusieurs changements dans ce code mais aucun n'a fonctionné ! Pourtant, à la base ce code provient de l'enregistreur de macro de mon fichier excel

Merci d'avance pour votre aide

4 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 12
6 nov. 2012 à 00:44
Salut,

en plus de la remarque de Charles Racaud, j'ajouterai que:

on ne peut pas créer une liste de validation sur une feuille à partir d'une plage de cellule d'une autre feuille !!!

Rien à voir avec le VBA c'est un basic d'excel !

Il existe une solution qui consiste à passer par une plage nommée.

Private Sub Verification_Liste()
    On Error Resume Next
    Debug.Print ActiveWorkbook.Names("MaListe").Index
    If Not Err = 0 Then ActiveWorkbook.Names.Add Name:="MaListe", RefersTo:="=Feuille2!$E$3:$E$33"
    On Error GoTo 0
    With Sheets("Feuille1").Range("E11").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="=MaListe"
    End With
End Sub


A+
3
dammex Messages postés 31 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 14 février 2017 1
5 nov. 2012 à 21:42
Une petite erreur s'est glissée dans cette adaptation de mon code... le code correct est celui-ci.

Private Sub Verification_Liste()

Sheets("Feuille1").Select
ActiveSheet.Range("E11").Select
   With Selection.Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="=Feuille2!L(-8)C(5):L(22)C(5)"
       .IgnoreBlank = True
       .InCellDropdown = True
       .InputTitle = ""
       .ErrorTitle = ""
       .InputMessage = ""
       .ErrorMessage = ""
       .ShowInput = False
       .ShowError = False
    End With
End Sub


Merci encore
0
Utilisateur anonyme
5 nov. 2012 à 22:30
Bonsoir,

Ca vient de la Formula1
Remplace par "=Feuille2!R8C5:R22C5" si c'est bien les lignes 8 à 22 de la colonne E que tu souhaite.
Étrange que qu'il t'ai généré ça, je n'ai pas réussit à le faire régénérer ainsi. Peut être que c'est comme ça sur la version française d'Excel.


_____________
Kenji
0
dammex Messages postés 31 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 14 février 2017 1
6 nov. 2012 à 02:20
Super, ca fonctionne parfaitement!

Je n'aurai définitivement pas trouvé seul...

MERCI
0