rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Excel : fonction countif dans macro

Posté par mimi, le samedi 29 juillet 2006 à 11:35:23
Bonjour ,
ma macro suivante bloque (erreur 2015)
cv2="1234"
z=0
For y = 1 To 9
If Application.CountIf(cv2, y) = 1 Then z = z + 1
next y

normalement, quand y=1, countif devrait renvoyer 1 (qui est dans la variable cv2) et mon compteur z devrait augmenter de 1

Un grand merci par avance de bien vouloir aider un débutant

Mimi
Répondre à mimi  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 29 juillet 2006 à 12:35:22
Salut,

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 Sub
Il 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&quo­t;), y) = 2 
Tu 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)?
Répondre à lami20j

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
mimi, le samedi 29 juillet 2006 à 13:17:06
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
Répondre à mimi

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 29 juillet 2006 à 13:36:55
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.
Dim cv2 As Range
Set cv2 = Cells(2, 44)
lami20j
Répondre à lami20j

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 29 juillet 2006 à 14:25:34
Re,

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 Sub
lami20j
Répondre à lami20j

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
mimi, le samedi 29 juillet 2006 à 17:52:20
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
Répondre à mimi

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 29 juillet 2006 à 20:36:15
Re,

si mon fichier t'intéresse, n'hésite pas à m'envoyer une adresse mail

Pourquoi pas. Regarde dans mon profil.

a+

lami20j
Répondre à lami20j

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Cécile, le jeudi 12 octobre 2006 à 18:25:38
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
Répondre à Cécile

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le jeudi 12 octobre 2006 à 19:06:25
Salut,
Sub compter()
    Dim m As Double
    m = Range("C4").Value
    Range("a1") = _
            Application.WorksheetFunction.CountIf(Range("B2:B6"­;), "<" & m)
End Sub
lami20j
Répondre à lami20j

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Cécile, le jeudi 12 octobre 2006 à 19:25:43
Merci!
Répondre à Cécile

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Cécile, le vendredi 13 octobre 2006 à 09:10:35
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
Répondre à Cécile

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le vendredi 13 octobre 2006 à 12:41:11
Salut,

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 Sub
lami20j
Répondre à lami20j

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Cécile, le samedi 14 octobre 2006 à 22:02:53
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...
Répondre à Cécile

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 14 octobre 2006 à 23:53:38
Salut,

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 Sub
lami20j
Répondre à lami20j

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le dimanche 15 octobre 2006 à 00:32:18
Enlève la ligne MsgBox m
C'était pour tester.

lami20j
Répondre à lami20j

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Cécile, le lundi 16 octobre 2006 à 19:53:22
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
Répondre à Cécile

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le lundi 16 octobre 2006 à 22:35:15
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
Répondre à lami20j

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 bayit, le mercredi 19 septembre 2007 à 16:53:12
slt je cherche un logiciel ou un programe pour unitisé EXEL
Répondre à bayit
Logiciels pertinents trouvés dans les téléchargements
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger OpenOffice.org 2.4.1OpenOffice.org - OpenOffice est une suite bureautique complète entièrement gratuite, compatible avec la suite Microsoft Office. Elle...Catégorie: Suite bureautique
Licence: Open Source
Télécharger Super Macro  1Super Macro - Super Macro est un logiciel gratuit qui permet de créer des macros sous Windows afin de déclencher diverses actions...Catégorie: Bureautique
Licence: Freeware/gratuit
Télécharger PSPad 4.5.2PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,...Catégorie: Développement
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « Excel : fonction countif dans macro »