VBA - Comptabiliser le nombre d’occurrence (texte)

Bonjour,

Je bloque depuis plusieurs jours sur une macro. J'ai eu une formation VBA il y a 3 semaines mais difficile lorsque l'on est lâché de se débrouiller tout seul. C'est pourquoi je sollicite votre aide car je suis encore "débutant".

J'aimerai automatiser la saisie d'un fichier que j'effectue fréquemment. Mais je ne parviens pas à lui faire faire ce que je souhaite : je souhaite calculer le nombre de fois qu'une cellule est complétée par la mention "Complété" dans la colonne d'un tableau sur un premier onglet. Puis calculer, parmi toutes les lignes du tableau, combien sont effectivement "Complété" (faire un % donc). La réponse doit être indiquée dans une cellule bien précise dans le second onglet.

La ou je bloque, c'est pour comptabiliser le nombre d’occurrence de "Complété" dans mon tableau. La variable Nbrens se calcule incorrectement (j'obtiens 100% au final) :

Sub Complete()

Dim nbligne As Long, compteur As Long
Dim Nbrens As Long, totrens As Long

Sheets("CONTROLE DES DONNEES TALENTS").Select
nbligne = Range("F1").End(xlDown).Row ' Nb de lignes dans le fichier, obtient 127
For compteur = 2 To nbligne ' Nb de lignes à traiter, ne pas prendre la première ligne (titre)
If Cells(nbligne, 7) = "Complété" Then ' Ne prendre en compte que les cellules "Complété"
Nbrens = Nbrens + 1 ' calcul nbr renseigné // ERREUR, car obtient 127
End If
Next
totrens = Nbrens / nbligne
Sheets("Progression").Select
Range("C4").Select 'référence absolue
ActiveCell.FormulaR1C1 = totrens

End Sub

Je ne vois pas comment je peux obtenir un 100% alors que j'interroge le contenu de la cellule, et que seules 11 cellules sur 127 ont bien "Complété" d'indiquées..

Merci à vous !

P.G

Bonjour,

Pour vous éviter les boucles, il y a les fonctions de feuille :

mavar = application.countif(range("G2:G" & nbligne), "Complété")

pour avoir le nombre de "Complété".

Ensuite, il vaut mieux calculer nbligne en partant du bas pour avoir plus de chances d'atterrir à la dernière ligne :

with sheets("???")
nbligne = .cells(.rows.count, 6).End(xlup).Row
end with

Mais vous savez, avec la formule :

=NB.SI(G:G;"Complété")/NB.SI(G:G;"<>")

dans votre cellule, le tour serait joué.

Cdlt,

Bonjour à tous,

et pour t'expliquer ton erreur :
If Cells(nbligne, 7) = "Complété"
ta variable de boucle est compteur, pas nbligne
eric

Merci grandement pour vos retours !

La formule suivante marche très bien :

mavar = application.countif(range("G2:G" & nbligne), "Complété")

Je pourrai en effet me passer de macro pour ceci, mais j'espère en faire quelque chose de beaucoup plus complet je ne suis qu'au début de mon projet .J'espère ne pas avoir été trop ambitieux :)

Par contre même en remplaçant "nbligne" par "compteur", pas de changement (enfin si j’obtiens 0% maintenant haha)

Encore merci !

Bonjour,

attention que vba est sensible aux majuscules/minuscules et accents bien sûr.
Il faut rester sur le countif mais tu dois trouver et comprendre ton erreur pour progresser.
eric

Merci pour ces infos :)

En m'inspirant des précédentes réponses, j'ai voulu aller plus loin et interroger mon tableau de la manière suivante :

Si la cellule en colonne F = PRIORITE 1, et la cellule en colonne G = Complété, alors compter le nombre d’occurrences (p1formationcomp)

J'ai essayé avec cette formule donc :

p1formcomp = Application.CountIf(Range("F2:F" & nbligne), "PRIORITE 1" And Range("G2:G" & nbligne), "Complété")

Mais cela ne fonctionne pas, j'ai un message "incompatibilité de type"

J'imagine que cela vient des parenthèse, pourtant elles semble ouvertes et fermées la ou elles doivent l'être...

Avez-vous une idée ?

Bonjour,

Dans ce cas, c'est la fonction countifs (NB.SI.ENS) qu'il vous faut :

p1formcomp = Application.CountIfs(Range("F2:F" & nbligne), "PRIORITE 1", Range("G2:G" & nbligne), "Complété")

Cdlt,

Bonjour,

Un grand merci, cela répond parfaitement à la question que je posais !

Des fois sa parait tout bête pour des gens qui ont l’œil mais pour des mecs comme moi sa change la vie :))

Désolé de ne pas avoir pu répondre avant, j'étais en congés

Merci encore !!

Rechercher des sujets similaires à "vba comptabiliser nombre occurrence texte"