La forme matricielle d'une fonction

Tous les utilisateurs des tableurs connaissent la formule = A1 * B1 qui calcule le produit des valeurs des cellules A1 et B1. La plupart d'entre eux, recopie cette formule autant de fois que nécessaire pour calculer le produit des cellules A2 et B2 , A3 et B3, ..., A10 et B10. Trop peu connaissent cette écriture matricielle A1:A10 * B1:B10  qui fournit les mêmes résultats en une seule écriture.

Dans un tableur une fonction (ou formule matricielle) s'applique sur autant de plages de cellule que la fonction a de paramètres.   Elle traite individuellement et successivement toutes les cellules de ces plages. En  conséquence, il doit nécessairement y avoir une correspondance entre le nombre, la disposition (en ligne, en colonne ou les 2)  des cellules  source (qui fournissent les valeurs) et la plage résultat.

Par exemple, la  fonction "produit" citée en introduction, nécessite 2 paramètres. La source devra donc est composée de 2 plages ( ici A1:A10 et B1:B10) de même "forme" (ici 10 cellules en colonnes). La plage résultat doit, elle aussi, avoir cette "forme" ( par exemple : C1:C10)

Avant de saisir une formule matricielle, il faut sélectionner la plage résultat (dont la "forme" dépend de la fonction utilisée, ici : C1:C10 ), saisir la forme matricielle de la formule et valider en utilisant obligatoirement la combinaison de touches MAJ + CTRL + Entrée

information complémentaire disponible en cliquant ici
Sous Google Sheets, une formule en forme matricielle, s'écrit =ArrayFormula()
exemple :
  • =ArrayFormula(A1:A10*B1:B10)
  • =ArrayFormula(SI(D3;D13 <7: D3;D13; ""))

Exemple 1 : la fonction SI(test; V ; F)

La fonction SI a 3 paramètres :

  1. le test dont l'évaluation est VRAIE ou FAUSSE
  2. V : le résultat de la fonction SI lorsque le test est VRAI
  3. F : le résultat de la fonction SI lorsque le test est FAUX

La formule '=SI(D3:D13 <7; D3:D13; "")'  en est une utilisation sous forme matricielle.

  1. paramètre 1 : le test sous forme matricielle: D3:D13 <7
  2. paramètre 2 : la plage D1:D13 ie : le résultat de la fonction SI lorsque le test est VRAI est dans la plage D3:D13
  3. paramètre 3: chaine vide

Le test  D3:D13 <7 sera effectué 11 fois successivement :

  1. la valeur de D3 (cellule en position 1 de la plage) est comparée à 7, le test rend VRAI, la fonction SI rends le contenu de D3 ( cellule en position 1 dans la plage D3:D13 définie dans le 2ème paramètre) soit 2,25 (qui affiche 2,3 selon le format de la cellule)
  2. la valeur de D4 (cellule en position 2 de la plage) est comparée à 7, le test rend FAUX, la fonction SI rends "" (la chaine vide)
  3. la valeur de D5 (cellule en position 3 de la plage) est comparée à 7, le test rend VRAI, la fonction SI rends le contenu de D5 ( cellule en position 3 dans la plage D3:D13) soit 2,5
    -----------
  1. la valeur de D11 est comparée à 7, le test rend VRAI, la fonction SI rends le contenu de D11 ( cellule en position 9 dans la plage D3:D13) soit 2,75 (qui affiche 2,8 selon le format de la cellule)
  2. la valeur de D12 est comparée à 7, le test rend FAUX, la fonction SI rends "" (la chaine vide)
  3. la valeur de D13 est comparée à 7, le test rend VRAI, la fonction SI rends le contenu de D13 ( cellule en position 10 dans la plage D3:D13) soit 6
    -----------

 

Cliquer pour agrandir l'image
La forme ci-dessus s'utilise avec beaucoup d'efficacité comme paramètre d'une autre fonction.
Exemple :
SOMME(SI(C5:C16="AL-M400";D5:D16;0))
Cette formule matricielle calcule le nombre total de pages imprimées par les imprimantes AL-400 du site ( voir ila figure 1 ci-dessous à gauche).
La figure 2 montre l' étape, qui est réalisée virtuellement par le tableur, et qu'il faut imaginer pour comprendre le calcul. Elle montre une plage E5:E16 contenant la formule matricielle SI(C5:C16="AL-M400";D5:D16;0)dont l'algorithme est celui-ci :
     Le test  B5:B16 ="AL-400" est à effectuer 12 fois successivement :
  1. la valeur de B5 (cellule en position 1 de la plage) est comparée à "AL-400", le test rend FAUX, la fonction SI rends 0 ;
  2. la valeur de B6  (cellule en position 2 de la plage) est comparée à "AL-400", le test rend VRAI, la fonction SI rends le contenu de C6 ( cellule en position 2 dans la plage C5:C16 définie dans le 2ème paramètre)
  3. ---------

figure 1 : le calcul du nombre total de pages imprimées par les imprimantes AL-400

Cliquer pour agrandir l'image

Figure 2 : l'étape intermédiaire à imaginer pour comprendre le calcul

Cliquer pour agrandir l'image

aa

Ne pas confondre et bien observer la place des parenthèses et des points-virgules.
                           SOMME(SI(C5:C16="AL-M400";D5:D16;0)) qui applique la fonction SOMME sur une forme matricielle de SI et qui est validée par CTRL+MAJ+ENTRER
avec
                           SOMME.SI(C5:C16;"=AL-M400";D5:D16) qui applique la fonction SOMME.SI  et qui est validée par ENTRER


NB : ces deux calculs produisent cependant le même résultat
  •