Comtage de lignes dans excel vba

débutant_vba -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    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")

    0
    1. débutant_vba
       
      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.
      0
  2. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    Bonjour,
    Ou se trouve votre liste des choix ?
    Quelles sont les valeurs de ces choix..?

    Voir exemple : https://www.cjoint.com/?3Kgp3I3LCvR

    Salutations.
    Le Pingou
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0