[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. Type incompatible sur cette ligne

    If ws.Range("O" & i).Value = Cel.Value Then
    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 ?
    2. Non, aucune fusion de cellule :s
    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(
    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. :(
    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 ...
  2. :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. Non lol

      Une valeur en O que je recherche dans la colonne C
      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 ...

        1. 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
          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
            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)
          2. 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 ?
            1. 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
              1. Ton code Polux31 ne permet pas ce que je veux ou je ne le comprend pas :s
                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.
              2. 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
                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)
                  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.
                    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