Re : Transfère données de plusieurs lignes vers différentes colonnes
La minute culturelle :
L'idée est de récupérer les n° de ligne des cellules répondant à mon critères, sinon de renvoyer un grand nombre.
Ensuite, il suffit de regarder les plus petites valeurs des lignes pour savoir où est l'information cherchée.
On utilise une fonction matricielle: manipule un "tableau de valeurs".
Décortiquons la:
SI(OU(C2:C$104 ="Présent";C2:C$104="Mission");LIGNE(C2:C$104);1000000000)
Si on a "Présent" ou "Mission", alors on renvoie le n° de la ligne, sinon on renvoie une gros nombre (1000000000...)
Imaginons le contenu de C2:C104 comme suit :
C2
résent
C3 :Mission
C4 :Absent
C5 :Absent
C6 :Mission
...
On obtient alors le tableau suivant :
2
3
1000000000
1000000000
6
...
Ensuite on utilise PETITE.VALEUR(<tableau de valeurs>,<rang>)
Ainsi, appliquée à mon tableau de ci-dessus j'ai
1ère petite valeur = 2
2éme petite valeur = 3
6éme petite valeur = 6
....
Il faut donc que je passe en paramètre les rangs 1,2,3,.... à la fonction petite.valeurs.
Je le fais par LIGNE(N5)-4
En N5 : LIGNE(N5)-4 j'obtiens 5-4 = 1
En N6 : LIGNE(N6)-6 j'obtiens 6-4 = 2
En N7 : LIGNE(N7)-7 j'obtiens 7-4 = 3
Il suffit ensuite d'aller lire le contenu de la colonne B, à la ligne renvoyée par la fonction.
Ce qui se fait par Index :
Index(B:B, Petite.valeur(<mon tableau>,1)) donne Index (B:B, 2), soit B2
Index(B:B, Petite.valeur(<mon tableau>,2)) donne Index (B:B, 3), soit B3
Index(B:B, Petite.valeur(<mon tableau>,3)) donne Index (B:B, 6), soit B6
Ce qui correspond bien à ce qui est en face de C2, C3 et C6, les cellules correspondant à mon critère initial.