Bonjour,
Je génère automatiquement un classeur Excel (en Java, avec Apache POI) dans lequel je génère automatiquement et de manière générique des colonnes de données. Pour chacune d'elles, je génère un nom qui représente la liste des valeurs de la colonne de données (sans la première ligne, qui contient une entête).
Ailleurs (autre feuille ou autre colonne), je voudrais faire une validation de saisie, avec liste déroulante, telle que la liste de choix proposés dépende de la valeur saisie dans la cellule située immédiatement à sa gauche (enfin peu importe, une valeur saisie dans une autre cellule disons). Dans cette cellule, on peut saisir un choix également dans une liste, elle statique. Mettons pour l'exemple qu'il y a dans cette liste les valeurs suivante "v1","v2","v3","v4".
La liste de choix à proposer, mettons que je l'ai nommé "listedechoix", ne doit être affiché que pour le choix "v2" et le choix "v3".
J'ai tenté de résoudre ça en créant deux noms, val_v2 et val_v3 comme étant "=listedechoix". Puis j'ai défini une règle de validation avec la formule =indirect("val_"&$j$1;false). Cela ne fonctionne pas : j'ai un message d'erreur laconique qui me dit "Impossible de trouver une plage nommée que vous avez spécifiée". Avec la formule =listedechoix ça fonctionne, avec =val_v2, ça fonctionne et avec =indirect("listedechoix";false), ça fonctionne aussi. En revanche, =indirect("val_v2";false) ne fonctionne pas.
Bien sûr, c'est un exemple simplifié (j'ai réduit le nombre de la valeurs possibles, de listes, etc). En plus, je pourrais avoir plusieurs listes de choix différentes (pas seulement une liste ou pas de liste selon la valeur (comme par exemple, "v1":aucune valeur, "v2":listedechoix,"v3":listedechoix, "v4":listeautreschoix)). Je voudrais également conserver la généricité de mon code, en rendant indépendant la colonne qui contient les valeurs de celle qui a besoin de la validation (d'où le passage par 2 noms, en particulier).
- J'ai l'impression que c'est la référence "en cascade" à un nom qui n'est pas gérée. Me trompe-je ?
- Y'a-t-il une erreur dans la formule =indirect("val_"&$j$1;false). Question connexe : y-a-t-il un moyen de connaître quelle est la plage nommée déterminée qu'Excel ne trouve pas...
- Y'a-t-il un (autre) moyen, une fonction (pour faire un indirect sur le résultat d'un indirect ), une syntaxe pour le faire (sans macro, ni vba, ni autre du genre) ? J'ai essaye par evalue sans succès : =evalue("=indirect(""val_"&$j$1""";false)"). Le problème étant toujours que je ferais référence à une plage nommée introuvable...si je pouvais au moins connaître le nom généré, ça m'aiderai peut-être).
- Y'aurait-t-il moyen de faire une sorte de switch ou if/elseif sans passer par du vba pour pouvoir choisir une liste de choix ou une autre en fonction de la saisie, ce qui me permettrait de choisir une liste différente selon la valeur saisie dans l'autre cellule ?
- Suis-je condamné à passer par un seul nom, ce qui m'obligerait à créer autant de listes que de variantes de liste et de mettre ces noms en valeur dans le cellules d'une feuille bidon pour pouvoir y faire référence en indirect (ce que je cherche à tout prix à éviter (la feuille bidon)) ?
Merci d'avance pour vos suggestions.
Partager