[résolu] calcul en macro sur une plage avec 2 conditions

akene

XLDnaute Nouveau
Bonjour à tous,

Je débute avec les macros et là je tourne franchement en rond...
J'ai trois colonnes avec en A des noms de structures, en B des villes et en C des participants.
J'aimerais arriver à calculer, via une macro, pour chaque structure, calculer le total de participants de chaque ville.

Dans mon exemple :
Pour la structure A, on aurait :
Nancy -> 140
Strasbourg-> 97
Brest -> 142

etc... pour B

J'ai essayé avec une boucle, avec evaluate et sumporduct, j'arrive avec un critère ("A" toute ville confondue) par exemple mais pas avec deux...

Merci d'avance pour votre aide et vos lumière !
 

Pièces jointes

  • structure_ville_participant.xlsm
    12.8 KB · Affichages: 38
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : calcul en macro sur une plage avec 2 conditions

Salut akene et le forum
Je débute avec les macros
Bien qu'on puisse faire la même chose en formule, un exemple de macro :
Code:
Sub test()
'Déclarations =====================================================
Dim Cel As Range, X As Long, Flag As Boolean, St_Msg As String
Dim Tab_Var() 'tableau vide
'Initialisation de tableau
ReDim Tab_Var(2, 0)
'tableau = Tab_Var(0, 0) / Tab_Var(1, 0) / Tab_Var(2, 0)
'Programme ========================================================
For Each Cel In Range(Cells(2, "A"), Cells(Rows.Count, "A").End(xlUp))
' pour chaque cellule de A2 à dernière non vide en A
    If Cel <> "" Then
    'si elle n'est pas vide
        Flag = True
        'Flag à Vrai
        For X = 0 To UBound(Tab_Var, 2)
        'Pour x=0 à limite supérieure du 2me indice
            If Tab_Var(1, X) = Cel Then
            'si le tableau = cellule, alors (la structure existe)
                Flag = False
                'Flag à Faux
                Exit For
                'Sortir de la boucle
            End If
        Next X
        If Flag Then
        'si Flag = vrai alors (la structure n'existe pas)
            ReDim Preserve Tab_Var(2, X)
            'redimensionner le tableau en conservant ses valeurs, à l'indice limite + 1
            Tab_Var(1, X) = Cel
            'la structure est mise dans l'indice X du du 1er indice
        End If
        Tab_Var(2, X) = Tab_Var(2, X) + Cel.Offset(0, 2)
        'additionner le 2me indiceavec la cellule située à 2 colonne,0 ligne de la cellule
    End If
Next Cel
For X = 1 To UBound(Tab_Var, 2)
'Pour x=1 à limite supérieure du 2me indice
    St_Msg = St_Msg & Chr(13) & Tab_Var(1, X) & " = " & Tab_Var(2, X)
    'st_msg= valeur précédente + retour ligne + structure + " = " + total de la structure
Next X
MsgBox St_Msg
'afficher le message
End Sub
Comme je l'ai commentée, je n'irais pas plus loin
Attention, si tu déclares un tableau directement, il est figé => je le déclare juste, puis je le fixe avec redim. Mais seul le dernier indice peut être modifié (enfin sur Excel 2003 et précédent)
A+
 

akene

XLDnaute Nouveau
Re : calcul en macro sur une plage avec 2 conditions

Bonjour Gorfael
Merci pour ta réponse !
J'avoue que je n'y comprend rien et je ne pensais pas que ce serait aussi complexe.
Je me disais qu'on pourrait faire un espèce de sommeprod ou quelque chose comme ça...
Bon là il est tard mais je vais essayer de décortiquer tout cela...
Merci !
 

akene

XLDnaute Nouveau
Re : calcul en macro sur une plage avec 2 conditions

Alors finalement, j'ai trouvé quelque chose de plus simple, grace à Autofilter, je filtre les plages en fonction des critères et après je calcule la somme :

Code:
With Worksheets("Feuil1")
Range("A1").AutoFilter Field:=1, Criteria1:="A" 
Range("A1").AutoFilter Field:=2, Criteria1:="Nancy" 
MsgBox Application.WorksheetFunction.Subtotal(9, Columns(3))
End With
End Sub

Merci encore pour votre aide !
 

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 358
Membres
102 874
dernier inscrit
Petro2611