Le code suivant fonctionne dans Excel avant 2010:
myRange = Range("A:A")
NumRows = Application.CountA(myRange)
Il y a 38 cellules contenant du texte/des valeurs dans la colonne A. Lorsque le code est exécuté dans Excel 2007, NumRows est évalué correctement à 38, mais à 65 536 dans Excel 2010.
La saisie de la fonction CountA
dans la cellule fonctionne correctement dans les deux versions.
Un fil similaire est question 16696891 , mais il n’ya pas eu de réponse et les suggestions étaient, je pense, des harengs rouges ...
Des idées?
Je ne sais pas exactement quel est votre problème, car je ne parviens pas à faire fonctionner votre code tel quel. Deux choses semblent évidentes:
Range
doit être attribué à myRange
. Puisqu'un type Range
est un objet dans VBA, il doit être Set
, comme ceci: Set myRange = Range("A:A")
CountA()
doit être appelée avec .WorksheetFunction
Si vous ne le faites pas déjà, envisagez d'utiliser l'option Option Explicit en haut de votre module et de taper vos variables avec des instructions Dim
, comme je l'ai fait ci-dessous.
Le code suivant fonctionne pour moi en 2010. Espérons que cela fonctionne pour vous aussi:
Dim myRange As Range
Dim NumRows As Integer
Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)
Bonne chance.
Cette réponse d'un autre forum a résolu le problème.
(remplacez votre propre plage par le "I: I" montré ici)
Re: CountA ne fonctionne pas dans VBA
Should be:
Nonblank = Application.WorksheetFunction.CountA(Range("I:I"))
You have to refer to ranges in the vba format, not the in-Excel format.
Ce code fonctionne pour moi:
Sub test()
Dim myRange As Range
Dim NumRows As Integer
Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)
MsgBox NumRows
End Sub
Il semble que la façon dont Application.COUNTA fonctionne dans VB7 par rapport à VB6 a changé. J'ai essayé ce qui suit dans les deux versions de VB.
ReDim allData(0 To 1, 0 To 15)
Debug.Print Application.WorksheetFunction.CountA(allData)
En VB6, cela retourne 0.
Inn VB7 il retourne 32
On dirait que VB7 ne considère plus que COUNTA est COUNTA.
Cela peut sembler évident, mais, en indiquant Range et sans indiquer le classeur ou la feuille de calcul, essayer de CountA () sur une autre feuille… .. Je trouve que le fait de remédier à ces problèmes évite beaucoup de maux de tête.