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 !
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).
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
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
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