Compter selon critère en VBA

toline

XLDnaute Nouveau
Bonjour,

Je cherche actuellement à créer une macro qui me permettrait de compter le nombre de lignes de la colonne K répondant aux critères:
- soit égal à 31
- soit supérieur à 31 et inférieur à 180

Je sais que je pourrais le faire simplement avec une formule Excel mais la demande va évoluer dans peu de temps donc j'anticipe.

J'ai donc créé le code suivant :

Code:
Sub MAJGlobal()
Dim cpt As Long, DernLigne As Long, i As Long 'déclaration des variables
DernLigne = Sheets("Data").Range("K1048576").End(xlUp).Row 'stocke dans la variable DernLigne le n° de la dernière ligne non vide
For i = 1 To DernLigne
If Cells(i, 11).Value = 31 Then 'Si la cellule (ième ligne, 11eme colonne) égal à 31 alors
cpt = cpt + 1 ' on ajoute 1 au compteur
End If ' sinon on fait rien et on continue
Next ' i suivant...
Sheets("Global").Range("C4").Value = cpt


For i = 1 To DernLigne
If Cells(i, 11).Value > 31 And Cells(i, 11).Value < 180 Then 'Si la cellule (ième ligne, 11eme colonne) supérieur à 31 et inférieur à 180
cpt = cpt + 1 ' on ajoute 1 au compteur
End If ' sinon on fait rien et on continue
Next ' i suivant...
Sheets("Global").Range("D4").Value = cpt

End Sub

Cependant, il semble ne pas marcher car il me retourne en C4 et en D4 les valeurs 0 alors qu'il devrait me retourner plusieurs centaines...
Je pense ne pas avoir réaliser les deux boucles comme il faut (je débute en VBA). Pouvez-vous m'indiquer mes erreurs?

Merci beaucoup pour votre aide.
 

pierrejean

XLDnaute Barbatruc
Re : Compter selon critère en VBA

Bonjour toline

A tester:
remplacer
If Cells(i, 11).Value = 31 Then 'Si la cellule (ième ligne, 11eme colonne) égal à 31 alors
par
If Sheets("Data").Cells(i, 11).Value = 31 Then 'Si la cellule (ième ligne, 11eme colonne) égal à 31 alors

et si resultat faire idem pour
If Cells(i, 11).Value > 31 And Cells(i, 11).Value < 180 Then 'Si la cellule (ième ligne, 11eme colonne) supérieur à 31 et inférieur à 180
 

toline

XLDnaute Nouveau
Re : Compter selon critère en VBA

Bonjour pierrejean

Merci beaucoup pour la réponse. Cela a bien marché pour les lignes égales à 31.

Code:
If Sheets("Data").Cells(i, 11).Value = 31 Then 'Si la cellule (ième ligne, 11eme colonne) égal à 31 alors

Par contre, pour
Code:
If Cells(i, 11).Value > 31 And Cells(i, 11).Value < 180 Then 'Si la cellule (ième ligne, 11eme colonne) supérieur à 31 et inférieur à 180
, cela me retourne le même resultat qu'en C4, à savoir le compte de lignes égales à 31.

Est-ce que cela ne pourrait pas venir du fait que j'utilise la même variable? (je débute).

Merci encore et un bon week-end

Toline
 

pierrejean

XLDnaute Barbatruc
Re : Compter selon critère en VBA

Re

il fallait faire idem c'est a dire:
remplacer
If Cells(i, 11).Value > 31 And Cells(i, 11).Value < 180 Then 'Si la cellule (ième ligne, 11eme colonne) supérieur à 31 et inférieur à 180
par
If Sheets("Data").Cells(i, 11).Value > 31 And Sheets("Data")Cells(i, 11).Value < 180 Then 'Si la cellule (ième ligne, 11eme colonne) supérieur à 31 et inférieur à 180
 

BigDaddy154

XLDnaute Junior
Re : Compter selon critère en VBA

Bonsoir tout le monde,

un essai à tester :
Code:
Sub MAJGlobal()
drligne = Sheets("Data").Range("k" & Rows.Count).End(xlUp).Row
Sheets("Global").Range("c4:d4").ClearContents
For i = 1 To drligne
    valeur = Sheets("Data").Range("k" & i)
    Select Case valeur
    Case Is = 31
        Sheets("Global").Range("c4") = Sheets("Global").Range("c4") + 1
    Case 32 To 179
        Sheets("Global").Range("d4") = Sheets("Global").Range("d4") + 1
    End Select
Next i
End Sub

Cordialement
 
Dernière édition:

Discussions similaires

Réponses
0
Affichages
137
Réponses
7
Affichages
328

Statistiques des forums

Discussions
312 113
Messages
2 085 425
Membres
102 886
dernier inscrit
eurlece