Arisoy a écrit:Et je vais devoir adapter ça à plus de deux zones... Je vois pas du tout comment faire
J'en ai déjà une toute prête pour quatre plages :
- Code : Tout sélectionner AgrandirRéduire
SI(LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2;_L3;_L4)))>NBVAL(_L1;_L2;_L3);INDEX(_L4;LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2;_L3;_L4)))-(NBVAL(_L1;_L2;_L3)));SI(LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2;_L3)))>NBVAL(_L1;_L2);INDEX(_L3;LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2;_L3)))-(NBVAL(_L1;_L2)));SI(LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2)))>NBVAL(_L1);INDEX(_L2;LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2)))-(NBVAL(_L1)));SI(LIGNE(INDIRECT("A1:A"&NBVAL(_L1)))<=NBVAL(_L1);INDEX(_L1;LIGNE(INDIRECT("A1:A"&NBVAL(_L1))));""))))
L'avantage de cette formule est qu'elle s'adapte automatiquement. Il suffit de nommer les plages _L1, _L2, _L3, _L4 et même si il n'y a que 2 plages nommées, elle fonctionne quand même.
Tu ne la comprendra pas facilement si tu n'es pas habitué avec les formules matricielles. En gros, et il faut faire l'exercice, on génère une plage virtuelle numérotée de 1 à n où
n correspond à la quantité de valeur contenues dans les quatre plages :
Valide "matriciellement" (Ctrl+Maj enfoncées lors de l'appui sur la touche Entrée) la formule suivante :
- Code : Tout sélectionner AgrandirRéduire
=LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2)))
attention, ton fichier doit contenir deux plages nommées _L1 et _L2 contenant des valeurs. Tu constates que la formule crée une plage numérotée de 1 au nombre total de valeurs contenues dans tes deux listes.
Ensuite avec un
SI(), on cherche à savoir si le chiffre généré est supérieur au nombre de valeurs contenues dans la liste 1
_L1. Si oui alors la fonction
INDEX() extrait de la liste2
_L2 les valeurs les unes après les autres en commençant par le première :
- Code : Tout sélectionner AgrandirRéduire
INDEX(_L2;LIGNE(INDIRECT("A1:A"&NBVAL(_L1;_L2)))-(NBVAL(_L1)))
et ainsi de suite avec la liste1
_L1.
PS, le premier fichier que j'ai joins n'était pas complet je l'ai remplcé.
A+