Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
[RESOLU(cisco)] demande explication formule matricielle de CHRIS24
je me débrouille pas trop mal en VB mais je suis complètement nul en fonction !
j'ai récupéré une formule d'un internaute CHRIS24 (s'il passe par ici ce sera bien)
le but étant d'afficher en colonne les valeurs sans doublons d'une liste et une autre colonne le nbr de fois
j'ai mis un cadre avec ma demande dans ce petit fichier ce qui sera plus simple
merci d'avance à tous ceux qui pourraient m'apporter l'explication souhaitée !
Pour le moment, je n'ai pas le temps, donc, j'essayerai de t'expliquer cela plus tard...
Est-ce que tu as essayé de comprendre avec Formules --> Évaluation de formule ? Si tu travailles avec des plages trop grandes, cela ne sera pas très compréhensible. Le mieux, c'est de faire un exemple bidon travaillant seulement sur une dizaine de lignes, avec des cas VRAI et des cas FAUX, bien sûr.
Cette formule est issue de ma jeunesse, au temps du forum microsft excel, c'est un ténor de cette époque qui l'avait écrite.
pour des explications je ne suis pas en mesure d'en donner, j'ai moi même quelques difficultés à appréhender la fonction Ligne()
Salut Chris24 !
LIGNE n'est pas compliquée
=LIGNE(A1) donne 1 le no de lig
=LIGNE(A1:A10) donne 1 la 1'lig du champ
=LIGNES(A1:A10) donne 10 tot.lig dans le champ
effectivement ! c'est ce dont j'ai pu voir avec Évaluation de formule
d'où la puissance des formules matricielles !
une fois cela assimilé c'est déjà un grand pas !
Merci encore !
bon, le moins que l'on puisse dire c'est que ça ne se bouscule pas au portillon !
j'ai effectué qq recherches et grâce à CISCO qui a éclairé ma lanterne en m'indiquant l'utilisation "Évaluation de formule" et sa remarque "Pour être plus précis, LIGNE(A1:A10) donne {1;2;3;4;5;6;7;8;9;10} si placée dans une formule matricielle"
j'ai réussi à comprendre la différence importante avec la comparaison en forme de matrice !
CellRangDon désigne l'adresse de la plage considérée, écrite au format texte.
INDIRECT permet l'utilisation de ce texte, donc INDIRECT(CellRangDon) est une plage.
NB.SI($H$1:H9;INDIRECT(CellRangDon)) renvoie 0 pour toutes les valeurs de cette plage pas encore citées dans le début de la colonne H, dans $H$1:H9, et une autre valeur dans les autres cas.
SI(NB.SI($H$1:H9;INDIRECT(CellRangDon))=0 renvoie VRAI pour les valeurs de cette plage pas encore citées dans le début de la colonne H, FAUX pour les autres.
LIGNE(INDIRECT(CellRangDon)) renvoie les n° de ligne correspondant à cette plage ( de 2 à 15 dans l'exemple en pièce jointe).
CellNbrLig+2 renvoie le n° de la première ligne, juste après cette plage (16 dans l'exemple en pièce jointe).
On a donc une formule de la forme SI(test;valeur si VRAI;valeur si FAUX). A chaque VRAI correspond un n° de ligne compris entre 2 et 15. Le MIN permet de ne choisir que le plus petit de cette liste, donc d'écrire la première valeur de la plage pas encore citée dans la colonne H. A chaque FAUX correspond le nombre 16.
Dans H9, on a donc quelque chose du genre MIN(16;16;....;16;16;14;15), ce qui donne 14. Et la formule renvoie le contenu de A14, c.-à-d. 800.
Un peu plus bas dans la colonne H, lorsque toutes les valeurs de la plage ont été citées une fois, on n'a plus que des FAUX, et la formule matricielle renvoie le contenu de A16, c.-à-d. rien.
MIN(NB.SI($H$1:H1;INDIRECT(CellRangDon))) renvoie toujours un 0 tant que toutes les valeurs de la plage étudiée n'ont pas été citées une fois dans le début de la colonne H. Et comme 0 équivaut à FAUX pour EXCEL, la formule ci-dessus donne
, donc la valeur de la partie finale déja étudiée.
MIN(NB.SI($H$1:H1;INDIRECT(CellRangDon))) renvoie toujours un 1, dès que toutes les valeurs de la plage étudiée ont été citées une fois dans la colonne H. Et comme un 1 (ou tout autre nombre >=1) équivaut à VRAI, cela donne
Code:
SI(VRAI;"";...)
donc "".
Autrement dit, c'est une autre méthode donnant la même chose sans faire intervenir le contenu de la cellule A16.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.