Toutes les fonctions de Calc nécessitant une plage (c’est-à-dire
quasiment toutes les fonctions
) peuvent recevoir une matrice dynamique pour plage.
L’exemple suivant propose de fournir une matrice dynamique à une fonction de recherche.
Lorsque DECALER fournie une plage à une fonction, telle que RECHERCHEV utilisée avec une plage dynamique, la fonction n’a absolument pas besoin de validation matricielle, DECALER fournie une plage de la même façon que l’on peut soi-même indiquer une plage de données.
Le fil de discussion servant de support :
[Résolu] RechercheV sur plusieurs matrices potentielles
Comme toute
fonction de recherche nécessitant une plage, RECHERCHEV peut utiliser une plage dynamique comme matrice de recherche.
Syntaxe de RECHERCHEV :
=RECHERCHEV(critère_de_recherche;matrice;index;ordre_de_tri)
matrice désigne la plage utilisée pour le critère de recherche et le résultat, c’est cet élément qui va pouvoir être dynamique.
Dans l’exemple suivant, l’utilisateur va renseigner en cellule A1 la matrice voulue pour la recherche, la fonction DECALER va alors créer la matrice correspondante, pour cet exemple, il s’agit de « Matrice3 ».
La valeur recherchée dans la matrice choisie est indiquée en A4, si cette valeur n’existe pas en G13:G16, c’est la valeur immédiatement inférieure qui est retenue pour retourner le contenu présent en H13:H16.
Par exemple, si A1 contient le texte « Matrice3 », DECALER va devoir renvoyer la matrice G13:H16.
Dans cette matrice, la valeur recherchée est 25 ; comme cette valeur n’existe pas, c’est la valeur 21 qui est retenue, RECHERCHEV doit alors retourner comme résultat « B »
tuto_decaler_5.jpg
=RECHERCHEV(critère_de_recherche;matrice;index;ordre_de_tri)
- critère_de_recherche : A4
- matrice : Création de la plage dynamique :
- DECALER(référence;lignes;colonnes;hauteur;largeur)
- référence : F1 va être le point de départ du décalage
- lignes : pour savoir de combien de lignes il faut décaler la référence, on peut par exemple rechercher le terme présent en A1 dans la plage F1:F13, ce qui donne :
Pour le texte recherché « Matrice3 », EQUIV retourne 13, car c’est à la treizième ligne que ce texte est trouvé ; or, il ne faut pas décaler notre référence de 13 ligne, celle-ci étant déjà en ligne 1, il n’est pas souhaité d’obtenir un décalage jusqu’en ligne 14, le résultat d’EQUIV doit alors être ajusté en ôtant 1 au résultat.
Dans ce cas présent, les textes sont dans l’ordre alphabétique, ce qui risque de ne pas être toujours le cas, il faut donc préciser le dernier paramètre d’EQUIV à 0 pour trouver le bon texte même si l’ordre alphabétique n’est pas respecté.
Le décalage en ligne va donc être :
La référence de départ F1 est donc maintenant décalée de 12 lignes, et renvoie le contenu de F13
- colonnes : il suffit maintenant de se décaler d’une colonne pour obtenir le début de la matrice de recherche.
Le paramètre colonne est donc à 1.
La référence de départ F1, décalée de 12 lignes donne le contenu de F13, décalée d’une colonne donne le contenu de G13
- hauteur : la matrice de recherche, quelle qu’elle soit dans cet exemple, a une hauteur de 4 lignes.
Le paramètre hauteur est donc à 4
La référence de départ F1, décalée de 12 lignes donne le contenu de F13, décalée d’une colonne donne le contenu de G13, sur une hauteur de 4 lignes donne le contenu de G13:G16.
- largeur : la matrice de recherche, quelle qu’elle soit dans cet exemple, a une largeur de 2 colonnes.
Le paramètre largeur est donc à 2
La référence de départ F1, décalée de 12 lignes donne le contenu de F13, décalée d’une colonne donne le contenu de G13, sur une hauteur de 4 lignes donne le contenu de G13:G16, sur une largeur de 2 colonnes donne le contenu de G13:H16.
La matrice dynamique dans laquelle la recherche sera effectuée est donc DECALER(F1;EQUIV(A1;F1:F13;0)-1;1;4;2)
Pour prévenir tout risque d’erreur, dans ce cas présent, toutes les références peuvent être absolues (aucune incrémentation de ligne et/ou de colonne souhaitée(s)), la formule devient :
- index : il est demandé à RECHERCHEV de chercher dans la seconde colonne, ce paramètre est donc à 2.
- ordre_de_tri : paramètre non renseigné, car on ne cherche pas le critère exact dans une liste qui est triée.
la formule finale de RECHERCHEV est :
Code : Tout sélectionner
=RECHERCHEV(A4;DECALER($F$1;EQUIV($A$1;$F$1:$F$13;0)-1;1;4;2);2)
tuto_decaler_6.jpg
Le classeur exemple est en fin de fil, onglet 'Plage_dyn_Recherche'
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.