Fonction Counta

Résolu
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007 - 12 juil. 2007 à 12:31
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007 - 13 juil. 2007 à 12:03
Bonjour,
Voila j'ai un petit problème sur le retour de la fonction counta. En effet celle la me renvoit la valeur "1" pour n'importe quelle plage que je définis.
 Voici mon code

Set plage_phi = Sheets("Données").Range(Cells(ligne_debut_acou, col_debut_acou), Cells(ligne_fin_acou, col_debut_acou))
Range("AI13").Select
ActiveCell.FormulaR1C1 = "=COUNTA(plage_phi)"
compt_phi = ActiveCell.Value
Set plage_lw = Sheets("Données").Range(Cells(ligne_debut_acou, col_fin_acou), Cells(ligne_fin_acou, col_fin_acou))
Range("AK13").Select
ActiveCell.FormulaR1C1 = "=COUNTA(plage_lw)"
compt_lw = ActiveCell.Value

Je pense bien que mes plages sont correctement définies car la suite de mon programme représente graphiquement ces plages et ca marche.
En fait ce que je veux faire c'est  : ne pas tracer de graph (ou rajouter la série) si une des plages est vide. Donc si compt_phi ou compt_lw est égal à 0 je ne représente rien.
J'avais essayé IsEmpty mais ca ne fonctionne pas non plus.
Avez vous une idée de mon erreur, est-ce sur le code ou c'est carrément l'idée qui est mauvaise ??
Merci beaucoup

9 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juil. 2007 à 12:43
tu mélange tes variables VBA avec ta formule Excel...


Set plage_phi = Sheets("Données").Range(Cells(ligne_debut_acou, col_debut_acou), Cells(ligne_fin_acou, col_debut_acou))
With Range("AI13")
.FormulaR1C1 = "=COUNTA(" & plage_phi.Address & ")"
compt_phi = .Value
End With

Set plage_lw = Sheets("Données").Range(Cells(ligne_debut_acou, col_fin_acou), Cells(ligne_fin_acou, col_fin_acou))
With Range("AK13")
.FormulaR1C1 = "=COUNTA(" & plage_lw.Address & ")"
compt_lw = .Value
End With
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
13 juil. 2007 à 11:13
Ben si c'est possible puisque tu ne définis pas la feuille.
Si j'ai bien suivi ce que tu fais et ce que te dis MPI : tu définis bien les plages, du contenu de ta formule.
Qu'en est-il de la feuille de la cellule où tu veux insérer la formule ? Rien dans ton code ne nous dit que tu travailles sur une seule et unique feuille, ni que ta macro ne change pas de feuille. D'ailleurs tu définis tes plages sur la feuille "Données", je pense que tu essayes de mettre ta formule dans une autre feuille.

Je parierais presque que ta formule se trouve dans la cellule AI13 de la feuille "Données" et non celle que tu veux. Vérifies donc dans toutes les feuilles de ton classeur la cellule AI13.

Si c'est vraiment le cas, il te suffit de faire
Worksheets("toto").Range("AI13").FormulaR1C1 = "=COUNTA(" & plage_phi.Address & ")"

Si ce n'est pas ça, Et bien, toutes mes excuses.

Molenn
3
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007
12 juil. 2007 à 14:30
Merci de ta réponse rapide mais compt_lw et compt_phi valent tout le temps "0" maintenant. Pourtant ca me parraissait pas mal ta correction
0
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007
12 juil. 2007 à 14:46
En passant au debogage pas à pas, je ne  comprends pas pourquoi dans ma cellule AI13 ou AK13 je ne vois pas la valeur associée à =COUNTA(" & plage_phi.Address & ") ou =COUNTA(" & plage_lw.Address & ")
Est-ce que le code que tu m'as passé permet de les visualiser ? Comme je le comprends il me sembe que oui.
Dans la fenêtre de variables locales, ces variables (compt_xx) restent désespérément nules.
Pour info je les aies déclarées As Integer (c'est bien ce que renvoie COUNTA il me semble).
0

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

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 juil. 2007 à 00:01
Où affectes-tu des valeurs à ces variables
Range(Cells(ligne_debut_acou, col_debut_acou), Cells(ligne_fin_acou, col_debut_acou))

De plus, dans la deuxième, tu répètes 2 fois col_fin_acou
est-ce voulu ?

Autrement, la méthode que te donnes Rendield me semble être ce que tu as besoin. Personnellement, je n'utilise pas FormulaR1C1, mais plutôt Formula tout court mais c'est probablement juste une question d'habitude.

Pour les variables Integer, ça ne devrait pas causer de problème, sinon tu aurais probablement eu une erreur 13 "Type Mismatch". Mais tu pourrais aussi les déclarer As Long.

Et pour tes variables locales en mode Debug, as-tu essayé le code sans passer par ce Debug ? Et est-ce que les formules sont bien écrites dans ces cellules AI13 et AK13 ?

MPi
0
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007
13 juil. 2007 à 01:11
Bonsoir MPi,
ligne_debut_acou etc sont définies plus haut.
Ce n'est pas ca le pb car mes plages fonctionnent bien et sont bien définies (je
répète 2 fois col_fin_acou -> c normal :))
En effet elles servent
plus loin pour faire des graph et ils fonctionnent.

Le problème est bien
le suivant : AI13 et AK13 restent vides, pas la moindre formule ne s'y trouve.
Par conséquent mes variables sont nulles (par défaut, lors de l'initialisation
je pense). Je suis en variable explicit pour eviter toute erreur de déclaration
"automatique" par VBA.

J'obtiens le même résultat que je debug le prog ou
non.
Merci pour ton aide
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 juil. 2007 à 02:41
Alors, tout ce que je peux voir c'est que lorsque tu écris
Range("AI13").FormulaR1C1 = "=COUNTA(" & plage_phi.Address & ")"
(...selon la méthode de Renfield...)
Tu n'es pas dans la bonne feuille
... est-ce possible ?

Il faudrait alors spécifier la feuille du Range("AI13")

Autrement, je ne vois pas pourquoi il n'y aurait rien d'écrit dans cette cellule. Tout au moins il y aurait une erreur un #Valeur ou #Nom ou autre...

MPi
0
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007
13 juil. 2007 à 10:06
Ben non ce n'est pas possible puisque juste au dessus je définis mes plages... la j'avoue ne pas comprendre grand chose...
Quand je fais le débugage, la ligne .FormulaR1C1 = "=COUNTA(" & plage_phi.Address & ")" ne fais strictement rien sur ma feuille, c'est comme je n'avaias rien écris dans mon prog.
Merci quand même les gars...car la je vois bien qu'il n'y aura pas de solution car ca me parrait vraiement bon le code de Renfield...
0
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007
13 juil. 2007 à 12:03
Merci Molenn pour ta remarque ! En effet j'ai réussi à faire fonctionner ce que je voualais. Je m'explique.
Molenn, c'était bien dans données que je voulais faire apparaître mon résultat, dans un premier tant je voulais tester le code plutôt que la mise en forme. Sur tes conseils j'ai vérifié les autres feuilles... nulle trace de formule où que ce soit.

J'ai décidé de mettre en page en mettant cette formule sous "Tampon". Et bien le programme voualit bien inscrire ma formule. Il ne me resatait plus qu'à préciser ceci :
With Worksheets("Tampon").Range("A1")
    .FormulaR1C1 = "=COUNTA( Données! " & plage_phi.Address & ")"
    compt_phi = .Value
End With

Et ca fonctionne. Je ne comprends pas le caprice de la feuille "Données" mais bon...

Merci à tous ! En vous combinant cela m'a permis de trouver une solution Je suis super content car je vais enfin pouvoir continuer mon taff ! j'étais grandement bloqué
0
Rejoignez-nous