Remplacer des formules par le code VBA
Bonjour à tous,
je souhaite demander votre aide svp
J'aimerai remplacer mes formule par du code vba, voici mes formules en dessous, et je vous remercie infiniment.
imad.
formule 1 : =NB.SI.ENS('TRVX FINIS'!$J:$J;"am";'TRVX FINIS'!$X:$X;$AI$1;'TRVX FINIS'!$M:$M;"raff spéciale";'TRVX FINIS'!$AA:$AA;$AI$2)
formule 2 : =NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. esters";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. fluides";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1 ";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1&2";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vapeur";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"pastillage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"bureaux";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"chateau";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"entretien";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"force";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"laboratoire";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vestiaires";'TRVX FINIS'!AA:AA;$AI$2)
formule 3: =NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. concrètes";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"cuverie";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"cuverie 2020 ";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"ecaillage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"filtration fine";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"mag 1500";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"mg 1500";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"magasins";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"malaxage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"raff. 2";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"savonerie";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 2";'TRVX FINIS'!AA:AA;$AI$2)
Bonjour,
Votre formule 2 peut être simplifiée ainsi :
=sommeprod(NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;{"at. esters";"at. fluides";"..."};'TRVX FINIS'!AA:AA;$AI$2))Je n'ai pas recopié toutes les valeurs possibles mais je pense que vous aurez compris le principe.
D'ailleurs, vous pouvez mettre toutes les valeurs possibles dans une plage, que vous pourriez renommer ValPossibles par exemple et avoir la formule suivante :
=sommeprod(NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;ValPossibles;'TRVX FINIS'!AA:AA;$AI$2))Le principe est le même pour la formule 3...
Je ne pense pas qu'un code VBA soit intéressant dans votre cas.
Cdlt,
3GB,
je vous remercie énormément
3GB,
ça ne fonctionne pas
TRVX FINI est un onglet et pas une donnée à compter
Imad,
Je ne comprends pas ce que "ça ne fonctionne pas" veut dire. La formule renvoie une valeur d'erreur ? Ou le résultat du calcul n'est pas celui attendu ?
Puis-je voir votre formule ?
Pour rappel, avec cette formule :
=sommeprod(NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;ValPossibles;'TRVX FINIS'!AA:AA;$AI$2))Il faut au préalable :
- définir un nom à la plage destinée à accueillir les valeurs à retenir. Dans mon exemple, le nom de cette plage doit être "ValPossibles".
- affecter des valeurs à cette plage : 1è cellule : at. esters, 2è cellule : at. fluide, ...
Ensuite vous revalidez la formule et ça devrait renvoyer le résultat juste.
3GB
je ne maitrise pas le vba pour pouvoir définir les plages et les initier ...
si vous pouvez me faire un code complet ça serait gentil de votre part
'TRVX FINIS' c'est le nom de l'onglet
voici les formules:
formule 1 : =NB.SI.ENS('TRVX FINIS'!$J:$J;"am";'TRVX FINIS'!$X:$X;$AI$1;'TRVX FINIS'!$M:$M;"raff spéciale";'TRVX FINIS'!$AA:$AA;$AI$2)
formule 2 : =NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. esters";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. fluides";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1 ";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1&2";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vapeur";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"pastillage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"bureaux";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"chateau";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"entretien";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"force";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"laboratoire";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vestiaires";'TRVX FINIS'!AA:AA;$AI$2)
formule 3: =NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. concrètes";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"cuverie";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"cuverie 2020 ";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"ecaillage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"filtration fine";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"mag 1500";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"mg 1500";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"magasins";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"malaxage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"raff. 2";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"savonerie";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 2";'TRVX FINIS'!AA:AA;$AI$2)
Imad,
J'ai compris que 'TRVX FINIS' était un onglet.
Il n'y a pas besoin de VBA et je dirais même que c'est à déconseiller dans ce cas.
Pour définir un nom, il faut sélectionner une plage, se rendre sur la barre de références (la petite barre à gauche de la barre de formules) et entrer un nom (sans espace ni caractère spécial) puis appuyer sur entrée.
Sinon, il est possible de se rendre au volet Données/Gestionnaire de noms/Définir un nom et de saisir la plage et le nom ainsi que la portée du nom. Si vous tapez "définir un nom sur Excel" sur Google ou Youtube, vous aurez des tutos très clairs, c'est tout simple.
Ici, vous avez reposté vos anciennes formules. J'aurais voulu que vous postiez les formules inspirées des miennes et qui n'ont pas fonctionné comme vous l'avez affirmé sur un précédent commentaire.
Et si Définir un nom vous semble trop compliqué, vous pouvez tout simplement saisir la référence de la plage contenant les valeurs possibles.