Excel : fonction countif dans macro
Résolu/Fermé
mimi
-
29 juil. 2006 à 11:35
bayit Messages postés 2 Date d'inscription jeudi 13 septembre 2007 Statut Membre Dernière intervention 19 septembre 2007 - 19 sept. 2007 à 16:53
bayit Messages postés 2 Date d'inscription jeudi 13 septembre 2007 Statut Membre Dernière intervention 19 septembre 2007 - 19 sept. 2007 à 16:53
A voir également:
- Countif vba
- =Countif - Meilleures réponses
- Vba application.countif - Meilleures réponses
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
15 réponses
merci beaucoup lami20j tes explications m'ont bien aidées.
En fait je veux savoir si mon compteur i (de 1 à 9) est contenu au moins une fois dans ma variable cv2 (="1234")
je connaissais comme test logique :
a=b ou a > b ou a < b ou a <> b mais pas a "est contenu dans" b
j'ai modifié ma macro en ajoutant
if y = 1 then x = "*1*"
et j'utilise x dans la fonction CountIf au lieu de y
cela donne :
For y = 1 To 9
If y = 1 Then x = "*1*"
Cells(2, 44) = cv2
If Application.CountIf(Cells(2, 44), x) = 1 Then z = z + 1
si j'écris ma variable cv2 en cells (2,44), ma macro marche et z augmente de 1
par contre si je remplace cells(2,44) par le nom de ma variable cv2
If Application.CountIf(cv2, x) = 1 Then z = z + 1
j'ai le message d'erreur d'exécution13 : incompatibilité detype
Merci d'avance si tu as une astuce pour résoudre ce problème
mimi
En fait je veux savoir si mon compteur i (de 1 à 9) est contenu au moins une fois dans ma variable cv2 (="1234")
je connaissais comme test logique :
a=b ou a > b ou a < b ou a <> b mais pas a "est contenu dans" b
j'ai modifié ma macro en ajoutant
if y = 1 then x = "*1*"
et j'utilise x dans la fonction CountIf au lieu de y
cela donne :
For y = 1 To 9
If y = 1 Then x = "*1*"
Cells(2, 44) = cv2
If Application.CountIf(Cells(2, 44), x) = 1 Then z = z + 1
si j'écris ma variable cv2 en cells (2,44), ma macro marche et z augmente de 1
par contre si je remplace cells(2,44) par le nom de ma variable cv2
If Application.CountIf(cv2, x) = 1 Then z = z + 1
j'ai le message d'erreur d'exécution13 : incompatibilité detype
Merci d'avance si tu as une astuce pour résoudre ce problème
mimi
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
14 oct. 2006 à 23:53
14 oct. 2006 à 23:53
Salut,
Tant pis je vais chercher autre chose Alors essaie ça.
Tant pis je vais chercher autre chose Alors essaie ça.
Sub compter3() Dim m As Double m = Range("C4") MsgBox m Range("a1") = _ Application.WorksheetFunction.CountIf(Range("B2:B6"), "<" & Val(m)) End Sublami20j
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 oct. 2006 à 00:32
15 oct. 2006 à 00:32
Enlève la ligne MsgBox m
C'était pour tester.
lami20j
C'était pour tester.
lami20j
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
29 juil. 2006 à 12:35
29 juil. 2006 à 12:35
Salut,
La fonction CountIf compte le nombre d'occurences existantes dans une plage de cellules selon un critére.
Dans ton cas si les critéres ( de 1 à 9 ) sont uniques la variable z sera incrementé.
Prenons l 'exemple d'une plage a1:a9 avec les données
1
2
3
4
4
5
5
5
5
Le résultat de la macro sera 3 puisque 4 et 5 on les trouve plusieurs fois, tandis que 1,2 et 3 une seule fois.
Si par exemple on met la condition = 2
Mieux vaut dire ce que tu veux obtenir pour savoir mieux t'aider.
lami20j
P.S.
En bref
Application.WorksheetFunction.CountIf(Range("a1:a9"), y) = 1
veut dire Combien des éléments on les trouve une seule fois (parmi les critéres de 1 à 9)?
Option Explicit Sub a() Dim z, y For y = 1 To 9 If Application.WorksheetFunction.CountIf(Range("a1:a9"), y) = 1 Then z = z + 1 End If Next y MsgBox z End SubIl faut comprendre ce que fait la fonction CountIf.
La fonction CountIf compte le nombre d'occurences existantes dans une plage de cellules selon un critére.
Dans ton cas si les critéres ( de 1 à 9 ) sont uniques la variable z sera incrementé.
Prenons l 'exemple d'une plage a1:a9 avec les données
1
2
3
4
4
5
5
5
5
Le résultat de la macro sera 3 puisque 4 et 5 on les trouve plusieurs fois, tandis que 1,2 et 3 une seule fois.
Si par exemple on met la condition = 2
Application.WorksheetFunction.CountIf(Range("a1:a9"), y) = 2Tu peux dire le résultat et pourquoi? Mais sans exécuter la macro ;)
Mieux vaut dire ce que tu veux obtenir pour savoir mieux t'aider.
lami20j
P.S.
En bref
Application.WorksheetFunction.CountIf(Range("a1:a9"), y) = 1
veut dire Combien des éléments on les trouve une seule fois (parmi les critéres de 1 à 9)?
Bonjour,
J'aimerais utilisé la fonction CountIf en faisant référence dans la condition à un cellule, je m'explique :
j'aimeraisque utilisé quelque chose comme ca :
Dim m As Double
m = Range("C4").Value
ActiveCell.Formula = Application.WorksheetFunction.CountIf(Range("B2:B6"), "<m")
mais ca ne marche pas et je suppose que c'est à cause du m mais j'arrive pas à le résoudre!!!
Merci beaucoup
Cécile
J'aimerais utilisé la fonction CountIf en faisant référence dans la condition à un cellule, je m'explique :
j'aimeraisque utilisé quelque chose comme ca :
Dim m As Double
m = Range("C4").Value
ActiveCell.Formula = Application.WorksheetFunction.CountIf(Range("B2:B6"), "<m")
mais ca ne marche pas et je suppose que c'est à cause du m mais j'arrive pas à le résoudre!!!
Merci beaucoup
Cécile
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
29 juil. 2006 à 13:36
29 juil. 2006 à 13:36
Re,
bon, j'essaie ton code et chez moi n'affiche rien.
En revanche pour ton problème il faut que tu déclare cv2 en tant qu'objet Range et ensuite tu lui attribues ta plage avec le mot clé set
Comme ça tu peux utiliser la variable puisque CountIf demande un objet Range pour le 1er argument.
bon, j'essaie ton code et chez moi n'affiche rien.
En revanche pour ton problème il faut que tu déclare cv2 en tant qu'objet Range et ensuite tu lui attribues ta plage avec le mot clé set
Comme ça tu peux utiliser la variable puisque CountIf demande un objet Range pour le 1er argument.
Dim cv2 As Range Set cv2 = Cells(2, 44)lami20j
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
29 juil. 2006 à 14:25
29 juil. 2006 à 14:25
Re,
ce n'est pas plutôt ça que tu veux?
ce n'est pas plutôt ça que tu veux?
Sub a() Dim cv2, z, y cv2 = "1234" For y = 1 To Len(cv2) If Mid(cv2, y, 1) = 1 Then z = z + 1 Next y MsgBox z End Sublami20j
Merci beaucoup pour tes 2 réponses, c'est tout à fait ce que je voulait (ta 2ème réponse)
pour ta première réponse, j'avais écris la variable en cells(2,44) car
If Application.CountIf(cv2, x) = 1 Then z = z + 1
ne fonctionnait pas
par contre :
If Application.CountIf(Cells(2, 44), x) = 1 Then z = z + 1
fonctionnait si je mettais en format texte au préalable la cellule (2,44)
je vais pouvoir finir mes macros qui résolvent les grilles de sudoku !!
toutes mes macros fonctionnent :
recherche par ligne
recherche par colonne
recherche par régions
recherche du seul chiffre unique
recherche par l'approche essai / erreur
mais je ne savais pas faire lorsque dans une région, plusieurs choix possibles existent pour chaque cellule vide mais un seul chiffre n'apparait qu'une fois.
si mon fichier t'intéresse, n'hésite pas à m'envoyer une adresse mail
encore merci
mimi
pour ta première réponse, j'avais écris la variable en cells(2,44) car
If Application.CountIf(cv2, x) = 1 Then z = z + 1
ne fonctionnait pas
par contre :
If Application.CountIf(Cells(2, 44), x) = 1 Then z = z + 1
fonctionnait si je mettais en format texte au préalable la cellule (2,44)
je vais pouvoir finir mes macros qui résolvent les grilles de sudoku !!
toutes mes macros fonctionnent :
recherche par ligne
recherche par colonne
recherche par régions
recherche du seul chiffre unique
recherche par l'approche essai / erreur
mais je ne savais pas faire lorsque dans une région, plusieurs choix possibles existent pour chaque cellule vide mais un seul chiffre n'apparait qu'une fois.
si mon fichier t'intéresse, n'hésite pas à m'envoyer une adresse mail
encore merci
mimi
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
29 juil. 2006 à 20:36
29 juil. 2006 à 20:36
Re,
si mon fichier t'intéresse, n'hésite pas à m'envoyer une adresse mail
Pourquoi pas. Regarde dans mon profil.
a+
lami20j
si mon fichier t'intéresse, n'hésite pas à m'envoyer une adresse mail
Pourquoi pas. Regarde dans mon profil.
a+
lami20j
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2006 à 19:06
12 oct. 2006 à 19:06
Salut,
Sub compter() Dim m As Double m = Range("C4").Value Range("a1") = _ Application.WorksheetFunction.CountIf(Range("B2:B6"), "<" & m) End Sublami20j
Rebonjour,
je te remercie pour ta réponse super rapide mais la technique que tu m'as donnée fonctionne uniquement si les nombres contenus dans les cases en question sont des entiers. Or les nombres que je veux utiliser sont des décimaux.
Comment est ce que je peux faire? Utiliser une autre fonction?
Merci beaucoup pour ton aide!
Cécile
je te remercie pour ta réponse super rapide mais la technique que tu m'as donnée fonctionne uniquement si les nombres contenus dans les cases en question sont des entiers. Or les nombres que je veux utiliser sont des décimaux.
Comment est ce que je peux faire? Utiliser une autre fonction?
Merci beaucoup pour ton aide!
Cécile
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
13 oct. 2006 à 12:41
13 oct. 2006 à 12:41
Salut,
essaie ça
essaie ça
Sub compter2() Dim n, i Dim plage As Range Set plage = Range("B2:B6") For i = 1 To plage.Count If Range("b" & i) < Range("c4").Value Then n = n + 1 End If Next i Range("a1") = n End Sublami20j
Salut,
merci pour ta réponse mais en fait j'avais déjà essayer d'utiliser une boucle mais j'ai plus de 6000 données à traiter et c'est très très long avec une boucle ...
Tant pis je vais chercher autre chose, j'espérais qu'il existe l'équivalent de Countif mais pour le cas de valeur variant décimal...
merci pour ta réponse mais en fait j'avais déjà essayer d'utiliser une boucle mais j'ai plus de 6000 données à traiter et c'est très très long avec une boucle ...
Tant pis je vais chercher autre chose, j'espérais qu'il existe l'équivalent de Countif mais pour le cas de valeur variant décimal...
Salut
merci pr ton aide mais apparemment ca ne fonctionne pas pr les nombres inférieurs à 1...
Je cherche!
merci en tout cas,
Cécile
merci pr ton aide mais apparemment ca ne fonctionne pas pr les nombres inférieurs à 1...
Je cherche!
merci en tout cas,
Cécile
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 oct. 2006 à 22:35
16 oct. 2006 à 22:35
Salut,
je vais voir ça.
En revanche je vois que les infos tu les donnes petit à petit. Dès que je crois que c'est fini, tu ajoutes encore une "couche" ;)
J'ai peur de trouver une solution pour les nombres inférieurs à 1, puisque je me pose la question : La suite ça sera quoi?
lami20j
je vais voir ça.
En revanche je vois que les infos tu les donnes petit à petit. Dès que je crois que c'est fini, tu ajoutes encore une "couche" ;)
J'ai peur de trouver une solution pour les nombres inférieurs à 1, puisque je me pose la question : La suite ça sera quoi?
lami20j
bayit
Messages postés
2
Date d'inscription
jeudi 13 septembre 2007
Statut
Membre
Dernière intervention
19 septembre 2007
19 sept. 2007 à 16:53
19 sept. 2007 à 16:53
slt je cherche un logiciel ou un programe pour unitisé EXEL