Bonjour à toute la communauté,
J'en reviens une nouvelle fois à vous pour un message d'erreur dont je ne comprends pas la provenance.
Je ne vais malheureusement pas pouvoir joindre mon fichier, étant donné que c'est depuis du VBA Access et que mon fichier fait à l'heure actuelle 1227Mo... 😱
Par conséquent, je vais essayer d'expliquer au plus simple le problème.
Pour mon entreprise, je dois créer des requêtes depuis ma base Access pour ensuite les exporter sous Excel et exécuter des macros dedan.
La macro qui me pose problème est située depuis access.
La première Exécution se passe sans le moindre problème, et c'est lorsque je fais
que j'ai "Erreur 91, Variable objet ou variable de bloc with non défini." ici:
Les modifications sont mineures d'un fichier à l'autre ( remplacer "Export_access" par la table à exporter en question, puis modifier le nom à enregistrer dans "C:\Users\F54174\Documents\" & "Export_access" & ".xlsm" par la table à exporter, c'est tout.)
Ce qui donne le code suivant:
Sans fichier, j'en conviens que c'est compliqué de m'aider et je comprendrai très bien qu'on ne puisse pas me donner de solutions "toute cuite", mais si vous avez au moins une idée de pourquoi cette erreur 91, ça m'aidera dejà beaucoup.
Je serai tenté de penser que cette erreur viens d'un problème de libération de mémoire ou d'une variable non réutilisable directement peut-être?
Merci d'avance,
Bonne journée.
Kraenys
J'en reviens une nouvelle fois à vous pour un message d'erreur dont je ne comprends pas la provenance.
Je ne vais malheureusement pas pouvoir joindre mon fichier, étant donné que c'est depuis du VBA Access et que mon fichier fait à l'heure actuelle 1227Mo... 😱
Par conséquent, je vais essayer d'expliquer au plus simple le problème.
Pour mon entreprise, je dois créer des requêtes depuis ma base Access pour ensuite les exporter sous Excel et exécuter des macros dedan.
La macro qui me pose problème est située depuis access.
Code:
Function ExportXLS_test()
' Objets Access
Dim dbsBase As DAO.Database
Dim rstRequete As DAO.Recordset
Dim fld As DAO.Field
' Objets Excel
Dim appexcel As Object
Dim wbkRequete As Object
Dim wksRequete As Object
' Variables de boucles
Dim intLig As Long
Dim intCol As Long
' Création du classeur Excel
Set appexcel = CreateObject("Excel.application")
Set wbkRequete = appexcel.Workbooks.Add
Set wksRequete = appexcel.ActiveSheet
appexcel.Visible = True
' Ouverture de la table
Set dbsBase = DBEngine.OpenDatabase("C:\Users\F54174\Documents\DUMP_EAM.accdb")
Set rstRequete = dbsBase.OpenRecordset("Export_access", dbOpenDynaset)
' Mise à jour de la feuille active
With wksRequete
' Mise à jour des PMRQ et mise à jour de la requête Export-access
' En-têtes de colonnes renseignées à partir des noms de champs
intCol = 1
For Each fld In rstRequete.Fields
.Cells(1, intCol).Value = fld.Name
intCol = intCol + 1
Next fld
' Parcours des enregistrements
' Ajout d’une ligne par enregistrement
intLig = 2
Do While Not rstRequete.EOF
intCol = 1
For Each fld In rstRequete.Fields
.Cells(intLig, intCol).Value = rstRequete(intCol - 1)
intCol = intCol + 1
Next fld
intLig = intLig + 1
rstRequete.MoveNext
Loop
' Affectation d’un nom à la feuille Excel
.Name = "Export_access"
End With
' Fermeture des objets Access
rstRequete.Close
dbsBase.Close
' Activation du classeur dans Excel
appexcel.ActiveWindow.Activate
appexcel.Visible = True
'Call Macro_xlsm
appexcel.Run ("modèle.xlsm!Macro_debut")
Excel.ActiveWorkbook.SaveAs FileName:= _
"C:\Users\F54174\Documents\" & "Export_access" & ".xlsm", FileFormat _
:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=True 'Puis on sauvegarde le fichier complet
Excel.Workbooks("modèle.xlsm").Close
Excel.Workbooks("Export_access.xlsm").Close
Excel.Application.Quit
Set appexcel = Nothing
Call ExportXLS_test2
End Function
La première Exécution se passe sans le moindre problème, et c'est lorsque je fais
Code:
Call ExportXLS_test2
Code:
Excel.ActiveWorkbook.SaveAs FileName:= _
"C:\Users\F54174\Documents\" & "requete2" & ".xlsm", FileFormat _
:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=True 'Puis on sauvegarde le fichier complet
Les modifications sont mineures d'un fichier à l'autre ( remplacer "Export_access" par la table à exporter en question, puis modifier le nom à enregistrer dans "C:\Users\F54174\Documents\" & "Export_access" & ".xlsm" par la table à exporter, c'est tout.)
Ce qui donne le code suivant:
Code:
Function ExportXLS_test2()
' Objets Access
Dim dbsBase As DAO.Database
Dim rstRequete As DAO.Recordset
Dim fld As DAO.Field
' Objets Excel
Dim appexcel As Object
Dim wbkRequete As Object
Dim wksRequete As Object
' Variables de boucles
Dim intLig As Long
Dim intCol As Long
' Création du classeur Excel
Set appexcel = CreateObject("Excel.application")
Set wbkRequete = appexcel.Workbooks.Add
Set wksRequete = appexcel.ActiveSheet
appexcel.Visible = True
' Ouverture de la table
Set dbsBase = DBEngine.OpenDatabase("C:\Users\F54174\Documents\DUMP_EAM.accdb")
Set rstRequete = dbsBase.OpenRecordset("Requête2", dbOpenDynaset)
' Mise à jour de la feuille active
With wksRequete
' Mise à jour des PMRQ et mise à jour de la requête Export-access
' En-têtes de colonnes renseignées à partir des noms de champs
intCol = 1
For Each fld In rstRequete.Fields
.Cells(1, intCol).Value = fld.Name
intCol = intCol + 1
Next fld
' Parcours des enregistrements
' Ajout d’une ligne par enregistrement
intLig = 2
Do While Not rstRequete.EOF
intCol = 1
For Each fld In rstRequete.Fields
.Cells(intLig, intCol).Value = rstRequete(intCol - 1)
intCol = intCol + 1
Next fld
intLig = intLig + 1
rstRequete.MoveNext
Loop
' Affectation d’un nom à la feuille Excel
.Name = "Export_access"
End With
' Fermeture des objets Access
rstRequete.Close
dbsBase.Close
' Activation du classeur dans Excel
appexcel.ActiveWindow.Activate
appexcel.Visible = True
'Call Macro_xlsm
appexcel.Run ("modèle.xlsm!Macro_debut")
Excel.ActiveWorkbook.SaveAs FileName:= _
"C:\Users\F54174\Documents\" & "requete2" & ".xlsm", FileFormat _
:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=True 'Puis on sauvegarde le fichier complet
Excel.Workbooks("modèle.xlsm").Close
Excel.Workbooks("requete2.xlsm").Close
Excel.Application.Quit
Set appexcel = Nothing
End Function
Sans fichier, j'en conviens que c'est compliqué de m'aider et je comprendrai très bien qu'on ne puisse pas me donner de solutions "toute cuite", mais si vous avez au moins une idée de pourquoi cette erreur 91, ça m'aidera dejà beaucoup.
Je serai tenté de penser que cette erreur viens d'un problème de libération de mémoire ou d'une variable non réutilisable directement peut-être?
Merci d'avance,
Bonne journée.
Kraenys
Dernière édition: