OVH Cloud OVH Cloud

C'EST ENCORE MOI!

4 réponses
Avatar
Maïté
Bonjour,

Lors de l'export de 2 requ=EAtes ACCESS vers 1 fichier=20
EXCEL (sur 2 feuilles diff=E9rentes!) j'ai un ptit probl=E8me.

Pour la premi=E8re requ=EAte export=E9 RAS, par contre pour la=20
deuxi=E8me c'est la cata!
Seulement quelques enregistrements sont transf=E9r=E9s et un=20
message d'erreur appara=EEt :=20

Erreur d'ex=E9cution '50290' :=20
Erreur d=E9finie par l'application ou par l'objet
Lorsque je d=E9bug c'est la ligne ci dessous qui est=20
entour=E9 en jaune :
#### .Cells(intLigne, intColonne) =3D Fld.Value####

Pr info voici mon code VB:
Private Sub Commande8_Click()
ExportationVersExcel_DAO2
End Sub

'REPORTING VERS EXCEL
Sub ExportationVersExcel_DAO2()
Dim xl As Excel.Application
Dim wbk As Excel.Workbook
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim Fld As DAO.Field
Dim intColonne As Integer
Dim intLigne As Integer

'Ouvrir la requ=EAte Bilan Eb
Set db =3D CurrentDb()
Set rst =3D db.OpenRecordset("Bilan CTC Eb")

'D=E9marrer Excel
Set xl =3D New Excel.Application
xl.Visible =3D True

With xl
'Cr=E9er un nouveau classeur
Set wbk =3D .Workbooks.Add
=20
'Renommer la 1=E8re feuille du classeur
wbk.Sheets("Feuil1").Name =3D "Bilan Eb"
=20
With wbk.Sheets("Bilan Eb")
'Transf=E9rer les noms de champs
intColonne =3D 0
For Each Fld In rst.Fields
.Cells(1, intColonne + 1) =3D Fld.Name
intColonne =3D intColonne + 1
Next
=20
'Transf=E9rer les enregistrements
intLigne =3D 2
While Not rst.EOF
intColonne =3D 1
For Each Fld In rst.Fields
.Cells(intLigne, intColonne) =3D Fld.Value
intColonne =3D intColonne + 1
Next
=20
'Enregistrement suivant
rst.MoveNext
intLigne =3D intLigne + 1
Wend
End With

End With


'Ouvrir la requ=EAte R=E9paration Eb (2=E8me requ=EAte)
Set db =3D CurrentDb()
Set rst =3D db.OpenRecordset("Bilan CTC Eb R=E9paration")

With xl

'Renommer la 2=E8me feuille du classeur
wbk.Sheets("Feuil2").Name =3D "R=E9paration Eb"
=20
With wbk.Sheets("R=E9paration Eb")
'Transf=E9rer les noms de champs
intColonne =3D 0
For Each Fld In rst.Fields
.Cells(1, intColonne + 1) =3D Fld.Name
intColonne =3D intColonne + 1
Next
=20
'Transf=E9rer les enregistrements
intLigne =3D 2
While Not rst.EOF
intColonne =3D 1
For Each Fld In rst.Fields
.Cells(intLigne, intColonne) =3D Fld.Value
intColonne =3D intColonne + 1
Next
=20
'Enregistrement suivant
rst.MoveNext
intLigne =3D intLigne + 1
Wend
End With

End With

End Sub

Merci de m'aider

4 réponses

Avatar
Eric
re,

Je vois rien d'anormal dans le code.
Combien de lignes renvoie ta 2eme requête? Car tu es limitée à 65536 lignes
sur une feuille Excel.

A+
Eric

"Maïté" écrivait news:059301c49801
$a0916950$:

Bonjour,

Lors de l'export de 2 requêtes ACCESS vers 1 fichier
EXCEL (sur 2 feuilles différentes!) j'ai un ptit problème.

Pour la première requête exporté RAS, par contre pour la
deuxième c'est la cata!
Seulement quelques enregistrements sont transférés et un
message d'erreur apparaît :

Erreur d'exécution '50290' :
Erreur définie par l'application ou par l'objet
Lorsque je débug c'est la ligne ci dessous qui est
entouré en jaune :
#### .Cells(intLigne, intColonne) = Fld.Value####



Avatar
Maïté
La 2ème requête comporte 250 enregistrements, seulement
une quarantaine sont renvoyés.

-----Message d'origine-----
re,

Je vois rien d'anormal dans le code.
Combien de lignes renvoie ta 2eme requête? Car tu es
limitée à 65536 lignes

sur une feuille Excel.

A+
Eric

"Maïté" écrivait
news:059301c49801

$a0916950$:

Bonjour,

Lors de l'export de 2 requêtes ACCESS vers 1 fichier
EXCEL (sur 2 feuilles différentes!) j'ai un ptit
problème.



Pour la première requête exporté RAS, par contre pour
la


deuxième c'est la cata!
Seulement quelques enregistrements sont transférés et
un


message d'erreur apparaît :

Erreur d'exécution '50290' :
Erreur définie par l'application ou par l'objet
Lorsque je débug c'est la ligne ci dessous qui est
entouré en jaune :
#### .Cells(intLigne, intColonne) = Fld.Value####

.





Avatar
Eric
re,

Le problème viendrait du fait que tu bascules d'Access vers Excel avec la
souris alors que le transfert des données n'est pas terminé (Par exemple,
tu cliques sur une des feuilles du classeur alors que la mise à jour de
la 2eme feuille du classeur n'est pas complete).

sur GOOGLE : un problème similaire :
http://www.forum.moteurprog.com/index.php?url=FORUM_msg.php&ID_topic(79

(lien sur une seule ligne)

Donc une solution consisterait à mettre l'instruction :
xl.Visible = True
à la fin de la procédure avant le End Sub.

A+
Eric

PS: Pour ta requête paramétrée, le problème est résolu ?


"Maïté" écrivait news:05ba01c49808
$67a196e0$:

La 2ème requête comporte 250 enregistrements, seulement
une quarantaine sont renvoyés.

-----Message d'origine-----
re,

Je vois rien d'anormal dans le code.
Combien de lignes renvoie ta 2eme requête? Car tu es
limitée à 65536 lignes

sur une feuille Excel.

A+
Eric

"Maïté" écrivait
news:059301c49801

$a0916950$:

Bonjour,

Lors de l'export de 2 requêtes ACCESS vers 1 fichier
EXCEL (sur 2 feuilles différentes!) j'ai un ptit
problème.



Pour la première requête exporté RAS, par contre pour
la


deuxième c'est la cata!
Seulement quelques enregistrements sont transférés et
un


message d'erreur apparaît :

Erreur d'exécution '50290' :
Erreur définie par l'application ou par l'objet
Lorsque je débug c'est la ligne ci dessous qui est
entouré en jaune :
#### .Cells(intLigne, intColonne) = Fld.Value####

.








Avatar
Crusoe13

Bonjour,

Lors de l'export de 2 requêtes ACCESS vers 1 fichier
EXCEL (sur 2 feuilles différentes!) j'ai un ptit problème.

Pour la première requête exporté RAS, par contre pour la
deuxième c'est la cata!
Seulement quelques enregistrements sont transférés et un
message d'erreur apparaît :

Erreur d'exécution '50290' :
Erreur définie par l'application ou par l'objet
Lorsque je débug c'est la ligne ci dessous qui est
entouré en jaune :
#### .Cells(intLigne, intColonne) = Fld.Value####

Pr info voici mon code VB:
Private Sub Commande8_Click()
ExportationVersExcel_DAO2
End Sub

'REPORTING VERS EXCEL
Sub ExportationVersExcel_DAO2()
Dim xl As Excel.Application
Dim wbk As Excel.Workbook
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim Fld As DAO.Field
Dim intColonne As Integer
Dim intLigne As Integer

'Ouvrir la requête Bilan Eb
Set db = CurrentDb()
Set rst = db.OpenRecordset("Bilan CTC Eb")

'Démarrer Excel
Set xl = New Excel.Application
xl.Visible = True

With xl
'Créer un nouveau classeur
Set wbk = .Workbooks.Add

'Renommer la 1ère feuille du classeur
wbk.Sheets("Feuil1").Name = "Bilan Eb"

With wbk.Sheets("Bilan Eb")
'Transférer les noms de champs
intColonne = 0
For Each Fld In rst.Fields
.Cells(1, intColonne + 1) = Fld.Name
intColonne = intColonne + 1
Next

'Transférer les enregistrements
intLigne = 2
While Not rst.EOF
intColonne = 1
For Each Fld In rst.Fields
.Cells(intLigne, intColonne) = Fld.Value
intColonne = intColonne + 1
Next

'Enregistrement suivant
rst.MoveNext
intLigne = intLigne + 1
Wend
End With

End With


'Ouvrir la requête Réparation Eb (2ème requête)
Set db = CurrentDb()
Set rst = db.OpenRecordset("Bilan CTC Eb Réparation")

With xl

'Renommer la 2ème feuille du classeur
wbk.Sheets("Feuil2").Name = "Réparation Eb"

With wbk.Sheets("Réparation Eb")
'Transférer les noms de champs
intColonne = 0
For Each Fld In rst.Fields
.Cells(1, intColonne + 1) = Fld.Name
intColonne = intColonne + 1
Next

'Transférer les enregistrements
intLigne = 2
While Not rst.EOF
intColonne = 1
For Each Fld In rst.Fields
.Cells(intLigne, intColonne) = Fld.Value
intColonne = intColonne + 1
Next

'Enregistrement suivant
rst.MoveNext
intLigne = intLigne + 1
Wend
End With

End With

End Sub

Merci de m'aider

Désolé, ceci n'est pas une réponse directe mais des conseils pour déboguer

vous-même le code :

1 - Couper en deux, écrire une procédure distincte pour chacune des requêtes
à exporter à laquelle vous passerez le nom de la requête et la nouvelle
feuille du classeur MsEXCEL en argument, puisque tout le reste semble
identique.
Ce serait un code vraiment plus performant, plus facile à déboguer, et
réutilisable !
Qui plus est quasiment déjà fait étant donnée la manière dont vous l'avez
écrit (manipulation des objets par indexage).

2 - Il est très important de libérer les variables objet avant de quitter
chaque procédure, aux dernières nouvelles MsACCESS ne le fait pas tout seul :
Avant Exit Sub écrire Set "nom de la variable objet" = Nothing.
Peut-être est-ce ceci qui pose problème.

3 - Déboguer en mode pas-à-pas détaillé, vérifier à mesure du déroulement
toutes les valeurs prises par les différentes variables dans les boucles, au
besoin utiliser provisoirement des instructions "Debug.Print" qui
s'afficheront dans la fenêtre d'exécution.

J'espère que ceci vous sera utile.
Bonne continuation !