Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

"la méthode 'sheets' de l'objet '_global' a échoué" ? ? ? ?

7 réponses
Avatar
amsa
Bonjour,
Voilà, je suis en train de créer un fichier Access qui me permet d'envoyer des données sur Excel. Jusque là pas de soucis (pour ainsi dire)
Mon bouton qui me permet de faire l'export marche bien au 1er clique, par contre au 2ème, j'ai droit au message suivant:
"la méthode 'sheets' de l'objet '_global' a échoué"
Le truc c'est que je peux être amené à faire 2 fois (ou plus) le transfert car ca se fait a chaque fois en fonction de date.
Si je ferme le fichier Acces et que je le réouvre, alors pas de soucis, je peux faire un export.... mais pas 2!

Je vous donne mon code, si dès fois quelqu'un avait une idée il m'aiderait grandement.

On Error GoTo Err_Commande4_Click

Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
Dim rst As DAO.Recordset
Dim maFeuil As String

' Créer un objet Excel (ce qui équivaut à démarrer Excel à distance)
Set xlApp = CreateObject("Excel.Application")

' Rendre Excel visible
xlApp.Visible = True
' xlApp.Visible = False

' Ouvrir Classeur
Set wbk = xlApp.Workbooks.Open("C:\C'pil & face.xls")

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = True
End If
Next

' Regarde si la feuille STAT du mois existe
maFeuil = "Stat-" & Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
' Efface puis Rentre les données de Stat
With wbk.Sheets(maFeuil)
'Effacer destination
.Range("A2:C65535").Clear
End With

xlApp.Range("A2").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = "Stat-" & Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ajouter en entête des colonnes
xlApp.Range("A1").Value = "Dates (mois)"
xlApp.Range("B1").Value = "Villes"
xlApp.Range("C1").Value = "Nbr"

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

End If

' Regarde si la feuille du mois existe
maFeuil = Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
xlApp.Range("A1").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("I:I").Delete

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ajouter en entête des colonnes
Dim intI As Integer
For intI = 0 To rst.Fields.Count - 1
sht.Cells(1, intI + 1).Value = rst.Fields(intI).Name
Next

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("D:D").NumberFormat = "# ##0.00 €"
xlApp.Columns("E:E").NumberFormat = "# ##0.00 €"
xlApp.Columns("F:F").NumberFormat = "0.00%"
xlApp.Columns("G:G").NumberFormat = "# ##0.00 €"
xlApp.Columns("H:H").Delete

End If

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = False
End If
Next

' Sauvegarder et fermer le classeur
wbk.Worksheets("Accueil").Activate
wbk.Save
wbk.Close

' Quitter Excel
xlApp.Quit

' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing

' Valide l'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Mise_a_Jour_Export", , acAdd
DoCmd.SetWarnings True

Exit_Commande4_Click:
Exit Sub

Err_Commande4_Click:
MsgBox Err.Description
Resume Exit_Commande4_Click


Merci par avance !

7 réponses

Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

Ah ! et tu ne dis pas que c'est l'erreur 1004 !

Dis nous à quelle ligne ça cloche, cela nous aiderais !


Cdt, Blaise
---- ---- ----


"amsa" a écrit dans le message de news:

Bonjour,
Voilà, je suis en train de créer un fichier Access qui me permet d'envoyer
des
données sur Excel. Jusque là pas de soucis (pour ainsi dire)
Mon bouton qui me permet de faire l'export marche bien au 1er clique, par
contre au 2ème, j'ai droit au message suivant:
"la méthode 'sheets' de l'objet '_global' a échoué"
Le truc c'est que je peux être amené à faire 2 fois (ou plus) le transfert
car
ca se fait a chaque fois en fonction de date.
Si je ferme le fichier Acces et que je le réouvre, alors pas de soucis, je
peux
faire un export.... mais pas 2!

Je vous donne mon code, si dès fois quelqu'un avait une idée il m'aiderait
grandement.

On Error GoTo Err_Commande4_Click

Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
Dim rst As DAO.Recordset
Dim maFeuil As String

' Créer un objet Excel (ce qui équivaut à démarrer Excel à distance)
Set xlApp = CreateObject("Excel.Application")

' Rendre Excel visible
xlApp.Visible = True
' xlApp.Visible = False

' Ouvrir Classeur
Set wbk = xlApp.Workbooks.Open("C:C'pil & face.xls")

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = True
End If
Next

' Regarde si la feuille STAT du mois existe
maFeuil = "Stat-" & Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
' Efface puis Rentre les données de Stat
With wbk.Sheets(maFeuil)
'Effacer destination
.Range("A2:C65535").Clear
End With

xlApp.Range("A2").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = "Stat-" & Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ajouter en entête des colonnes
xlApp.Range("A1").Value = "Dates (mois)"
xlApp.Range("B1").Value = "Villes"
xlApp.Range("C1").Value = "Nbr"

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

End If

' Regarde si la feuille du mois existe
maFeuil = Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
xlApp.Range("A1").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("I:I").Delete

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ajouter en entête des colonnes
Dim intI As Integer
For intI = 0 To rst.Fields.Count - 1
sht.Cells(1, intI + 1).Value = rst.Fields(intI).Name
Next

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("D:D").NumberFormat = "# ##0.00 €"
xlApp.Columns("E:E").NumberFormat = "# ##0.00 €"
xlApp.Columns("F:F").NumberFormat = "0.00%"
xlApp.Columns("G:G").NumberFormat = "# ##0.00 €"
xlApp.Columns("H:H").Delete

End If

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = False
End If
Next

' Sauvegarder et fermer le classeur
wbk.Worksheets("Accueil").Activate
wbk.Save
wbk.Close

' Quitter Excel
xlApp.Quit

' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing

' Valide l'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Mise_a_Jour_Export", , acAdd
DoCmd.SetWarnings True

Exit_Commande4_Click:
Exit Sub

Err_Commande4_Click:
MsgBox Err.Description
Resume Exit_Commande4_Click


Merci par avance !


Avatar
db
amsa a écrit :
>
...

' Sauvegarder et fermer le classeur
wbk.Worksheets("Accueil").Activate
wbk.Save
wbk.Close

' Quitter Excel
xlApp.Quit

' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing




Peut-être en ajoutant ici :

Set rst=Nothing

db
Avatar
amsa
Blaise Cacramp a écrit le 14/12/2009 à 20h31 :
Selon : Bonjour ou bonsoir

Ah ! et tu ne dis pas que c'est l'erreur 1004 !

Dis nous à quelle ligne ça cloche, cela nous aiderais !


Cdt, Blaise
---- ---- ----


"amsa" a écrit dans le
message de news:

Bonjour,
Voilà, je suis en train de créer un fichier Access qui me permet
d'envoyer
des
données sur Excel. Jusque là pas de soucis (pour ainsi dire)
Mon bouton qui me permet de faire l'export marche bien au 1er clique, par
contre au 2ème, j'ai droit au message suivant:
"la méthode 'sheets' de l'objet '_global' a
échoué"
Le truc c'est que je peux être amené à faire 2 fois (ou
plus) le transfert
car
ca se fait a chaque fois en fonction de date.
Si je ferme le fichier Acces et que je le réouvre, alors pas de soucis,
je
peux
faire un export.... mais pas 2!

Je vous donne mon code, si dès fois quelqu'un avait une idée il
m'aiderait
grandement.

On Error GoTo Err_Commande4_Click

Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
Dim rst As DAO.Recordset
Dim maFeuil As String

' Créer un objet Excel (ce qui équivaut à démarrer
Excel à distance)
Set xlApp = CreateObject("Excel.Application")

' Rendre Excel visible
xlApp.Visible = True
' xlApp.Visible = False

' Ouvrir Classeur
Set wbk = xlApp.Workbooks.Open("C:C'pil & face.xls")

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = True
End If
Next

' Regarde si la feuille STAT du mois existe
maFeuil = "Stat-" & Month(Calendar) & "-" &
Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
' Efface puis Rentre les données de Stat
With wbk.Sheets(maFeuil)
'Effacer destination
.Range("A2:C65535").Clear
End With

xlApp.Range("A2").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = "Stat-" & Month(Calendar) & "-" &
Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ajouter en entête des colonnes
xlApp.Range("A1").Value = "Dates (mois)"
xlApp.Range("B1").Value = "Villes"
xlApp.Range("C1").Value = "Nbr"

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

End If

' Regarde si la feuille du mois existe
maFeuil = Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
xlApp.Range("A1").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("I:I").Delete

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ajouter en entête des colonnes
Dim intI As Integer
For intI = 0 To rst.Fields.Count - 1
sht.Cells(1, intI + 1).Value = rst.Fields(intI).Name
Next

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("D:D").NumberFormat = "# ##0.00 €"
xlApp.Columns("E:E").NumberFormat = "# ##0.00 €"
xlApp.Columns("F:F").NumberFormat = "0.00%"
xlApp.Columns("G:G").NumberFormat = "# ##0.00 €"
xlApp.Columns("H:H").Delete

End If

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = False
End If
Next

' Sauvegarder et fermer le classeur
wbk.Worksheets("Accueil").Activate
wbk.Save
wbk.Close

' Quitter Excel
xlApp.Quit

' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing

' Valide l'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Mise_a_Jour_Export", , acAdd
DoCmd.SetWarnings True

Exit_Commande4_Click:
Exit Sub

Err_Commande4_Click:
MsgBox Err.Description
Resume Exit_Commande4_Click


Merci par avance !





Bonjour,

Le soucis, c'est que je ne sais pas du tout à quel endroit ça bloque, j'ai bien essayé de mettre les 3/4 du code en commentaire pour pouvoir cibler où se situait l'erreur, mais rien n'y fait, je ne vois pas où ça se trouve. La seule chose dont je suis "sur" c'est que j'ai le message d'erreur suivant "la méthode 'sheets' de l'objet '_global' a échoué" et que ça serait plutot sur le début du code.... Excel s'ouvre bien, le fichier aussi, mais après.... tout comme mon code, je suis perdu.

Encore merci de t'être pencher sur mon soucis.
Avatar
amsa
db a écrit le 14/12/2009 à 20h41 :
amsa a écrit :
>
...

' Sauvegarder et fermer le classeur
wbk.Worksheets("Accueil").Activate
wbk.Save
wbk.Close

' Quitter Excel
xlApp.Quit

' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing





Peut-être en ajoutant ici :

Set rst=Nothing

db


Bonjour,

Je viens de tester en ajoutant
Set rst = Nothing
Mais ça ne change rien, toujours le même problème lors du 2ème export.
Merci tout de même pour cette idée!
Avatar
Gilbert
Bonjour,

Peut-être en remplaçant

For Each sht In Sheets()
par
For Each sht In wbk.Sheets()

--
Cordialement,

Gilbert


"amsa" a écrit dans le message de
news:
Bonjour,
Voilà, je suis en train de créer un fichier Access qui me permet d'envoyer


des
données sur Excel. Jusque là pas de soucis (pour ainsi dire)
Mon bouton qui me permet de faire l'export marche bien au 1er clique, par
contre au 2ème, j'ai droit au message suivant:
"la méthode 'sheets' de l'objet '_global' a échoué"
Le truc c'est que je peux être amené à faire 2 fois (ou plus) le transfert


car
ca se fait a chaque fois en fonction de date.
Si je ferme le fichier Acces et que je le réouvre, alors pas de soucis, je


peux
faire un export.... mais pas 2!

Je vous donne mon code, si dès fois quelqu'un avait une idée il m'aiderait
grandement.

On Error GoTo Err_Commande4_Click

Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
Dim rst As DAO.Recordset
Dim maFeuil As String

' Créer un objet Excel (ce qui équivaut à démarrer Excel à distance)
Set xlApp = CreateObject("Excel.Application")

' Rendre Excel visible
xlApp.Visible = True
' xlApp.Visible = False

' Ouvrir Classeur
Set wbk = xlApp.Workbooks.Open("C:C'pil & face.xls")

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = True
End If
Next

' Regarde si la feuille STAT du mois existe
maFeuil = "Stat-" & Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
' Efface puis Rentre les données de Stat
With wbk.Sheets(maFeuil)
'Effacer destination
.Range("A2:C65535").Clear
End With

xlApp.Range("A2").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = "Stat-" & Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ajouter en entête des colonnes
xlApp.Range("A1").Value = "Dates (mois)"
xlApp.Range("B1").Value = "Villes"
xlApp.Range("C1").Value = "Nbr"

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

End If

' Regarde si la feuille du mois existe
maFeuil = Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
xlApp.Range("A1").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("I:I").Delete

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ajouter en entête des colonnes
Dim intI As Integer
For intI = 0 To rst.Fields.Count - 1
sht.Cells(1, intI + 1).Value = rst.Fields(intI).Name
Next

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("D:D").NumberFormat = "# ##0.00 €"
xlApp.Columns("E:E").NumberFormat = "# ##0.00 €"
xlApp.Columns("F:F").NumberFormat = "0.00%"
xlApp.Columns("G:G").NumberFormat = "# ##0.00 €"
xlApp.Columns("H:H").Delete

End If

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = False
End If
Next

' Sauvegarder et fermer le classeur
wbk.Worksheets("Accueil").Activate
wbk.Save
wbk.Close

' Quitter Excel
xlApp.Quit

' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing

' Valide l'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Mise_a_Jour_Export", , acAdd
DoCmd.SetWarnings True

Exit_Commande4_Click:
Exit Sub

Err_Commande4_Click:
MsgBox Err.Description
Resume Exit_Commande4_Click


Merci par avance !


Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

En règle générale, une erreur 1004 qui survient à la deuxième exécution du
code est inhérent à l'application (dixit Microsoft).

Regardez bien le code de la ligne 22 ci-dessous
La syntaxe toute logique devrait être « .Range(.Cells(1, 2), .Cells(L,
2)).Font.Italic = True » Elle fonctionne une fois, mais pas deux de suite
!

Cdt, Blaise
---- ---- ----

Sub Demo_Xl_Rst()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim L As Long
Dim C As Integer

Dim sSql As String
Dim Rst As New ADODB.Recordset

1 sSql = "SELECT Tbl_Poste.CP_Code, Tbl_Poste.CP_Localite" _
& " FROM Tbl_Poste;"
2 Rst.Open sSql, CurrentProject.Connection, adOpenStatic
3 If Rst.EOF Then
4 Beep
5 MsgBox "pas d'enregistrements"
6 Exit Sub 'pas d'enregistrements
7 Else
8 Set xlApp = CreateObject("Excel.Application")
9 Set xlBook = xlApp.Workbooks.Add 'dans le cas d'un classeur
vierge
' ou Set xlBook = xlApp.Workbooks.Open("x:cheminnom.xlt")
'dans le cas d'un modèle _
recommandé quand la mise en forme est prévisible
10 Set xlSheet = xlBook.Worksheets("Feuil1") 'ou son vrai nom
dans un modèle (conseillé)
11 xlApp.Calculation = xlCalculationManual 'Recommandé si vous
écrivez des formules dans les cellules _
Accélère le
traitement spectaculairement s'il y en a beaucoup
12 xlApp.Visible = False 'ou True (False plus rapide dans le
cas d'un grand tableau) _
Laisser à True lors des tests
13 DoCmd.Hourglass True 'mettre en remarque durant la phase de
tests

14 With xlSheet
' Ecrire quelques valeurs
15 For L = 1 To Rst.RecordCount
16 For C = 1 To 2
17 .Cells(L, C) = Rst(C - 1)
18 Next C
19 Rst.MoveNext
20 Next L
21 Rst.Close
22 .Range(xlSheet.Cells(1, 2), xlSheet.Cells(L,
2)).Font.Italic = True ' sans le xlSheet devant les .cells, _

l'erreur 1004 se déclenchera à la seconde éxécution.
23 End With
24 DoCmd.Hourglass False
25 xlApp.Visible = True '(s'il avait été à false en début de
procédure)
26 xlApp.Calculation = xlCalculationAutomatic 'remettre le
calcul automatique en route
' Libérer les variables objet
27 Set Rst = Nothing
28 Set xlSheet = Nothing
29 Set xlBook = Nothing
30 Set xlApp = Nothing
31 End If
End Sub
Avatar
amsa
Gilbert a écrit le 15/12/2009 à 18h56 :
Bonjour,

Peut-être en remplaçant

For Each sht In Sheets()
par
For Each sht In wbk.Sheets()

--
Cordialement,

Gilbert


"amsa" a écrit dans le
message de
news:
Bonjour,
Voilà, je suis en train de créer un fichier Access qui me permet
d'envoyer



des
données sur Excel. Jusque là pas de soucis (pour ainsi dire)
Mon bouton qui me permet de faire l'export marche bien au 1er clique, par
contre au 2ème, j'ai droit au message suivant:
"la méthode 'sheets' de l'objet '_global' a
échoué"
Le truc c'est que je peux être amené à faire 2 fois (ou
plus) le transfert



car
ca se fait a chaque fois en fonction de date.
Si je ferme le fichier Acces et que je le réouvre, alors pas de soucis,
je



peux
faire un export.... mais pas 2!

Je vous donne mon code, si dès fois quelqu'un avait une idée il
m'aiderait
grandement.

On Error GoTo Err_Commande4_Click

Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
Dim rst As DAO.Recordset
Dim maFeuil As String

' Créer un objet Excel (ce qui équivaut à démarrer
Excel à distance)
Set xlApp = CreateObject("Excel.Application")

' Rendre Excel visible
xlApp.Visible = True
' xlApp.Visible = False

' Ouvrir Classeur
Set wbk = xlApp.Workbooks.Open("C:C'pil & face.xls")

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = True
End If
Next

' Regarde si la feuille STAT du mois existe
maFeuil = "Stat-" & Month(Calendar) & "-" &
Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
' Efface puis Rentre les données de Stat
With wbk.Sheets(maFeuil)
'Effacer destination
.Range("A2:C65535").Clear
End With

xlApp.Range("A2").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = "Stat-" & Month(Calendar) & "-" &
Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Stat_Export"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_2")

' Ajouter en entête des colonnes
xlApp.Range("A1").Value = "Dates (mois)"
xlApp.Range("B1").Value = "Villes"
xlApp.Range("C1").Value = "Nbr"

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

End If

' Regarde si la feuille du mois existe
maFeuil = Month(Calendar) & "-" & Year(Calendar)
If FeuilleExiste(wbk, maFeuil) Then

wbk.Worksheets(maFeuil).Activate
xlApp.Range("A1").Select
While IsEmpty(xlApp.ActiveCell) = False
xlApp.ActiveCell.Offset(1, 0).Activate
Wend

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ecrire les valeurs
xlApp.ActiveCell.CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("I:I").Delete

Else

' Instancier la feuille active dans le classeur
Set sht = wbk.Worksheets.Add
Set sht = wbk.ActiveSheet
sht.Name = Month(Calendar) & "-" & Year(Calendar)

' Ouverture de la requête d'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Requête_Export_Final"
DoCmd.SetWarnings True

Set rst = CurrentDb.OpenRecordset("Temporaire_1")

' Ajouter en entête des colonnes
Dim intI As Integer
For intI = 0 To rst.Fields.Count - 1
sht.Cells(1, intI + 1).Value = rst.Fields(intI).Name
Next

' Ecrire les valeurs
xlApp.Range("A2").CopyFromRecordset rst

' Mise en Forme
xlApp.Columns("D:D").NumberFormat = "# ##0.00 €"
xlApp.Columns("E:E").NumberFormat = "# ##0.00 €"
xlApp.Columns("F:F").NumberFormat = "0.00%"
xlApp.Columns("G:G").NumberFormat = "# ##0.00 €"
xlApp.Columns("H:H").Delete

End If

' Affiche les onglets cachés
For Each sht In Sheets()
If sht.Index > Sheets("Accueil").Index Then
sht.Visible = False
End If
Next

' Sauvegarder et fermer le classeur
wbk.Worksheets("Accueil").Activate
wbk.Save
wbk.Close

' Quitter Excel
xlApp.Quit

' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing

' Valide l'Exportation
DoCmd.SetWarnings False
DoCmd.OpenQuery "Mise_a_Jour_Export", , acAdd
DoCmd.SetWarnings True

Exit_Commande4_Click:
Exit Sub

Err_Commande4_Click:
MsgBox Err.Description
Resume Exit_Commande4_Click


Merci par avance !





Pas mieux, toujours le meme soucis, mais merci tout de meme de t'être penché sur mon problème !