moyenne avec critaire

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 !

akramenergie

XLDnaute Occasionnel
Bonjour le forums

J'ai esséyer de traduire ce que je veux faire par un exemple dans un fichier excel.
Comme vous allez remarquer dans la feuil1, jai calculé la moyenne collone E et F avec deux méthode la premiére (collone E) c'est un calcule a la main et la deuxiéme (collone F) calcule a l'aide d'une macro.

Le probléme c'est que le calcule a l'aide de ma macro m'affiche un résulta différent du ceux calculé a la main.

merci de votre aide
 

Pièces jointes

Re : moyenne avec critaire

Bonjour,

Voici une macro qui devrait faire ton affaire :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Limite = ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Row
j = 2

While Cells(j, 4) <> ""

    Somme = 0
    Compteur = 0
    
    For i = 2 To Limite
    
        If Cells(i, 1) = Cells(j, 4) Then
            Somme = Somme + Cells(i, 2)
            Compteur = Compteur + 1
        End If
        
        If Compteur <> 0 Then
            Cells(j, 6) = Somme / Compteur
        Else
            Cells(j, 6) = "Aucune valeur n'a été saisie pour " & Cells(j, 4)
        End If
    
    Next
    
    j = j + 1

Wend

End Sub

Bonne journée
 
Dernière édition:
Re : moyenne avec critaire

Bonjour akramenergie,

Sans pour autant résoudre le problème, je voudrais toutefois attirer ton attention sur la méthode de calcul des moyennes :

La moyenne résulte du quotient du total des valeurs par le nombre de valeurs.

Ainsi, pour considérer la moyenne des valeurs P1 :

Moyenne = (0 + 13 + 15 + 0 + 20) / 5 = 48 / 5 = 9,6

De même pour P2 :

Moyenne = (11 + 0 + 19) / 3 = 30 / 3 = 10

Espérant avoir aidé.

Cordialement.

Edit : Bonjour GeoTrouvePas
 
Dernière édition:
Re : moyenne avec critaire

Bonjour,

d'abord merci a toi "GeoTrouvePas" de ta réponse sauf que l'exemple que j ai envoyer est just un simple exemple qui traduit ce que j'ai dans ma vrais macro mais la vérité le vrai fichier excel est un peut plus compliquer que sa et trés costot.

et pour répondre "Papou-net" ce que tu dit est vrai sur la définition de la moyenne mais dans mon fichier si une cellule est vide il faut pas considérer que c'est nul et il faut pas le prendre en compt .
 
Re : moyenne avec critaire

J'ai esséyer ed résoner autrement pour calculer la moyenne, je vais d'abord calculer le nombre de données saisie pour le P1.
comme dabitude en vers les résultat corrécte et attendu et en rouge le calcule de la macro, J'ai utilisé l'equivalent de la fonction excel NBVAL qui est CountIf mais le résulta n'est pas bon.quelq'un peut me corrigé svp
 

Pièces jointes

Re : moyenne avec critaire

J'ai esséyer ed résoner autrement pour calculer la moyenne, je vais d'abord calculer le nombre de données saisie pour le P1.
comme dabitude en vers les résultat corrécte et attendu et en rouge le calcule de la macro, J'ai utilisé l'equivalent de la fonction excel NBVAL qui est CountIf mais le résulta n'est pas bon.quelq'un peut me corrigé svp

ça veut dire que la macro que j'ai faite ci - dessus ne renvoi pas le résultat escompté ???
 
Re : moyenne avec critaire

non c 'est pas sa juste que le code est trés compliquer est j'arrive pas a adapter ce que tu ma proposé.
c'est pour cela j'ai penssé a calculer le NBVAL si j'aarive a faire sa comme c expliquer dans mon fichier le probléme est résolut

Merci pour votre aide
 
Re : moyenne avec critaire

Re : akramenergie

Pour tenter de répondre à tes besoins, voici une macro qui, bien que peu "ergonomique" contourne le problème.

Je l'ai testée, elle fonctionne (sous XL2003).

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim P1, P2, P3, P4, P5, P6
Dim NbP1, NbP2, NbP3, NbP4, NbP5, NbP6

On Error Resume Next
With Sheets("Feuil1")
  For Each cel In .Range("A2:A" & Range("A1").End(xlDown).Row)
    If Cells(cel.Row, 2) >= 0 Then
      Select Case cel.Value
        Case "P1"
          P1 = P1 + Cells(cel.Row, 2).Value
          NbP1 = NbP1 + 1
        Case "P2"
          P2 = P2 + Cells(cel.Row, 2).Value
          NbP2 = NbP2 + 1
        Case "P3"
          P3 = P3 + Cells(cel.Row, 2).Value
          NbP3 = NbP3 + 1
        Case "P4"
          P4 = P4 + Cells(cel.Row, 2).Value
          NbP4 = NbP4 + 1
        Case "P5"
          P5 = P5 + Cells(cel.Row, 2).Value
          NbP5 = NbP5 + 1
        Case "P6"
          P6 = P6 + Cells(cel.Row, 2).Value
          NbP6 = NbP6 + 1
      End Select
    End If
  Next
  .Cells(2, 6).Value = P1 / NbP1
  .Cells(3, 6).Value = P2 / NbP2
  .Cells(4, 6).Value = P3 / NbP3
  .Cells(5, 6).Value = P4 / NbP4
  .Cells(6, 6).Value = P5 / NbP5
  .Cells(7, 6).Value = P6 / NbP6
End With
End Sub

Restant à ton écoute.

Cordialement.
 
Re : moyenne avec critaire

Bon j'arrive un peu tard mais j'ai réussi à simplifier au maximum ma précédente macro. Tu as juste à lire les premiers commentaires et à modifier les valeurs selon tes désirs. Fais moi signe si tu as un soucis

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

NomdelaFeuille = "Feuil1"
'Désigne le nom de la feuille dans laquelle tu as saisi tes données
LigneValeur = 2
'Désigne le numéro de la ligne à laquelle tu as commencé à saisir tes données multiples (P1, P2, P1, P3....)
ColonneValeur = 1
'Désigne le numéro de la colonne à laquelle tu as commencé à saisir tes données multiples (P1, P2, P1, P3....)
LigneMoyenne = 2
'Désigne le numéro de la ligne à laquelle tu as commencé à saisir tes données uniques (P1, P2, P3...)
ColonneMoyenne = 4
'Désigne le numéro de la colonne à laquelle tu as commencé à saisir tes données uniques (P1, P2, P3...)
LigneResultat = 2
'Désigne le numéro de la ligne à laquelle tu veux que la macro saisisse tes moyennes
ColonneResultat = 6
'Désigne le numéro de la colonne à laquelle tu veux que la macro saisisse tes moyennes

Limite = ThisWorkbook.Sheets(NomdelaFeuille).Cells(LigneValeur, ColonneValeur).End(xlDown).Row

j = LigneMoyenne

While Cells(j, 4) <> ""

    Somme = 0
    Compteur = 0
    
For i = LigneValeur To Limite

        If Cells(i, ColonneValeur) = Cells(j, ColonneMoyenne) Then
            If Not IsEmpty(Cells(i, ColonneValeur + 1)) Then
                Somme = Somme + Cells(i, ColonneValeur + 1)
                Compteur = Compteur + 1
            End If
        End If
        
        If Compteur <> 0 Then
            Cells(j, ColonneResultat) = Somme / Compteur
        Else
            Cells(j, ColonneResultat) = "Aucune valeur n'a été saisie pour " & Cells(j, ColonneMoyenne)
        End If
    
    Next
    
    j = j + 1

Wend

End Sub

Edit : La macro fait désormais la différence entre les cellules vides et les valeurs 0
 
- 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

Discussions similaires

Réponses
4
Affichages
265
Réponses
20
Affichages
1 K
Réponses
7
Affichages
812
Réponses
1
Affichages
712
Réponses
9
Affichages
886
Retour