Compter les cellules

earvin -  
 earvin -
Bonjour,

Voici mon petit problème. J'essaye de compter des cellules dans la colonne A en fonction de la valeur dans la colonne B.
Plus précisément, voila à quoi ressemble ma feuille:
     A       B
1  100     1
2  100     1
3  100  
4  100     1
5  101     1
6  101
7  101     1


Et voila mon code actuel. Il fonctionne très bien pour me retourner le résultat avec la valeur 100.
Mais impossible de faire compter le nombre de valeur 101, 102 etc...lorsque j'ai 1 dans la colonne B.

Sub Macro1()
Thisbook = ActiveWorkbook.Name

i = 1
j = 100
total_a_1 = 0

While Workbooks(Thisbook).Sheets("Feuil1").Range("A" & i).Value <> ""
valeur_cellule = Workbooks(Thisbook).Sheets("Feuil1").Range("A" & i).Value
valeur_1 = Workbooks(Thisbook).Sheets("Feuil1").Range("B" & i).Value

If valeur_cellule = j And valeur_1 = 1 Then
total_a_1 = total_a_1 + 1
Workbooks(Thisbook).Sheets("Feuil1").Range("C" & 1).Value = total_a_1
End If

i = i + 1

Wend
End Sub

Merci pour vos réponses

2 réponses

Polux31 Messages postés 7219 Statut Membre 1 204
 
bonjour,

Ce n'est pas aussi simple que ça.
Il faut stocker dans un tableau les éléments qui correspondent à la condition (col B = 1) et un autre tableau avec 1 élément unique de la colonne A:

Sub Macro1()
Dim lig As Long     'indice pour parcourir les lignes
Dim myTab()         'Tableau de valeur de la colonne A avec 1 dans col B
Dim tabVal()        'Tableau valeur unique
Dim ind As Long     'indice de tableau
Dim indVal As Long  'indice de tableau
Dim ws As Worksheet 'objet worksheet
Dim i As Long       'indice de boucle
Dim j As Long       'indice de boucle
Dim cpt As Long     'compteur de valeur

    'Déclaration de l'objet worksheet
    Set ws = ThisWorkbook.Worksheets("Feuil1")
    'Initialisation de la première ligne à tester
    lig = 2
    'Initialisation des tableaux
    ReDim myTab(ind)
    ReDim tabVal(indVal)
    'Parcours la feuille
    With ws
        While .Range("A" & lig).Value <> ""
            'si le colonne B = 1 Alors on met la valeur de A dans le tableau
            If .Range("B" & lig).Value = 1 Then
                ReDim Preserve myTab(ind)
                myTab(ind) = .Range("A" & lig).Value
                ind = ind + 1
                If doesExist(.Range("A" & lig).Value, tabVal()) = False Then
                    ReDim Preserve tabVal(indVal)
                    tabVal(indVal) = .Range("A" & lig).Value
                    indVal = indVal + 1
                End If
            End If
        'on passe à la ligne suivante
        lig = lig + 1
        Wend
        
    lig = 2
    'On affiche le résultat
    For i = LBound(tabVal()) To UBound(tabVal())
        'initialisation du compteur à zéro
        cpt = 0
        'On compte le nombre de fois l'élément tabVal(j) dans le tableau myTab()
        For j = LBound(myTab()) To UBound(myTab())
            If myTab(j) = tabVal(i) Then cpt = cpt + 1
        Next j
        'on rapporte les valeurs dans la feuille Excel
        .Range("D" & lig).Value = tabVal(i)
        .Range("E" & lig).Value = cpt
        lig = lig + 1
    Next i
    
    End With
    
    'on libère la mémoire et l'objet
    Set ws = Nothing

End Sub

'Fonction qui vérifie que l'on ne met pas 2 fois le même élément dans le tableau
Private Function doesExist(ByVal str As Variant, ByRef mTab()) As Boolean
Dim i As Long

    For i = LBound(mTab()) To UBound(mTab())
        If mTab(i) = str Then
            doesExist = True
            Exit Function
        End If
    Next i
    
    doesExist = False
    
End Function


Voilà

;o)
2
earvin
 
Merci Ploux31
Grâce à ta macro, j'ai réussi à résoudre mon problème.
0