Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Macro pour moyenne conditionnelle

  • Initiateur de la discussion Initiateur de la discussion CHLOE90
  • 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 !

CHLOE90

XLDnaute Junior
Bonjour le forum,
J'ai bien cherché, j'ai trouvé des choses approchantes à mon problème, mais pas spécifiquement, du coup je me décide à vous écrire.
J'aurais besoin d'une macro "évènementielle" en tous cas c'est comme ça que certains sur les forum les appelle pour traiter une moyenne conditionnelle, avec deux critères.
J'ai mis directement mes explications ainsi qu'un exemple de ce que je souhaiterais dans la feuille du fichier excel en annexe.
D'avance un grand merci à celui ou celle qui pourra s'y pencher.
Chloé.
 

Pièces jointes

Bonjour.
Code dans le module de la feuille :
VB:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Nom, TDon(), L As Long, Somme As Double, Nbr As Long
If Target.Column <> 3 Or Target.Row = 1 Then Exit Sub
Nom = Target.Value
TDon = [C2:E2].Resize([C1000000].End(xlUp).Row - 1).Value
For L = 1 To UBound(TDon, 1)
   If TDon(L, 1) = Nom And TDon(L, 2) = "rouge" Then
      Somme = Somme + TDon(L, 3): Nbr = Nbr + 1: End If: Next L
If Nbr = 0 Then Nbr = 1
MsgBox Nom & " :  " & "Moyenne = " & Int(10000 * Somme / Nbr + 0.5) / 100 & "%", _
   vbInformation, "Rouges"
End Sub
 
Bonjour CLHOE, Dranreb 🙂

Une petite modif qui prend en charge la forme au lieu du msgbox. Il fut renommer la forme "monshape" .

VB:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Nom, TDon(), L As Long, Somme As Double, Nbr As Long, sh As Shape, result$
    If Target.Column <> 3 Or Target.Row = 1 Then Exit Sub
    Nom = Target.Value
    TDon = [C2:E2].Resize([C1000000].End(xlUp).Row - 1).Value
    For L = 1 To UBound(TDon, 1)
        If TDon(L, 1) = Nom And TDon(L, 2) = "rouge" Then
            Somme = Somme + TDon(L, 3): Nbr = Nbr + 1: End If: Next L
    If Nbr = 0 Then Nbr = 1

    Set sh = Me.Shapes("monshape")
    result = Nom & vbLf & vbLf & "Moyenne : " & Int(10000 * Somme / Nbr + 0.5) / 100 & "%"

    sh.TextFrame.Characters.Text = result

End Sub
 
- 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
8
Affichages
1 K
Réponses
5
Affichages
1 K
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…