• Initiateur de la discussion Initiateur de la discussion micheline
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

micheline

Guest
bonsoir,
voici un nouveau petit programme que je n'arrive toujours pas à faire en VBA, je recherche donc une petite aide.merci

le programme est le suivant:

"soit 2 tableaux à 1 dimension ayant exactement le même nombre d'élément. l'un contient des notes (0 à 20) et l'autre les coéfficients de chacune de ces notes . on souhaite obtenir la moyenne pondéré de l'ensemble notes et coéfficients ( exemple de calcul pour la moyenne pondérée: si on a une note à 12 avec un coeff de 1 et une à 13 avec un coeff de 2 la moyenne pondéré = (12*1+13*2) / ( 1+2)) il faut aussi éliminé les notes qui sont égale a des lettre pour faire le calcul."

remarque: on peut utilisé ta= array (11,12,15,11,12) et tb= array (1,2,1,3,1)
en déclarant ta et tb comme un tableau d'entier dim ta (1 to 5)

merci

bonne soirée

Micheline
 
Bonsoir,

la réponse de facilité serait d'écrire un code du type :

'*****************

Option Base 1

Sub MoyennePondérée()

Dim Ta() 'array A
Dim Tb() 'array B
Dim i As Integer
Dim Total As Double
Dim Ponderation As Integer
Dim Moyenne As Long

'les deux tableaux
Ta = Array(11, 12, 15, 11, 12)
Tb = Array(1, 2, 1, 3, 1)

'et le calcul
For i = 1 To UBound(Ta, 1)

Total = Total + (Ta(i) * Tb(i))
Ponderation = Ponderation + Tb(i)

Next i

Moyenne = Total / Ponderation

MsgBox "La moyenne est de :" & Moyenne, vbInformation

End Sub

'****************

Il y a certainement plus court et plus simple mais à cette heure-ci... 😎

Clément

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
 
Salut"micheline" et " K@d"
bonjour le "FORUM" hic hic hic .....Oupss ça c'est le Champagne d'hier soir
eh oui c'était l'anniversaire de notre "BRIGITTE"
bon en pièce jointe un essai que tu pourras adapter je pense
tiens nous au courant
A+++
Jean Marie
 

Pièces jointes

Re : Re: moyenne en VBA

Bonjour,

Il serait possible d'avoir cette procédure sous forme de fonction avec la possibilité d'introduire les valeurs de différentes cellules sélectionnées pour effectuer la moyenne et les pondérations

Merci pour toutes contributions,

OuaEl


Bonsoir,

la réponse de facilité serait d'écrire un code du type :

'*****************

Option Base 1

Sub MoyennePondérée()

Dim Ta() 'array A
Dim Tb() 'array B
Dim i As Integer
Dim Total As Double
Dim Ponderation As Integer
Dim Moyenne As Long

'les deux tableaux
Ta = Array(11, 12, 15, 11, 12)
Tb = Array(1, 2, 1, 3, 1)

'et le calcul
For i = 1 To UBound(Ta, 1)

Total = Total + (Ta(i) * Tb(i))
Ponderation = Ponderation + Tb(i)

Next i

Moyenne = Total / Ponderation

MsgBox "La moyenne est de :" & Moyenne, vbInformation

End Sub

'****************

Il y a certainement plus court et plus simple mais à cette heure-ci... 😎

Clément

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
 
Re : moyenne en VBA

Dans l'exemple donné précédemment, les inputs (notes et pondérations) sont donnés en dure. J'aimerai simplement créer une fonction qui prenne en argument plusieurs cellules (et non une plage) correspondant aux notes, et effectuer des pondérations sur ces valeurs qui dépendraient d'autres cellule

Par exemple, la fonction excel d'une moyenne pondérée s'écrit de la façon suivante: =moyenne(A1, B9, R8)
J'aimerai la même chose en pouvant moi même fixer les pondérations

Merci pour votre retour,

Cordialement,
 
Re : moyenne en VBA

Oui mais s'il y a deux sortes de paramètres lesquels sont les notes, lesquels sont les pondérations ?
En alternance une note puis une pondération ou bien toutes les notes puis toutes les pondérations ?
Votre exemple ne va pas d'ailleurs vu qu c'est un nombre impair de paramètres.

Avec alternance des notes et des poids c'est :
VB:
Function MoyPond(ParamArray T())
Dim N As Long, SommV As Double, SommP As Double
If UBound(T) Mod 2 = 0 Then MoyPond = CVErr(xlErrRef): Exit Function
For N = 1 To UBound(T) Step 2
   SommV = SommV + T(N - 1) * T(N)
   SommP = SommP + T(N): Next N
MoyPond = SommV / SommP
End Function
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
773
S
Réponses
2
Affichages
1 K
R
Réponses
1
Affichages
668
Rose_Chlh
R
D
Réponses
4
Affichages
1 K
Z
Réponses
0
Affichages
544
Z
S
Réponses
11
Affichages
1 K
sgangbadjo
S
M
Réponses
2
Affichages
1 K
Magicdog36
M
  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
1 K
R
Réponses
3
Affichages
4 K
R
Retour