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. 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)
  2. 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)
  3. 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 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. 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. 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. 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)