Erreur d'exécution '1004' impossible d'exécuter la macro .....

kraenys

XLDnaute Junior
Bonjour la communauté,

Me voici devant un problème vu maintes et maintes fois sur le net, mais les manières de le résoudre sont à chaque fois différentes, et je n'ai pas trouvé mon bonheur.

Voici la situation:
J'ai au début créé un outil VBA sous access et surtout sous Excel (c'est la partie sous excel qui plante) sous mon nom de compte (F54174).

Cet outil est désormais terminé et fonctionne à 100%. Il a donc fallu l'envoyer sur le poste de mon responsable de stage pour qu'il puisse continuer à le faire tourner une fois mon départ. (son ndc est j85316)

Lors de l'exécution du code, sur son poste, j'ai une erreur 1004: Impossible d'exécuter la macro "modèle.xlsm!Macro_debut". Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.

L'erreur se passe dans cette fonction:

Code:
Function ExportXLS_automatique()


'   Objets Access
Dim dbsBase As DAO.Database
Dim rstRequete As DAO.Recordset
Dim rstStock 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 intLig1 As Long
Dim intCol As Long
Dim intCol1 As Long
Dim DerLig As Long
Dim nom As Variant

'   Création du classeur Excel
Set appexcel = CreateObject("Excel.application")
Set wbkRequete = appexcel.Workbooks.Add
Set wksRequete = appexcel.ActiveSheet
Set wksStock = appexcel.ActiveSheet
appexcel.Visible = True

'   Ouverture de la table
Set dbsBase = DBEngine.OpenDatabase("D:\Documents\DUMP_EAM.accdb")
Set rstStock = dbsBase.OpenRecordset("Liste de requêtes à traiter", dbOpenDynaset)


With wksStock

'   Parcours des enregistrements
'   Ajout d’une ligne par enregistrement
   intLig1 = 1
    .Cells(1, 1).CopyFromRecordset rstStock
   DerLig = wksStock.UsedRange.Rows.Count
    Do While DerLig >= intLig1
      intCol1 = 1
    .Cells(1, 1).CopyFromRecordset rstStock

'   Mise à jour de la feuille active
Set rstRequete = dbsBase.OpenRecordset(wksRequete.Cells(intLig1, 1), dbOpenDynaset)
nom = wksStock.Cells(intLig1, 1)
With wksRequete
'  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

    .Cells(2, 1).CopyFromRecordset rstRequete
'   Affectation d’un nom à la feuille Excel
   .Name = "Liste_Complete"
End With

'   Fermeture des objets Access
rstRequete.Close
dbsBase.Close

'   Activation du classeur dans Excel
appexcel.ActiveWindow.Activate

appexcel.Visible = True

appexcel.Run ("'modèle.xlsm!'Macro_debut")
appexcel.DisplayAlerts = False
wbkRequete.SaveAs FileName:= _
        "\\ATLAS.EDF.FR\co\33bla-dpn\Projets.006\SDIN.026\Donnees\Surveullance des PMRQ\" & nom, FileFormat _
        :=xlExcel12 'Puis on sauvegarde le fichier complet
appexcel.DisplayAlerts = True
wbkRequete.Close
appexcel.ActiveWorkbook.Close
appexcel.Application.Quit


'   ReCréation du classeur Excel
Set appexcel = CreateObject("Excel.application")
Set wbkRequete = appexcel.Workbooks.Add
Set wksRequete = appexcel.ActiveSheet
Set wksStock = appexcel.ActiveSheet
appexcel.Visible = True

'   Réouverture de la table
Set dbsBase = DBEngine.OpenDatabase("D:\Documents\DUMP_EAM.accdb")
Set rstStock = dbsBase.OpenRecordset("Liste de requêtes à traiter", dbOpenDynaset)

intLig1 = intLig1 + 1
Loop
End With
appexcel.ActiveWorkbook.Close
appexcel.Application.Quit
Set appexcel = Nothing
End Function

sur la ligne
Code:
appexcel.Run ("'modèle.xlsm!'Macro_debut")

Or, lorsque je me connecte sur son poste avec mon profil, ce code fonctionne.

J'ai dejà essayé plusieurs solutions, par exemple rajout dans regedit.exe de "AccessBypassEncryptedMacroScan" dans HKEY-CURRENT-USER > Softwares > Microsoft > Office > Access et rajout de "ExcelBypassEncryptedMacroScan" dans HKEY-CURRENT-USER > Softwares > Microsoft > Office > Excel

J'ai également approuvé l'emplacement D:\Documents sous Access ET sous Excel (Options > Centre de gestion de compatibilité > paramètres du centre de gestion de compatibilité > emplacements approuvés)

Cet emplacement contient à la fois ma base Access qui n'a pas de problèmes et mon fichier Excel "modèle.xlsm" qui pose problème.
Dernier point perturbant,
Code:
appexcel.Run ("'modèle.xlsm!'Macro_debut")
ouvre bel et bien mon fichier Excel, c'est la macro qui ne veut pas se lancer. Par contre, quand je vais manuellement dans le fichier pour l'exécuter, elle fonctionne parfaitement. C'est à n'y rien comprendre.


J'espère que vous pourrez m'aider, je suis à cours de ressources :(

Bien à vous,

Kraenys
 
Dernière édition:
G

Guest

Guest
Re : Erreur d'exécution '1004' impossible d'exécuter la macro .....

Bonjour,

On ne sait pas sous quelle application tourne ta macro. Access? Excel(ce que je crois)?
Si c'est sous excel pourquoi re-créer un objet application?
Si ta macro générale tourne dans le fichier modèle.xlsm if suffit d'appeler une de ses macro par son nom: macro_debut
ou par Call macro_debut.

Tout ceci parait un peu fouilli.

A+



A+
 

kraenys

XLDnaute Junior
Re : Erreur d'exécution '1004' impossible d'exécuter la macro .....

Re,

Merci Dranreb, le ' etait mal placé, maintenant la macro fonctionne à nouveau. J'ai désormais un nouveau problème, cette fois sur la ligne
Code:
Set rstRequete = dbsBase.OpenRecordset(wksRequete.Cells(intLig1, 1), dbOpenDynaset)
il me dit "ODBC --Échec de la connexion à "DUMP EAM". "
Cette erreur apparait après que la fonction aie bouclé une première fois. Le premier fichier est donc bien traité, c'est quand intLig1 = 2 que ça plante.

J'ai posé un espion sur rstRequete, et il apparait que l'objet est incorrect ou n'est plus défini.
J'avais rencontré ce problème avec l'automation OLE pour Excel, c'est à celà que sers:
Code:
'   ReCréation du classeur Excel
Set appexcel = CreateObject("Excel.application")
Set wbkRequete = appexcel.Workbooks.Add
Set wksRequete = appexcel.ActiveSheet
Set wksStock = appexcel.ActiveSheet
appexcel.Visible = True

'   Réouverture de la table
Set dbsBase = DBEngine.OpenDatabase("D:\Documents\DUMP_EAM.accdb")
Set rstStock = dbsBase.OpenRecordset("Liste de requêtes à traiter", dbOpenDynaset)

mais je n'avais, sur mon profil, pas eu ce problème avec la base Access.

Avez-vous une idée de pourquoi ma variable rstRequete n'est plus défini et comment la rédéfinir?

Merci d'avance.
Bien à vous.

Kraenys
 

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83