A quoi servent les formules matricielles ?

bonjour

depuis le temps que j'utilise Excel, je n'ai jamais utilisé de telles formules

donc je me demande bien à quoi elles servent ?

surtout dans quels cas sont-elles indispensables ?

@ James

oui, c'est par curiosité, suite à un de tes messages récents sur le forum

merci à tous

amitiés

bonjour

Monsieur 3 doigts te répond

imagine que tu sois obligé de passer par une étape intermediaire au sein d'une plage (un critère de dates , les 3 premiers carractères....... )

la matricielle va creer une matrice virtuelle qui va mettre en évidence les extractions correspondant au(x) critère(s) cette dernière est réutilisée dans la fonction du depart

prenons le cas de NB.SI(plage;plage) qui doit theoriquement renvoyer un tas de valeurs ,pour t'en convaincre tu saisis

ET(NB.SI(plage ;plage) ;là tu vas voir les valeurs cachées de cette" matrice virtuelle " , desormai c'est ce nouveau panel de valeur qui est exploité dans la fonction globale

nb) Le ET c'est pour voir >>> ne pas utiliiser

pour faire court ; une matricielle c'est une fonction qui mouline du mouliné

cordialement

Et puis j'ajoute, c'est juste beau ! (et presque incompréhensible parfois sauf pour certains ici )

re

salut Tulipe, Steelson

merci de vos messages, mais je n'ai pas compris

à la place d'une "matrice virtuelle" on peut créer une réelle, non ?

y a-t-il des cas insolubles par d'autres moyens plus simples ?

à vous relire

amitiés

re

oui ,du coup ça s'appelle une ou des colonnes intermediaires

le cas que je connais (je crois.....)

c'est faire la somme de la pemière val avec la 2eme et la troisieme puis la 2+la 3+ la 4 de manière à avoir des paquets de 3 (ou plus) dans la matrice virtuelle escomptée

theoriquement on passe par DECALER et la ça coince ou alors je merdoie , de plus Decaler renvoie un glorieux "volatile" qui embrume tout ,En gros faire du "step" de VBA

Attention, il est possible aussi de jouer avec des matrices carrées, et là c'est plus difficile de faire une colonne en plus car cela ne suffit pas ! Quoique dans ce cas, la seule fois où j'en ai eu besoin, un SOMMEPROD (qui est quand même matriciel) a suffi ! genre

=SOMMEPROD((A2:A5)*(B1:F1)*(B2:F5))

Mais s'il fallait rajouter une fonction à l'intérieur, alors il aurait fallu passer au { }

certe mais tu n'as pas les sous totaux , et si tu as une plage de 500 val bonjour le sommeprod

Dans le cas cité pour exemple ,la question aurait été

quel est le plus grand sous total de la somme de 3 valeurs en décalant d'une ligne et pour torturer un peu ; à quoi correspond -il ??

bien sur directement en une seule formule pour que ça soit élégant

cordialement

Bonjour à tous,

j'expliquerai ainsi :

une matrice est (le plus souvent) une plage.

Imagine que tu as une même opération à faire sur toutes les valeurs, dont tu veux connaitre la somme.

Par exemple, avec 1, 3 5 dans A2:A4 :

=SOMME(A2:A4+1)

Si tu fais une validation simple, excel ne fera la somme que du premier élément de la matrice => 2

Si tu fais F9 en ayant sélectionné A2:A4+1, tu vois que ça te retourne une matrice (normal) : {2;4;6}

La validation matricielle force excel à évaluer d'abord la matrice pour qu'il calcule =SOMME({2;4;6}), et là il peut faire la somme attendue 2+4+6 = > 12

Au passage tu reconnais Sommeprod() qui est une matricielle qui se cache

Bon à savoir : une formule dans un nom est toujours évaluée en matricielle.

A noter qu'il existe une 2nde forme de formule matricielle : elle te retourne une matrice, et tu dois avoir sélectionné plusieurs cellules avant de valider en matriciel pour lire tous les éléments de la matrice.

Par exemple sélectionne D2:D4, saisi =($A$2:$A$4+1) que tu valides en matriciel. Excel te retourne les 3 éléments de la matrice.

Tu as par exemple =DROITEREG() qui te retourne une matrice de 2 éléments.

Soit tu les récupères un par un avec Index() soit tu fais une matricielle sur plage (horizontale, sinon tu récupèreras 2 fois le premier élément, la matrice retournée ayant un séparateur de colonne : {2.25\12.58})

J'espère ne pas avoir plus embrouillé, pas toujours simple à expliquer

eric

si peu

Je suis à fond, je ne peux pas mieux

Je viens de découvrir aussi une autre utilisation : faire une fonction VBA qui renvoie un tableau, ce dernier est alors affecté à non plus une seule cellule excel mais un groupe de cellules par le biais d'une matrice ={ma_fonction} validée sur plusieurs cellules contiguës.

Bonsoir le fil, bonsoir le forum,

Pourquoi j'ai lu ça hein !?... Z'auriez pas un doliprane s'il vous plaît. Non, non, pas un, la boite !... Hello Dolly, qu'elle chantait l'autre....

Bonjour à toutes et tous !

Je viens de découvrir aussi une autre utilisation : faire une fonction VBA qui renvoie un tableau, ce dernier est alors affecté à non plus une seule cellule excel mais un groupe de cellules par le biais d'une matrice ={ma_fonction} validée sur plusieurs cellules contiguës.

Effectivement, il est possible de retourner plusieurs valeurs d'une même fonction à condition qu'elle soit validée en matricielle pour que ceci fonctionne, la fonction doit être terminée par une paire de parenthèses () afin d'indiquer qu'elle retourne un tableau et non une simple valeur, comme celle-ci par exemple :

Function MaFonction(Chaine As String) As Variant()

    Dim T()
    '...
    MaFonction = T

End Function

et comme le précise Eric, les cellules à sélectionner doivent l'être en horizontal et si on souhaite avoir le résultat en vertical, le tableau au sein de la fonction doit être dimensionné en conséquence. Une simple fonction qui compte les mots dans une chaîne :

Function Compter(Chaine As String) As Variant()

    Dim Dico As Object
    Dim Tablo() As Variant
    Dim Cle As Variant
    Dim Tbl As Variant
    Dim I As Long

    Set Dico = CreateObject("Scripting.Dictionary")

    'splite sur les espaces
    Tbl = Split(Chaine, " ")

    'compte le nombre de chaque mot
    For I = 0 To UBound(Tbl): Dico(Tbl(I)) = Dico(Tbl(I)) + 1: Next I

    I = 0

    'inscrit dans un tableau...

    'pour un tableau sur deux colonnes et x lignes, dans le cas de cette fonction, le tableau doit être dimensionné au préalable
    ReDim Tablo(1 To Dico.Count, 1 To 2)

    For Each Cle In Dico.Keys

        I = I + 1
        Tablo(I, 1) = Dico(Cle): Tablo(I, 2) = Cle

    Next Cle

    'pour un tableau sur deux lignes et x colonnes, on peut utiliser "Redim Preserve"
'    For Each Cle In Dico.Keys
'
'        I = I + 1: ReDim Preserve Tablo(1 To 2, 1 To I)
'        Tablo(1, I) = Dico(Cle): Tablo(2, I) = Cle
'
'    Next Cle

    Compter = Tablo

End Function

re

si vous me mettez en plus des macros...

je crois que dans Excel, à 99,99% je gère des données, tout comme 99,99% d'entre nous

et que par conséquent, on n'a jamais besoin de ces formules

je mets à part SOMMEPROD

car le fond de ma question de départ portait sur les formules avec { }

vu comme tout est compliqué pour ces formules, rassurez-moi : en aurais-je vraiment besoin un jour ?

ou puis-je dormir tranquille, rester idiot et simplet, et ne plus y penser ?

amitiés

Dans 95% des cas je me satsifait en effet d'excel, surtout depuis que j'ai découvert le SOMMEPROD (j'ai horreur des NB.SI.ENS dont je ne comprends pas la construction, !)

Après le VBA c'est pour le fun, ou juste automatiser un filtre avancé, l'actualisation d'un TCD, la captation de données sur le web. Surtout pas de calcul sauf exception car on ne peut jamais dire jamais.

Et les matricielles, c'est juste pour le décrassage de neurones ... quand j'y arrive !

salut Steelson

merci, tu me rassures

note : pour récupérer des données du web, essaye Power Query

amitiés

Bonjour,

Un cas pratique qui évite la création d'une table.

Cdlt.

annotation 2019 08 16 092642

salut Jean-Eric

je ne comprends pas bien...

il y a longtemps que je fais des factures sous Excel, quoique la loi incite à passer sur un progiciel

je n'a pas eu besoin de formules matricielles pour la TVA, ni autres

note : si tu mets un code de TVA (dans ton exemple de 1 à 3) il est bien mieux de créer la table noire

car tout le monde peut vérifier,

on peut modifier facilement les taux (la France en change souvent)

et surtout on ajoute une colonne qui fait la somme de chaque taux : c'est une obligation légale et ça aide les comptables pour leur déclaration de TVA

je sais que tu es capable de faire des formules très condensées (matricielles ou non)

comme tu le suggères ici

à titre personnel, étant bien moins compétent, je préfère des calculs (ou tables) intermédiaires

merci de ton exemple, spectaculaire pour moi je l'avoue

mais bon, apparemment on peut se passer de formules { }

amitiés à toi et à tous

Bonjour

Il y a des cas où, sauf à accumuler n formules, le matriciel gagne du temps, notamment des traitements de chaînes.

Je recherche quelques exemples et reviens.

J'ai aussi eu à les utiliser en MFC (où les {} n'apparaissent pas mais où le calcul est bien matriciel

J'ai retrouvé 3 exemples (je sais que j'ai plein de cas mais c'est pas noté dans le nom du fichier ) :

  • longueur la plus élevée d'une colonne de textes
  • association d'un élément d'une table de correspondance par rapport à une lettre extraite d'un mélange avec des chiffres
  • liste classée sans doublons à partir d'une autre liste

En revanche les cas que j'avais en tête, très tordus, ont été fait en sommeprod...

cas matriciels

merci, tu me rassures

note : pour récupérer des données du web, essaye Power Query

Pour VBA, j'ajoute aussi son utilisation pour remplir une BdD de façon conviviale, mais pas par userform (beurk !), par onglet dédié.

Pour le web, PowerQuery est un super outil ... mais il a quelques limites notamment quand le site est mal structuré (pas de table), quand les données sont récupérables en json directement à partir d'une url ou quand on récupère en rafale des données sur plusieurs url. Je pense que l'outil va mûrir, et puis il a d'autres bénéfices.

Rechercher des sujets similaires à "quoi servent formules matricielles"