Variable à annuler lors du calcul d'une moyenne pondéré

Bonjour à tous, je suis nouveau sur ce forum et en VBA et j'aurai donc besoin de votre expertises pour résoudre l'un de mes problèmes.

En effet, dans le cadre de mes études, je dois partir d'un programme relativement long et massif (5500 lignes de codes avec des noms de variables compréhensibles mais longs) dans lequel je me heurte à une problème. Le dossier x en question fait appel aux données d'un autre dossier excel dans lequel les valeurs sont recueillis. Jusque là aucun problème. Chaque variable recueilli à un nom auquel viens s'associer une classification et une note en fonction de la classification qu'on lui a donné, exemple : Variable "sécurité" -> Classification "Adéquate" -> Note = 100%.

Il existe plusieurs classification et donc plusieurs notes accordées en conséquence allant de 100 à 0. C'est là qu'est le problème, lorsque qu'une variable n'est pas évaluable, elle est classifié comme "non évaluable" et obtient par défaut la note de 0. Cela n'est pas quelque chose que je peux modifié et cela ne doit pas l'être cependant, une moyenne pondéré est réalisée à l'aide de la classification et donc de la note attribué à la variable et du poids que représente cette catégorie de variable dans l'industrie.

Pour illustrer, nous avons 2 établissements ou je cherche à déterminer la moyenne pondéré en terme de sécurité par rapport à 100. Le poids de la note en fonction des établissements varie en fonction de la taille de ces établissements:

Moyenne pond= ( (note établissement 1 x taille établissement 1)+(note établissement 2 x taille établissement 2)) / (taille établissement 1+taille établissement 2)

Voici le calcul effectuée. Lorsque la variable n'est pas évalué et qu'elle donne donc 0, la taille de l'établissement elle, est toujours compris dans le calcul, ce qui donc dérègle complètement la moyenne de la moyenne pondéré alors que si ce n'est pas évaluable sur un établissement, cela ne devrait pas être pris en compte et donc l'établissement non évaluable devrait être enlevé de l'équation donnant ceci:

Si établissement 1 non évaluable alors

Moyenne pond=(note établissement 2 x taille établissement 2) / taille établissement 2

Tout ceci ce passe sur un tableau et l'ont m'a conseillé de faire ceci à l'aide d'une matrice mais je ne sais absolument pas sous quelle forme le faire.

Si il y a d'autres solutions pour pouvoir ne pas prendre en compte la taille de l'établissement si la note de celui ci n'est pas applicable, je suis preneur.

En espérant avoir été clair malgré ce texte très long et moyennement représentatif.

bonjour,

une proposition

Moyenne pond= ( (note établissement 1 x taille établissement 1)+(note établissement 2 x taille établissement 2)) / ((taille établissement 1 x note établissement 1 > 0)+(taille établissement 2 x note établissement 2 > 0))

Bonjour H2so4, merci pour l'idée et la proposition mais il n'existe pas que la classification "non applicable" qui à pour valeur la fonction 0, en effet, la classification "non adéquate" vaut 0 aussi mais celui ci doit être pris en compte donc la formule que vous venez de me donner annulerai aussi les classification non adéquate.

Est il possible en vba de pouvoir utiliser le symbole "différent" avec une variable ? afin de pouvoir reprendre votre idée de manière à avoir :

Moyenne pond=( (note étab 1 x Taille étab 1) + (note étab 2 x taile étab 2)) / ( taille étab 1 <> "non applicable") + (taille étab 2 <> "non applicable" )

avec <> représentant le symbole différent et le "non applicable" étant la classification donné à la variable

rebonjour,

différent de en vba s'écrit ainsi.

<>

Voici la ligne de code de base réalisé par mon enseignant en vba que je cherche à modifier. C'est celle qui réalise les moyennes pondérés d'un tableau de valeur comme expliqué précédemment:

YAAT_SECURITE = Application.Evaluate("SUMPRODUCT(RawData!AX3:AX2004 * RawData!U3:U2004) / SUMPRODUCT(RawData!U3:U2004)")

j'ai donc voulu faire comme proposé et rajouter un "différent de" sur la colonne des valeurs en U (les tailles d'établissements), la colonne des AX étant celle des valeurs de sécurité des établissements.

YAAT_SECURITE = Application.Evaluate("SUMPRODUCT(RawData!AX3:AX2004 * RawData!U3:U2004) / SUMPRODUCT(RawData!U3:U2004 <> "Non applicable)")

Mais cela ne fonctionne absolument pas malheureusement ( je m'excuse par avance si ma manière de vouloir coder est très mauvaise, je débute). Non applicable n'étant pas une variable mais une classification de la variable SECURITE cela n'est pas pris en compte je pense. Qu'en pensez vous ?

bonjour

en supposant que la "variable" SECURITE se trouve dans la colonne X, et que l'on ait bien 0 en AX si la SECURITE="non applicable" voici

YAAT_SECURITE = Application.Evaluate("SUMPRODUCT(RawData!AX3:AX2004 * RawData!U3:U2004) / SUMPRODUCT((RawData!X3:X2004 <> ""Non applicable"")*RawData!U3:U2004)"

pour toute demande d'aide à suivre, pour éviter qu'on doive supposer, merci de mettre un fichier représentatif de tes données et du résultat que tu veux obtenir.

Merci pour votre réponse, je vais tester ça dans la journée ou demain au plus tard et je reviens vers vous ou un autre utilisateur avec un fichier représentatif si cela ne fonctionne pas.

3test-vba-para.xlsm (18.84 Ko)

Bonjour,

après avoir tenté de réaliser ce qui avait été indiqué, je n'ai pas réussi à faire ce que je souhaitait. Ne pouvant pas envoyer le fichier sur lequel je travail (confidentiel), j'ai réalisé un échantillon correspondant au problème précédemment évoqué. Ici, j'ai réalisé la moyenne pondéré des différentes catégories que j'ai (ici 2 en exemple) et je cherche toujours à savoir comment faire pour ne pas prendre le "non applicable" en compte dans ma moyenne pondéré pour ne pas la faire chuter car elle est par défaut fixée sur étant égale à 0 ("non applicable" et "non adéquate" étant tout deux égaux à zéro), je ne peux pas faire simplement une condition pour ne pas prendre ce qui est égale à 0 et je ne peux pas changer cette condition, le "non applicable" doit rester égale à 0 mais ne doit pas être compris dans le calcule à l'inverse du "non adéquate". Je suis donc toujours dans la même situation, mais cette fois ci avec un support pour que cela soit bien plus visuel et compréhensible.

bonjour,

une correction

7test-vba-para.xlsm (19.12 Ko)

Merci, ce que je voulais faire fonctionne maintenant, je met en lien le code avec la correction et les améliorations!

3test-vba-para.xlsm (20.79 Ko)
Rechercher des sujets similaires à "variable annuler lors calcul moyenne pondere"