Microsoft 365 VBA - recalculer un tableau selon des variables

douguy

XLDnaute Junior
Bonjour à tous

J'ai posté récemment un problème que je rencontre mais je pense que l'approche VBA utilisée (formula local ) n'est pas bonne.
Je retente ma chance avec une nouvelle méthodologie surement plus légère.

J'ai un tableau (tableau 1) avec plein de valeurs importées par macro d'un autre tableur.
J'ai un petit tableau (tableau 2) au dessus qui reprend une condition pour impacter une variable aux valeurs du tableau 1

la formule excel utilisée pour ce calcul est
=U9+INDEX($D$4:$K$6;EQUIV(C9;$C$4:$C$6;0);EQUIV(D8;$D$3:$K$3;0)) quand la valeur est un nombre
on reprend la valeur de la cellule puis on additionne la valeur du tableau 2 correspondant à la condition

=U9*(1+INDEX($L$4:$S$6;EQUIV(C9;$C$4:$C$6;0);EQUIV(D8;$L$3:$S$3;0))) quand la valeur est un pourcentage
on reprend la valeur de la cellule puis on multiplie par 1+ la valeur du tableau 2 correspondant à la condition

La deuxième contrainte que je souhaiterais mettre en place est de pouvoir faire ce calcul sur les lignes filtrées uniquement (par exemple le lundi uniquement)
Si pas de filtre le calcul se fait sur tout le tableau.

un grand merci pour vos bonnes idées

Douguy
 

vgendron

XLDnaute Barbatruc
Bonjour
Dans ton fichier, les deux formules ne sont nulle part
et la partie EQUIV(D8;$D$3:$K$3;0)) de ta formule n'a aucune chance de retrouver quoique ce soit, pusique tu cherches des nombres (D8) parmi une liste de lettees (D2:K3)
 

vgendron

XLDnaute Barbatruc
pourquoi multiplier les post pour le meme sujet?
 

douguy

XLDnaute Junior
Bonjour Vgendron

J'ai joint le mauvais classeur, celui pas fini....Désolé
Aussi j'ai ouvert un nouveau fil car je penses que bien que la finalité soit la même l'approche est très différente. J'aurais pas du ?

J'ai repris le fichier d'exemple qui est "fonctionnel"

Cordialement
 

Pièces jointes

  • Classeur1.xlsx
    13.6 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

En utilisant une subtilité de la fonction agregat qui n'opère pas sur les lignes masquées si on le veut.

En T9 formule à tirer vers le bas
=AGREGAT(3;5;A9:C9)
Le premier paramètre (valeur 3) demande d'appliquer la fonction NBVAL sur la plage spécifiée (A9:C9)
Le second paramètre (valeur;5) demande d'ignorer les lignes masquées
comme la plage A9:C9 ne fait qu'une ligne, NBVAL renverra 0 si la ligne est masquée et 3 si elle ne l'est pas
comme tout ce qui n'est pas 0 est VRAI, alors on peut faire un test sur la valeur pour savoir si la ligne est masquée ou non (0 = ligne masquée, 3 = ligne visible)
=SI($T9;U9+INDEX($D$4:$K$6;EQUIV($C9;$C$4:$C$6;0);EQUIV(D$8;$D$3:$K$3;0));0)

A9:C9 pourrait être juste A9 (Agregat(3;5;A9)

Voyez comment vous pouvez appliquer cette subtilité d'agregat pour votre cas.
Comme @vgendron je ne n'ai trop compris ce que vous cherchiez à faire.
Voyez également RECHERCHEX plus performante que INDEX/EQUIV

Je ne me suis pas occupé du but et de l'efficacité de votre fonction.
Je me suis contenté de répondre la question des lignes masquées.

Cordialement

P.S. mettez un lien vers cette deuxième discussion dans votre autre fil, que les visiteurs n'aient pas à chercher comme j'ai du le faire.
 

Pièces jointes

  • Agregat.xlsx
    23 KB · Affichages: 2
Dernière édition:

Discussions similaires