Macro Somme à condition

Bonjour,

J'ai un léger problème avec la macro ci-dessous. Je débute vraiment en VBA et il est possible que j'ai fait une erreur grotesque! Comme indiqué par les notes, ce que je cherche à faire c'est faire la somme (variable EmRT) des cases dans la colonne Emotion.RT , cases pour lesquels la valeurs est égale à "Surprise" dans la colonne Emotion_Contexte. Il n'y a pas de bug qd je lance a macro mais le résultat est toujours 0.... (ce qui m'a mis la puce à l'oreille!!!).

Est-ce que quelqu'un aurait une idée d'où ça coince?

Par ailleurs, qu'est ce que je devrais écrire pour EmRT si jamais je souhaitais obtenir la moyenne de ces valeurs? Ou encore, si je veux savoir combien de ces valeurs sont différentes de zéro ou non nul?

Merci beaucoup à ceux qui prendront le temps de me lire et de m'aider.

Alexbej

Sub ExtractionDonnees2()

i = 1

   'Chercher colonne Emotion_Contexte

   While (Sheets(1).Cells(1, i) <> "")
   If (Sheets(1).Cells(1, i) = "Emotion_Contexte") Then

      j = 1
      EmRT = 0

            'Chercher dans cette colonne les cases Surpises

            If (Sheets(1).Cells(j, i) = "Surprise") Then

            k = 1

                        'Prendre les valeurs dans Emotion.RT associé aux Surprises

                        While (Sheets(1).Cells(1, k) = "Emotion.RT")

                        'En faire la somme

                        EmRT = EmRT + Sheets(1).Cells(j, k)

                        Wend

                        k = k + 1

           End If

           j = j + 1

   End If

i = i + 1

Wend

Sheets(2).Cells(1, 1) = EmRT

End Sub

Bonjour

Si j'ai bien compris ton problème

Une autre manière

Option Explicit

Sub ExtractionDonnees2()
Dim Cel As Range
Dim Colonne As Integer

  With Sheets(1)
    Set Cel = .Rows(1).Find(what:="Emotion_Contexte", LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      Colonne = Cel.Column
      Set Cel = .Rows(1).Find(what:="Emotion.RT", LookIn:=xlValues, lookat:=xlWhole)
      If Not Cel Is Nothing Then
        Sheets(2).Cells(1, 1) = Application.SumIf(.Columns(Colonne), "Surprise", .Columns(Cel.Column))
      Else
        MsgBox "Colonne ""Emotion.RT"" introuvable"
      End If
    Else
        MsgBox "Colonne ""Emotion_Contexte"" introuvable"
    End If
  End With
End Sub

Bonjour Banzai64

Merci de ta réponse et de ton aide. C'est effectivement cela que je souhaitais! Alors, juste quelques questions à propos de ta macro:

- si je veux faire la moyenne, il me suffit de mettre: Application.AverageIf à la place de Application.SumIf, c'est bien ça?

- que dois je faire si je souhaite dénombrer le nombre de valeurs non-nuls (l'équivalent du NB.SI) ?

- Enfin, est il possible d'introduire d'autres conditions? Ici je souhaitais que la colonne Emotion_Contexte contienne le mot "Surprise". Serait-il par exemple possible d'établir en plus que la colonne "Facilité" soit égale à 1 ou 3 (ou encore différentes de 5)?

Merci beaucoup pour ton aide.

Bien cordialement,

Alex

bonjour

alexbej a écrit :

- que dois je faire si je souhaite dénombrer le nombre de valeurs non-nuls (l'équivalent du NB.SI) ?

Équivalent c'est COUNTA(Plage)

Pour le reste je pense que ce sont des fonctions spécifiques aux versions supérieures à XL 2003 donc je ne pourrai pas t'aider

Désolé

Merci de ta réponse et de ton aide. Après de longues tentatives, j'ai réussi à mettre plusieurs conditions. En voici la macro:

Option Explicit

Sub ExtractionDonnees2()

Dim Cel As Range
Dim Cel_1 As Range
Dim Colonne As Integer
Dim Colonne_1 As Integer

  With Sheets(1)

    Set Cel = .Rows(1).Find(what:="Emotion_Contexte", LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then

         Set Cel_1 = .Rows(1).Find(what:="Emotion.ACC", LookIn:=xlValues, lookat:=xlWhole)
         If Not Cel_1 Is Nothing Then

            Colonne = Cel.Column
            Colonne_1 = Cel_1.Column
            Set Cel = .Rows(1).Find(what:="Emotion.RT", LookIn:=xlValues, lookat:=xlWhole)

                If Not Cel Is Nothing Then

                Sheets(3).Cells(4, 3) = Application.AverageIfs(.Columns(Cel.Column), .Columns(Colonne), "Colère", .Columns(Colonne_1), "1") 

                'Sheets(3).Cells(4, 3) = Application.SumIf(.Columns(Colonne), "Surprise", .Columns(Cel.Column))

                Else
                MsgBox "Colonne ""Emotion.RT"" introuvable"
                End If

            Else
            MsgBox "Colonne ""Emotion.ACC"" introuvable"
            End If

    Else
        MsgBox "Colonne ""Emotion_Contexte"" introuvable"
    End If
  End With
End Sub

Bonjour

C'est très bien que tu ais trouvé une solution, la fonction AverageIfs je ne la connais pas

Quand tu mets du code utilises les balises Code (Juste au dessus de la fenêtre d'édition, à gauche)

balise code v001
Rechercher des sujets similaires à "macro somme condition"