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
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
A voir également:
- Compter le nombre de cellule
- Le fichier contient le nombre de voyageurs dans 3 gares. dans la cellule b5, saisissez une formule qui calcule le total et se met à jour si on change une valeur du tableau. quel total obtenez-vous ? quelle formule avez-vous saisie ? ✓ - Forum Excel
- Excel compter le nombre de caractères spécifique dans une cellule ✓ - Forum Excel
- Verrouiller cellule excel - Guide
- Excel colorer une cellule sous condition d'une autre cellule ✓ - Forum Excel
- Excel compter cellule couleur - Guide
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
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
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
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
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
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
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
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.
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.
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
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
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
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
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
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
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
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
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
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
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...)
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...)
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
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)
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)
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
12 oct. 2007 à 23:57
Bonsoir à tous,
Ou bien :
Ou encore, dans le cas ou l'étendue de la plage n'est pas connue :
Cordialement.
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.
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
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
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
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
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
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
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
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
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
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
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 ...
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 ...
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
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
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
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
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
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
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
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
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