web-dev-qa-db-fra.com

Excel VBA WorksheetFunction.CountA - ne fonctionne pas après la mise à niveau vers Office 2010

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?

7
Richard Ell

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:

  1. Il semble que vous vous fiez à VBA pour déterminer les types de variables et les modifier en conséquence. Cela peut prêter à confusion si vous ne faites pas attention, car VBA peut affecter un type de variable que vous n'aviez pas prévu. Dans votre code, un type de 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")
  2. Votre utilisation de la fonction de feuille de calcul 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.

8
Instant Breakfast

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.
3
Justin

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
1
CallumDA

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.

0
unhappy VB7 users

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. 

0
perfo