Compter des cellules VBA

Bonjour,

En VBA, je cherche à compter les valeurs des cellules de I14 à L14 où la cellule = R
J'ai essayé COUNTIF mais ca bug tout le temps, je dois pas savoir m'en servir.

Qq'un pourrait m'aider ?

Merci

7 réponses

  1. Bonjour,

    Dim plage As Range
    Dim cel 
    Dim cpt As Integer
    
       Set plage = Worksheets(1).Range("I14:L14")
       For Each cel In plage
          If cel.Value = "R" Then cpt = cpt + 1
       Next cel
    
       MsgBox "Nb : " & cpt
    
       Set plage = Nothing   
    


    ;o)
    1. Super merci

      A tout hasard, sur une plage de 7 colonnes, c'est pas possible de savoir si 4 "R" se trouve à la suite ?
      1. Oui ça doit être possible, il suffit de faire la vérification dans la boucle :

        Dim plage As Range
        Dim cel 
        Dim cpt As Integer
        Dim NbR As Integer
        Dim Vrai As Boolean
        
           Set plage = Worksheets(1).Range("I14:P14")
           For Each cel In plage
              If cel.Value = "R" Then 
                  cpt = cpt + 1
                  NbR = NbR + 1
                  If NbR = 4 Then Vrai = True
              End If
              NbR = 0
           Next cel
        
           If Vrai = False Then
               MsgBox "Nb : " & cpt
           Else
               MsgBox "Nb : " & cpt & ", 4 R à la suite"
           End If
        
           Set plage = Nothing  


        ;o)
        1. Ah non, ca va pas, c'est pas 4 de suite, mais 4 à la suite (aligné :p)
          Tu vois ce que je veux dire
          Merci
          1. Bonjour,

            Effectivement je n'avais pas testé et ça ne fonctionne pas ^^
            J'ai compris qu'il faut 4 cellules consécutives horizontalement contenant "R":

            !  I  !  J  !  K  !  L  !  M  !  N  !  O  !  P  !   
            
               R           R     R     R     R            R


            Est ce bien ça ?

            Option Explicit   
            
            Private Vrai As Boolean   
            Private NbR As Integer   
            
            Sub test()   
            Dim plage As Range   
            Dim cel   
            Dim cpt As Integer   
            
            Set plage = Worksheets(1).Range("I14:P14")   
                For Each cel In plage   
                    If cel.Value = "R" Then   
                        cpt = cpt + 1   
                        If NbR < 4 Then cptR (1)   
                    Else   
                        If NbR <> 4 Then   
                            NbR = 0   
                        End If   
                    End If   
                   
                Next cel   
            
               If Vrai = False Then   
                   MsgBox "Nb : " & cpt   
               Else   
                   MsgBox "Nb : " & cpt & ", 4 R à la suite"   
               End If   
            
               Set plage = Nothing   
            End Sub   
            
            Sub cptR(ByVal str As Integer)   
            
                NbR = NbR + str   
                If NbR = 4 Then Vrai = True   
                   
            End Sub   
            


            «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
            Nicolas Boileau
            1. Ah oué, pas mal tout ca dit moi ;)
              En fait, je m'amuses a essayer de faire un puissance 4 pour comprendre le codage VBA et donc me former.

              J'ai bien compris comment tu faisais. Mais il reste encore des étapes comme la vérification en colonne, qui ne devrait pas etre trop compliqué et tester également dans les 2 diagonales.

              Si tu veux m'aider que j'avance sans faire n'importe quoi, je suis tout ouie ;)

              Merci beaucoup de ton implication.
              1. J'en avais fait pour mes enfants ... il y a bien longtemps ^^

                Je crois que pour la vérification j'avais utilisé un tableau.

                Si je peux t'aider, je le ferais volontiers dans la mesure du possible.

                ;o)
            2. Un tableau, de mémoire, tu te souviens comment tu gérais la chose ?
              Merci
              1. Chaque élément du tableau représente une case de jeu.
                Les cases était indexé de 1 à 100, le jeu faisait 10 cases par 10 cases
                Quand le joueur cliquait sur la 1ère case d'une colonne (par ex la 5), le programme testait tableau(5), tableau(15), tableau(25) jusqu'à tableau(95) ... et mettait le pion dans le dernier emplacement libre.
                Ensuite il y a des contrôles à faire par exemple en diagonal je faisais l'indice du tableau + 11 ou - 11 selon le cas pour vérifier si l'indice i + 11 était identique etc ...

                ;o)