Excel : validation données liste

Sandrine -  
 Sandrine -
Bonjour,

J'ai définis des plages avec des noms étendue à seulement une feuille car je peux avoir plusieurs listes du même nom. J'ai définis ces listes dans Insertion/Nom/Définir et j'ai les noms suivants : feuille1!bois; feuille2!bois; feuille1!bardage,...

J'aimerais maintenant faire des listes faisant référence à ces plages, seulement quand je fais données / Validation / liste il me dit qu'il ne faut pas faire référence à d'autres feuilles dans validation des données.

Quels sont mes alternatives pour contrer ce problème ? Comment puis-je quand même faire des listes ?
C'est en plus pour faire des listes en cascades.

Merci d'avance

2 réponses

  1. Ricky38 Messages postés 5776 Date d'inscription   Statut Contributeur Dernière intervention   1 463
     
    Salut,

    dans dans Insertion/Nom/Définir tu devrais avoir tes noms
    exemple

    bois1 plage feuil1!A1:A20
    bois2 plage feuil2!C1:C35

    et dans données / Validation / liste
    tu mets pour avoir la liste bois1
    =bois1

    pour la liste bois2
    =bois2
    0
    1. Sandrine
       
      Oui mais justement je veux qu'ils aient le même nom, car en plus je dois executer des listes en cascades : par exemple première cascade liste "matériau", avec dans cette liste : béton, bois, acier,... puis ça me renvois à une deuxième liste en fonction du choix par ex "bois", et ça me donne la liste de tous les types de bois. Mais je ne voudrais pas que dans ma première liste il apparaisse "bois1".
      De plus j'utilise une macro pour mettre en place mes listes, qui me le fait automatiquement depuis mes tableaux de données, donc je suis un peu limitée niveau appelation des listes.
      Voici la macro que j'utilise :

      Sub creer_liste_matériaux()
      colBD = 2
      colListe = 11
      Set f = Sheets("matériaux")
      ligne = 6
      f.Cells(ligne + 1, colListe).Resize(1000, 4).Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range(f.Cells(6, colBD), f.Cells(65000, colBD).End(xlUp))
      mondico(c.Value) = c.Value
      Next c
      f.Cells(ligne, colListe) = "matériaux"
      f.Cells(ligne, colListe).Font.Bold = True
      f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
      ActiveWorkbook.Names.Add Name:="matériaux!matériaux", RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)

      '---- niv 2,3,..
      For niv = 2 To 2 ' adapter le nombre de niveaux
      colBD = colBD + 1
      colListe = colListe + 2
      ligne = 6
      For Each c In Range(f.Cells(6, colListe - 2), f.Cells(65000, colListe - 2).End(xlUp))
      If c <> "" And c.Font.Bold <> True Then
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each d In Range(f.Cells(6, colBD), f.Cells(65000, colBD).End(xlUp))
      If d.Offset(, -1) = c Then mondico(d.Value) = d.Value
      Next d
      f.Cells(ligne, colListe) = c
      f.Cells(ligne, colListe).Font.Bold = True
      f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
      ActiveWorkbook.Names.Add Name:="matériaux!" + Replace(c, " ", "_"), RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
      ligne = ligne + mondico.Count + 1
      End If
      Next c
      Next niv
      End Sub
      0
    2. Ricky38 Messages postés 5776 Date d'inscription   Statut Contributeur Dernière intervention   1 463
       
      re,

      bois1 représente le nom donné à la plage feuil1!A1:A20 donc il n'est pas question de voir bois1 dans ta liste
      0
    3. Sandrine
       
      Dans la liste d'avant qui va me renvoyer a la liste bois, il apparaitra bien puisqu'il faut que les noms des listes soient les même.
      Si je met en A1 une liste "matériaux" avec bois dedans, de sorte que quand je le selectionne, il me sorte en A2 ma liste "bois" avec tous mes différentes essences de bois.
      J'utilise la formule =indirect(A1)
      0