Comtage de lignes dans excel vba

Bonjour,
Je suis débutant en vba et je voudrais faire une boucle qui me permet de compter combien de fois un chiffre est présent dans une série de chiffres.
Plus précisément:
Dans la colonne A j'ai environ 3000 valeurs qui possèdent un des 100 choix possibles (choix1, choix 2, choix 3 etc..). Je voudrais faire une macro qui me permettra de calculer combien il y a t-il de valeur pour chaque choix.
Je voudrais que le résultat s'affiche dans la colonne B, de B1 jusqu'à B100.

Merci par avance de votre aide

4 réponses

  1. Bonjour,
    Pourquoi pas simplement avec une fonction :
    en [B1] =NB.SI(A:A;"Choix 1")
    en [B2] =NB.SI(A:A;"Choix 2")
    ............
    en [B100] =NB.SI(A:A;"Choix 100")

    1. J'ai pensé à cette solution, mais dans ce cas je dois rataper à la main 100 fois le choix et j'ai peur de ne pas omettre qqch.
  2. Contributeur
    Bonjour,

    Cela se fait En 5 minutes avec un Tableau Croisé Dynamique sans se prendre la t^te avec des formules et n'importe quel texte dans la colonne A

    mais si on tient vraiment à une macro (pourquoi?... avant de penser Macro, penser XL)
    en voici une pour le fun vite fait sur le gaz

    Sub recenser_choix() 
    Dim D_choix As Object, plage As Range 
    Dim derlig As Integer, cptr As Integer 
    Dim T_in(), uniq(), T_nbre(0 To 99, 0 To 1) 
    
    Application.ScreenUpdating = False 
    Set D_choix = CreateObject("scripting.dictionary") 
    derlig = Columns("A").Find("*", , , , , xlPrevious).Row 
    Set plage = Range("A1:A" & derlig) 
    T_in = Application.Transpose(plage.Value) 
    
    For cptr = 1 To derlig 
         If Not D_choix.exists(T_in(cptr)) Then D_choix.Add T_in(cptr), "" 
    Next 
    uniq = D_choix.keys 
    For cptr = 0 To UBound(uniq) 
         T_nbre(cptr, 0) = uniq(cptr) 
         T_nbre(cptr, 1) = Application.CountIf(plage, uniq(cptr)) 
    Next 
    
         Range("B1:C100") = T_nbre 
    End Sub 
    


    Michel