Macro pour compter le nombre d'apparence d'un caractère

Yasn10 Messages postés 26 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour ,

Je souhaiterai avoir une macro qui calcule le nombre de fois qu'un mot "NT" figure chaque mois , sachant qu'il y a des cellules vides dans la colonnes des mois ,

Colonne F//Colonne G
01/2016------NT
vide-----------
vide-----------
02/2016------NT
vide-----------NT
vide-----------
02/2016------NT
vide-----------
vide-----------
03/2016------NT
vide
vide
03/2016------NT
vide-----------NT
vide-----------NT
'
'
'
J'ai essayé pas mal de formules et macros mais ça ne me calcule que les NT qui correspondent à une cellule remplie "02/2016" par exemple

Merci et Bonne journée/Soirée à tout le monde

2 réponses

    1. Yasn10 Messages postés 26 Statut Membre
       
      Merci ! je l'ai essayé , elle fonctionne bien , mais il faut à chaque fois changer de plage ... il y a plusieurs tableaux ..
      0
    2. Utilisateur anonyme
       
      Ha si tu ne donnes pas tous les éléments.
      Là faut attendre un meilleur que moi en VBA
      0
    3. Yasn10 Messages postés 26 Statut Membre > Utilisateur anonyme
       
      Merci !
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Yasn10 Messages postés 26 Statut Membre
       
      bonsoir, peux-tu donner tous les éléments?
      0
    5. Yasn10 Messages postés 26 Statut Membre
       
      Bonjour,

      Il s'agit d'un tableau de 1500 lignes et je cherche à compter le nombre de fois les "NT" figure pour chaque mois, le problème c'est que dans la colonnes des mois il y a des cellules vides , mais qui correspondent aussi à des cellules où il y a le "NT"
      0
  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour,
    Essayez ceci
    https://www.cjoint.com/c/GLkizyyIuhw
    J'utilise les colonnes J et K pour les résultats.
    Cdlt
    1
    1. Yasn10 Messages postés 26 Statut Membre
       
      Merci beaucoup !!
      j'ai testé mais on me demande de définir la variable "i"

      Sub Comptage()
      Dim DerLig As Long, DerLigFil As Long, L As Long
      Application.ScreenUpdating = False
      Columns("J:K").ClearContents 'on efface les précédents résultats

      DerLig = [G100].End(xlUp).Row
      'On récupère la liste des mois a l'aide d'un filtre avancé que l'on colle en colonne J
      Range("F1:F" & DerLig).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
      DerLigFil = [F100].End(xlUp).Row 'Dernière Ligne du filtre

      'on effectue un tri ascendant pour exclure les cellules vides
      Range("J2:J" & DerLigFil).Select
      ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
      ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("J2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      With ActiveWorkbook.Worksheets("Feuil1").Sort
      .SetRange Range("J2:J" & DerLigFil)
      .Header = xlNo
      .Apply
      End With
      DerLigFil = [F100].End(xlUp).Row 'Dernière Ligne du filtre après triage
      For i = 2 To DerLigFil
      mois = Cells(i, "J")
      'on recherche dans la colonne F le mois à traiter
      Set C = Columns("F").Find(mois, LookIn:=xlValues)
      L = C.Row
      Do While L <= DerLig
      If Cells(L, "F") <> "" And Cells(L, "F") <> mois Then GoTo MoisSuivant 'on est sur un autre mois, donc la recherche est finie pour le mois à traiter
      If Cells(L, "G") = "NT" Then Cells(i, "K") = Cells(i, "K") + 1
      L = L + 1
      Loop
      MoisSuivant:
      Next i
      [K1].Select
      End Sub
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Yasn10 Messages postés 26 Statut Membre
       
      bonjour, je pense qu'il suffit d'ajouter
       ,i as long
      à la fin de la ligne commençant par
      Dim
      0
    3. Yasn10 Messages postés 26 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Mercii ! j'ai déjà fait ça mais toujours le meme problème, ça fonctionnes sur Excel 2007 mais pas sur 2013 je ne comprend pas pourquoi ..
      0
    4. Frenchie83 Messages postés 2254 Statut Membre 339 > Yasn10 Messages postés 26 Statut Membre
       
      Bonjour,
      Puisqu'il y a au moins 1500 lignes, dans un premier temps, il faut remplacer toutes les valeurs à 100 par 10000 pour être sûr de balayer toutes les lignes. Pas dit que cela soit suffisant pour régler votre problème, mais il faut bien commencer par quelque chose.
      Sub Comptage()
          Dim DerLig As Long, DerLigFil As Long, L As Long, I as long
          Application.ScreenUpdating = False
          Columns("J:K").ClearContents 'on efface les précédents résultats
          
          DerLig = [G10000].End(xlUp).Row
          'On récupère la liste des mois a l'aide d'un filtre avancé que l'on colle en colonne J
          Range("F1:F" & DerLig).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
          DerLigFil = [F10000].End(xlUp).Row 'Dernière Ligne du filtre
          
          'on effectue un tri ascendant pour exclure les cellules vides
          Range("J2:J" & DerLigFil).Select
          ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
          ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("J2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          With ActiveWorkbook.Worksheets("Feuil1").Sort
              .SetRange Range("J2:J" & DerLigFil)
              .Header = xlNo
              .Apply
          End With
          DerLigFil = [F10000].End(xlUp).Row 'Dernière Ligne du filtre après triage
          For i = 2 To DerLigFil
              mois = Cells(i, "J")
              'on recherche dans la colonne F le mois à traiter
              Set C = Columns("F").Find(mois, LookIn:=xlValues)
              L = C.Row
              Do While L <= DerLig
                  If Cells(L, "F") <> "" And Cells(L, "F") <> mois Then GoTo MoisSuivant 'on est sur un autre mois, donc la recherche est finie pour le mois à traiter
                  If Cells(L, "G") = "NT" Then Cells(i, "K") = Cells(i, "K") + 1
                  L = L + 1
              Loop
      MoisSuivant:
          Next i
          [K1].Select
      End Sub
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Yasn10 Messages postés 26 Statut Membre
       
      on continue à te demander de définir la variable "i" ?
      0