[vba et excel] Compter avec condition

Utilisateur anonyme -  
 Utilisateur anonyme -
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. Polux31 Messages postés 7219 Statut Membre 1 204
     
    :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
  2. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
     
    Ton End if est mis en commentaire et il faut mettre Next i
    0
  3. Utilisateur anonyme
     
    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
  4. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  7. Utilisateur anonyme
     
    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
  8. Utilisateur anonyme
     
    Ton code Polux31 ne permet pas ce que je veux ou je ne le comprend pas :s
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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
  9. Utilisateur anonyme
     
    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
  10. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
     
    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
  11. Utilisateur anonyme
     
    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. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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
  12. Utilisateur anonyme
     
    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
  13. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  14. Utilisateur anonyme
     
    Non lol

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

    If ws.Range("O" & i).Value = Cel.Value Then
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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. Utilisateur anonyme
       
      Non, aucune fusion de cellule :s
      0
    3. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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. Utilisateur anonyme
       
      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. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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