XL 2010 [VBA] CountA n'appartient pas à la classe WorksheetFunction (erreur 1004) [Résolu]

kopros

XLDnaute Nouveau
Bonjour à tous,

Je souhaite ouvrir un classeur excel via le code VBA, et faire un CountA d'une colonne pour savoir combien il y a de valeurs.
Alors j'ai fait un bout de code qui fonctionne bien :
Code:
Workbooks.Open leCheminDuFichier
nb = WorksheetFunction.CountA(Workbooks(LeFichier).Sheets("MaFeuille").Range("A:A")

Donc ça c'est pas mal, sauf qu'on voit le fichier en question qui s'ouvre, le reste du code s'exécute, puis le fichier est fermé (ce qui est normal hein). Et moi je voudrais que ça fasse la même chose, mais sans qu'on voit le fichier qui s'ouvre.

J'ai donc mis ça :
Code:
Dim app As New Excel.Application
app.Visible = False ' False par défaut, c'est pour être bien sûr
Dim wbkSettings As Excel.Workbook
Set wbkSettings = app.Workbooks.Add(leCheminDuFichier)

nb = WorksheetFunction.CountA(wbkSettings.Sheets("MaFeuille").Range("A:A"))

Et là l'exécution me retourne l'erreur 1004 : "Impossible de lire la propriété CountA de la classe WorksheetFunction"

Alors je débute en VBA, donc si mon 2e code est une grosse infamie c'est normal !
J'ai beau chercher sur le net, je trouve pas ce cas particulier (l'erreur 1004 c'est pas uniquement pour countA, c'est dès qu'on a une propriété de classe impossible à lire. Autant dire que ce code d'erreur ne nous sert pas à grand chose)
Je me dis que peut-être il est impossible de faire un countA sur un classeur ouvert de cette façon, mais si c'est possible je sais pas comment !

Merci à tous ceux qui vont me répondre ! :)
 
Dernière modification par un modérateur:

vgendron

XLDnaute Barbatruc
Re : [VBA] CountA n'appartient pas à la classe WorksheetFunction (erreur 1004)

hello


plutot que de rendre ton fichier invisible, essaie peut etre en mettant en début de code
application.enableevents=false

(et remettre à true à la fin.)
 

kopros

XLDnaute Nouveau
Re : [VBA] CountA n'appartient pas à la classe WorksheetFunction (erreur 1004)

Hi Vgendron !

Tout d'abord merci pour ta réponse.

Alors j'ai essayé de mettre comme t'as dit : Application.EnableEvents=false
avec ma solution n°2, mais ça n'a rien donné.
Du coup dans le doute j'ai aussi testé avec ma variable : app.EnableEvents=false
idem

J'ai aussi tenté en remettant ma solution n°1 (Application.EnableEvents=false) et toujours rien (enfin j'ai plus l'erreur évidemment, mais on voit le fichier qui s'ouvre).
 

Paf

XLDnaute Barbatruc
Re : [VBA] CountA n'appartient pas à la classe WorksheetFunction (erreur 1004)

Bonjour kopros et bonjour vgendron :)

a priori

Code:
 Dim App As New Excel.Application, wbkSettings As New Excel.Workbook
 
 'chemin absolu et nom du classeur à adapter
 CheminClasseur = "C:\Documents and Settings\...\Classement.xls"

 Set wbkSettings = App.Workbooks.Open(CheminClasseur)
 nb = WorksheetFunction.CountA(wbkSettings.Sheets("MaFeuille").Range("A:A"))
 ....
 'Fermer le classeur et vider les objets
 wbkSettings.Close
 App.Quit
 Set wbkSettings = Nothing
 Set App = Nothing

A+
 

kopros

XLDnaute Nouveau
Re : [VBA] CountA n'appartient pas à la classe WorksheetFunction (erreur 1004)

Salut et merci Paf pour ta proposition !
A moins que mes yeux fatigués ne me jouent des tours, on dirait que c'est la même que mon code n°2 non ? Ca me retourne comme quoi soit disant CountA ne fait pas partie de WorksheetFunction o_O

Mais c'est pas grave, parce que je revenais ici pour dire que j'ai enfin trouvé une solution !

Voilà ce que ça donne :

Code:
Dim app As New Excel.Application, wbkSettings As Excel.Workbook
Dim leCheminDuFichier As String, nb As Integer
app.Visible = False ' False par défaut, c'est pour être bien sûr (on peut virer cette ligne en fait)

leCheminDuFichier = "C:\...\leFichier.xlsx" ' à adapter

Set wbkSettings = app.Workbooks.Add(leCheminDuFichier)

nb = wbkSettings.Sheets("MaFeuille").Range("A" & Rows.Count).End(xlUp).row

MsgBox(nb)
 ' le reste du code ici
 ' ...

wbkSettings.Close SaveChanges:=False ' ou True, comme on veut
app.Quit
Set app = Nothing

Et voilà !
La ligne wbkSettings.Sheets("MaFeuille").Range("A" & Rows.Count).End(xlUp).row est bien pensée (pas par moi, trouvée ailleurs sur Internet) il suffit d'adapter le nom de la feuille et la colonne à compter. Et pour le moment ça marche, qu'elle que soit la façon d'ouvrir le fichier !

Encore merci à vous 2 de vous être penché sur mon problème :)
 
Dernière modification par un modérateur: