[vba et excel] Compter avec condition

Bonjour,

Je cherche en vba a compter avec condition. J'ai essayé ceci :

Sub CommandButton7_Click()
Sheets("final_par_NNO").Select
Range("O130").Select
ligne = "140"
For i = 125 To ligne
suivante = i + 1
If (CountIf("C2:C1037", "O" & suivante) > 0) Then
'Cells(i, 1).Interior.ColorIndex = 6
'Cells(suivante, 1).Interior.ColorIndex = 6
'End If
Next
End Sub

Mais ca ne fonction pas, auriez vous une idée ?

Erreur de compilation
Sub ou function non défini

Merci

14 réponses

  1. :o)

    Les valeurs se trouvent entre la ligne 125 et 140 de la colonne O.

    Sub CommandButton7_Click() 
    Dim ws As Worksheet    'Objet feuille 
    Dim ligne As Long 
    Dim plage As Range 
    Dim Cel 
    Dim i As Integer 
    Dim suivante As Integer 
    
    Set ws = Worksheets("final_par_NNO") 
    Set plage = ws.Range("C2:C1037")  
    
    ligne = 140 
    
    For i = 125 To ligne 
    suivante = i + 1 
       For Each cel In plage 
            If ws.Range("O" & i).Value = cel.Value Then 
                 ws.Cells(i, 1).Interior.ColorIndex = 6 
                 ws.Cells(suivante, 1).Interior.ColorIndex = 6 
            End If 
       Next cel 
    Next i 
    
    End Sub


    ;o)
    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    1
    1. Ton End if est mis en commentaire et il faut mettre Next i
      0
      1. Erreur de copier coller de code source ;)

        Voici ce que j'ai mais qui fait le même résultat

        Sub CommandButton7_Click()
            Sheets("final_par_NNO").Select
            Range("O130").Select
            ligne = "140"
            For i = 125 To ligne
                suivante = i + 1
                If (CountIf("C2:C1037", "O" & suivante) > 0) Then
                    'Cells(i, 1).Interior.ColorIndex = 6
                    'Cells(suivante, 1).Interior.ColorIndex = 6
                End If
            Next i
        End Sub
        0
        1. Et en déclarant tes variables ça marche ?
          dim ligne as integer
          dim suivante as integer


          Et ta boucle s'étends sur quelle plage de cellule ?
          Je n'arrive pas à voir.
          0
          1. Bonjour,

            1) ligne = 140 et non ligne = "140"

            2) Sheets("final_par_NNO").Select et Range("O130").Select ne servent à rien.
            Il est préférable de faire
            Dim ws As Worksheet
            
            Set ws = Worksheets("final_par_NNO")

            Et ensuite :
            ws.Range("C2:C1037")
            ws.Cells(i, 1).Interior.ColorIndex = 6
            'etc ...


            3) Sur quelle ligne apparait le message d'erreur ?

            ;o)
            0
            1. Je veux voir si dans la plage c2:c1037, il y a la valeur contenu dans O + la ligne

              Je pense que c'est countif qui posse problème, j'ai toujours le message d'erreur

              Erreur de compilation
              Sub ou function non défini

              Merci
              0
              1. Ton code Polux31 ne permet pas ce que je veux ou je ne le comprend pas :s
                0
                1. heuuu ... je n'ai donné aucun code ??? C'est normal que ça ne fonctionne pas ^^

                  J'ai juste fait 2 remarques. Et posé une question.
                  0
              2. Oui, :D

                la réponse pour l'erreur, c'est le countif qui est surligné avec le message :
                Erreur de compilation
                Sub ou function non défini

                Merci
                0
                1. Sub CommandButton7_Click()
                  
                  dim i as integer
                  
                      For i = 2 To 1037
                          If  cells(3, i) = cells(15 , i) Then
                              Cells(1, i).Interior.ColorIndex = 6 
                          End If
                      Next i
                  
                  End Sub
                  


                  Est-ce ceci ce que tu souhaites ?
                  0
                  1. Pas tout à fait, car il faut que ca cherche dans toute la colonne C pas forcement sur la meme ligne et c'est la que je bloque !! :s

                    Merci de votre aide
                    0
                    1. peut être comme ça, mais j'avoue n'avoir pas très bien compris ce que tu cherches exactement à faire.

                      Sub CommandButton7_Click()
                      Dim ws As Worksheet    'Objet feuille
                      Dim ligne As Long
                      Dim palge As Range
                      dim cel
                      Dim suivant As Long
                      Dim cpt As Long
                      
                      Set ws = Worksheets("final_par_NNO")
                      Set plage = ws.Range("C2:C1037")   
                      
                          ligne = 140
                          For i = 125 To ligne
                              suivante = i + 1
                              For each cel In plage
                                   If cel.Value = "O" & suivant Then cpt = cpt + 1
                              Next cel
                                   If cpt > 0 Then
                                        ws.Cells(i, 1).Interior.ColorIndex = 6
                                        ws.Cells(suivante, 1).Interior.ColorIndex = 6
                                    End If
                          Next i
                      End Sub


                      Le traitement risque d'être long..

                      ;o)
                      0
                  2. Je pense que ce n'est pas très loin du résultat que j'attends sauf que là, j'crois qu'on c'est pas compris lol

                    If cel.Value = "O" & suivant Then cpt = cpt + 1

                    Ou je ne comprend pas.

                    Voici avec un exemple, ca sera peut etre plus simple
                    Dans la plage c2:c1037, j'ai la valeur en c50 -> 123456789

                    Maintenant, en O133, j'ai également cette valeur 123456789

                    Je voudrais, grâce à la fonction qu'on est en train d'établir, faire en sorte que la cellule O133 ressorte avec un fond jaune car elle existe dans la plage c2:c1037

                    Et donc, il faut que je fasse ca pour chaque ligne de la colonne O.

                    Je pense que c'est plus clair ;)

                    Merci
                    0
                    1. Tu veux comparer 2 cellules de la même ligne, l'une en colonne C et l'autre en colonne O.

                      C'est bien ça ?

                      Parce que à la base le sujet c'est : Je cherche en vba a compter avec condition ...

                      0
                      1. Non lol

                        Une valeur en O que je recherche dans la colonne C
                        0
                        1. Type incompatible sur cette ligne

                          If ws.Range("O" & i).Value = Cel.Value Then
                          0
                          1. J'ai testé chez en mélangeant des données numériques et alpha et je n'ai pas ce genre de message.

                            As-tu des cellules fusionnées dans une des 2 colonnes ?
                            0
                          2. Non, aucune fusion de cellule :s
                            0
                          3. tu as bien copier coller l'intégralité du code ?

                            Vérifie aussi que le nom de la feuille correspond bien avec le code.

                            Sinon, je ne vois pas trop ... :o(
                            0
                          4. Oui, tout collé ce que tu m'as donné. Je viens de le refaire pour voir, toujours la même erreur sur la même ligne de code. :(
                            0
                          5. On va tenter quelque chose:

                            Remplace cette ligne If ws.Range("O" & i).Value = cel.Value Then par

                            If CStr(ws.Range("O" & i).Value) = CStr(cel.Value) Then

                            Sans trop de conviction ...
                            0