Compter le nombre de cellule

Fermé
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 - 11 oct. 2007 à 16:38
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 13 oct. 2007 à 20:58
Bonjour,

Voici mon problème:

Je souhaiterai compter le nombre de cellule contenant une certaine donnée (TEXTE) dans un RANGE connu.

Exemple:
Cellule Texte dans la cellule
A1 Test1
A2 Test4
A3 Test1
A4 Test1
A5 Test3
A6 Test4

Ce dont je souhaiterai compter c'est le nombre de cellule comptenant le texte "TEST1".
Pour mon exemple le résultat serai 3.

J'ai beaucoup de cellules à analyser, comportant plusieurs critères.
Donc je ne voulais pas faire une simple boucle avec l'instruction For...Next. Et voici le code que j'ai écrit, mais il ne marche pas.
Ma question est pourquoi?

Dim rng As Range
With ThisWorkbook.Worksheets("Rapport hebdomadaire")
Set rng = .Range("A1:A6").Count.Text = "Test1"
MsgBox (rng)
End With

Merci pour votre aide.

ppil

16 réponses

teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
11 oct. 2007 à 16:55
Bonjour,

Première remarque que m'inspire ton code : le "set" est de trop...
"Set" sert à déclarer une variable de type "objet" (un répertoire, un fichier, une feuille...)
Alors que là, tu déclares une variable "normale". Essaye sans le set...
Je retourne à la banque et je m'y repenche...
@ toute ;)
Teteve
0
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 13
11 oct. 2007 à 17:10
Teteve,

J'ai essayé sans, mais la macro s'arrête sur la ligne où j'ai supprimé le "Set".

Merci d'avance pour la suite des recherches de la solution.

ppil
0
xkristi Messages postés 4264 Date d'inscription lundi 18 décembre 2006 Statut Membre Dernière intervention 19 août 2022 564
11 oct. 2007 à 17:48
Salut !

Si je ne me trompe , tu as déjà
Dans le forum Bureautique , tu as une demande "traitement d'une chaine de caractères"
qui s'apparente bien à ce que tu cherches.
0
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 13
11 oct. 2007 à 20:06
xkristi,

Après lecture de "traitement d'une chaine de caractères dans le forum, cela ne s'apparente pas à ce dont je recherche.

Mais, MERCI quand même.

ppil
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 13
12 oct. 2007 à 10:24
xkristi,

Petit complèment par rapport à mon message précédent .

Les réponses données dans "traitement d'une chaine de caractères " concerne la recherche pour UNE cellule. Dans mon cas, il s'agit de plusieures cellules. La problèmatique est un peu différente.

ppil
0
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 13
12 oct. 2007 à 10:45
Bonjour,

J'ai découvert une petite erreure dans mon code. Voici la version corrigée:

Dim irngNb As Integer
Dim rng As Range
With ThisWorkbook.Worksheets("Rapport hebdomadaire")
Set rng = .Range("A1:A6").
irngNb = rng.Count.Text = "Test1"
MsgBox (irngNb)
End With

Mais ce code ne fontionne toujours pas. J'ai ce message d'erreure:

Erreur de compilation: Qualificateur incorrect

Que dois-je faire?

Merci pour votre aide.

ppil
0
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
12 oct. 2007 à 20:29
Bonsoir,

Euh... je me suis replongé dans l'problème, mais j'avoue que je sèche un peu... Voire même beaucoup !!!
La seule chose que je peux te dire avec mes maigres connaissances est :
Set rng = .Range("A1:A6"). <== il doit manquer un bout, je ne crois pas qu'en VBA on puisse terminer une ligne par un point...

Et le code, "en français", ne me parait pas "logique" :

With ThisWorkbook.Worksheets("Rapport hebdomadaire") / Avec chaque élément de la collection des feuilles "Rapport hebdo" de ce classeur (ou : avec chaque feuille "Rapport hebdo" pour faire plus simple...)
Tu ne peux pas avoir plusieurs feuilles portant le même nom dans un classeur...

Set rng = .Range("A1:A6"). / déclarer l'objet "rng" a priori comme un ensemble de cellules

...etc...Affichage...

Fin du with...

Je peux toujours te proposer des "for each" si tu me donnes tous les critères (ou un "squelette" si tu me donnes quelques indications)

Je vais continuer à chercher un peu, mais je ne te garantis rien du tout...

Si un programmeur éclairé en VBA peut se pencher sur le sujet, je suis preneur de la solution (ou au moins d'une solution...)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 197
12 oct. 2007 à 21:14
bonjour,


test ça :

Dim r As Integer
Dim rang As String
Dim nb As Integer

r = 1
rang = "A"

With Worksheets(1)
While .Range(rang & r).Value <> ""
If .Range(rang & r).Value = "test1" Then
nb = nb + 1
End If
r = r + 1
Wend
MsgBox nb
End With

End Sub

ça marche chez moi

;o)
0
Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 60
12 oct. 2007 à 23:57
Bonsoir à tous,

Ou bien :

For each cel in range("A1:A6").cells
  If cel.value = "test1 Then n=n+1
Next
MsgBox n

Ou encore, dans le cas ou l'étendue de la plage n'est pas connue :

For each cel in range("A1:A65536").cells
  If cel.Value="" then exit For
  If cel.Vvalue = "test1 Then n=n+1
Next
MsgBox n


Cordialement.
0
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
13 oct. 2007 à 02:10
Bon, je n'ai pas besoin de faire mon chtit "for each"... :)

Savez vous néanmoins si l'idée de départ de ppil était exploitable en VBA ? => sans passer par un compteur (nb ou n)

Si oui, la mise en forme du code complet m'intéresse, vu que je ne connait pas très bien toutes les fonctions et propriétés des objets excel

Merci

Teteve
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 197
13 oct. 2007 à 02:52
bonjour,


Les deux solutions de Papou fonctionnent très bien.

Si j'ai déclaré rang pour la colonne et r pour la ligne c'est simplement pour permettre de passer la colonne et la ligne en paramètre dans la fonction. On peut également passer le paramètre à tester, ainsi la fonction devient portable et peut être utilisée pour d'autres colonnes avec un paramètre à tester différent, du genre :

function CompteTest (Byval sCol As String, Byval iLig As Integer, Byval vStr As Variant) As Integer
Dim nb As Integer

With Worksheets(1)
While .Range(sCol & sLig).Value <> ""
If .Range(rang & r).Value = vStr Then
nb = nb + 1
End If
sLig = sLig + 1
Wend
End With
CompteTest = nb
End Function

Quant à la question concernant l'idée de ppil, je ne sais pas ... de toute évidence ça ne fonctionne pas.
Les 2 solutions de Papou me semble simple, bien et surtout répondre au besoin attendu de la fonction ... pourquoi refaire ce qui existe ? Maintenant, comme on dit "choisit ton camp camarade" ;o)

Bon courage,

Cordialement,

Polux
0
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
13 oct. 2007 à 04:38
Bonjour Polux,

La solution de ppil ne fonctionne pas... C'est bien pour ça que j'demandais si quelqu'un savait la formuler de façon à ce que ça fonctionne en restant dans le même "esprit" (pas de compteur, uniquement des fonctions et procédures "brutes")

Mon camp est déjà tout choisi : entre les solutions proposées qui fonctionnent et que je connais ("suis capable de refaire" plutôt) et une autre totalement inconnue, j'opte pour apprendre celle que je ne maitrise pas du tout ! :)
Quel est l'intérêt d'apprendre ce que l'on sait déjà ?

Je sais, j'aime bien chercher la chtite bêbête... Mais c'est comme ça que j'en apprends tous les jours...

Teteve
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 197
13 oct. 2007 à 09:15
tu n'as pas du bien chercher la "chtite bêbête" ...
Cette déclaration mélange méthode et propriété avec en plus deux égalités : Set rng = .Range("A1:A6").Count.Text = "Test1" .... plutôt surréaliste ... tout autant que :
Set rng = .Range("A1:A6").
irngNb = rng.Count.Text = "Test1"

mais l'avenir est peut être là ... qui sait ... pour ma part je pense que les bons vieux compteurs dans les bonnes vieilles boucles ont encore de beaux jours devant eux ...
0
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
13 oct. 2007 à 12:58
Bonjour,

Instancier une variable de type Int avec "set" ne fonctionne pas.
Mettre plusieurs " = " sur la même ligne ne fonctionne pas.
Prendre une collection de plusieurs feuilles de même nom et du même classeur ne fonctionne pas.
Finir une ligne par un " . " ne fontionne pas
Ecrire n'importe quoi ne fontionne pas...
J'oubliais : écrire en français plutôt qu'en anglais ne fonctionne pas non plus...

Jusque là, j'suis d'accord... Dois je marquer tout ce qui ne fonctionne pas et tous les bouts de code que j'ai essayé pour montrer que j'ai cherché "avec des principes de VB qui fonctionnent" ?

Lire un message d'erreur d'exécution est encore à ma portée (enfin j'crois...)

Donc si quelqu'un sait s'il y a une façon de procéder autre qu'avec un compteur ET avec une syntaxe correcte, je suis toujours preneur...

Teteve
0
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 13
13 oct. 2007 à 18:06
Bonjours à tous,

Désolé d'avoir créé cette perturbation.

J'ai fait quelques erreurs. Entre autre en rattapant mon code test. Le . après Set rng = .Range("A1:A6"). n'y été pas dans mon code de base.

Ensuite, mon niveau en VBA n'est pas très haut. Donc j'ai essayé, mais .... pas terrible le résultat.

Et pour finir MERCI à tous. J'ai une solution à mon problème de base.

Peut-être je n'ai pas fini. Quel site ou quel livre puis-je consulter pour m'améliorer?

ppil
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 197
13 oct. 2007 à 20:58
bonjour ppil,

Tu as ta solution à ton problème c'est l'essentiel, pour le reste !!! je ne vois pas de quoi tu parles ;o)...

Il n'y a pas de bonne ou de mauvaise solution, il n'y a une solution pertinente. Celle qui répond au besoin. Si un jour tu dois développer et livrer des applications, jamais un client ne te demandera comment tu as codé telle procédure ou telle fonction pour répondre à son besoin ...

Bon courage et bonne route.


Polux
0