Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/10/2011, 17h06   #1
Membre Expert
 
Avatar de Gabout
 
Inscription : mai 2006
Messages : 1 298
Détails du profil
Informations personnelles :
Âge : 57
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : mai 2006
Messages : 1 298
Points : 1 289
Points : 1 289
Par défaut Dimensionnement tableau Excel depuis Access

Bonjour,

Je ne parviens pas à redimensionner un tableau Excel créer depuis Access.

La création du tableau fonctionne très bien et à la fin de la procédure, Excel n'est plus en mémoire.

Lorsque je rajoute du code pour redimensionner les colonnes ou affecter un nouveau libellé, je ne parviens plus à ouvrir le fichier Excel et de plus, même en refermant Excel, il demeure en mémoire (cf. lignes 36 à 38).

Une idée ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'---------------------------------------------------------------------------------------
' Procédure : cmdExportExcel_Click
' Autheur   : Gabout
' Date      : 07/10/2011
' Utilité   : exporter les données vers Excel
'---------------------------------------------------------------------------------------
Private Sub cmdExportExcel_Click()
  ' declarer les variables
  Dim qd As QueryDef
  Dim sSQL As String
  Dim sFic As String
  Dim xlApp As Excel.Application
  Dim xlSheet As Excel.Worksheet
  Dim xlBook As Excel.Workbook
  ' verifier si la requete existe et la supprimer si c'est le cas
  If testQuery("Requete_Temporaire") = True Then DoCmd.DeleteObject acQuery, "Requete_Temporaire"
  ' créer la requete
  sSQL = "SELECT tFAM.famlib, tART.artid, tART.artlib, tDET.detref, tDET.dettai, tUNI.unilib, tDET.detpuht, '' AS Quantité " & _
         "FROM tUNI INNER JOIN (tFAM INNER JOIN (tART INNER JOIN tDET ON tART.artid = tDET.detart) ON tFAM.famid = tART.artfam) ON tUNI.uniid = tART.artuni " & _
         "WHERE tART.artact=Yes " & _
         "ORDER BY tART.artid;"
  Set qd = CurrentDb.CreateQueryDef("Requete_Temporaire", sSQL)
  ' nommer le fichier d'export
  sFic = CurrentProject.Path & "\EXP_" & Format(DMax("[hisdat]", "tHIS"), "yyyymmdd") & ".xls"
  ' exporter la requete
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Requete_Temporaire", sFic
  ' effacer la requete
  DoCmd.DeleteObject acQuery, "Requete_Temporaire"
  ' instancifier
  Set xlApp = CreateObject("Excel.application")
  Set xlBook = xlApp.Workbooks.Open(sFic)
  'Set xlSheet = xlBook.Worksheets("Requete_Temporaire")
 
' C'EST A PARTIR DE CE RAJOUT DE 3 LIGNES QUE CELA COINCE :
' EXCEL EST TOUJOURS EN MEMOIRE ET LES DONNEES N'APPARAISSENT PAS
  Sheets("Requete_Temporaire").Select
  Range("A1").FormulaR1C1 = "Catégorie"
  Columns("A:A").ColumnWidth = 28
' SI JE SUPPRIME LES 3 LIGNES, PLUS DE PROBLEME : EXCEL N'EST
' PLUS EN MEMOIRE
  '
  ' fermeture
  xlBook.Save
  xlApp.Quit
  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub
__________________
Gabout
N'oubliez pas le premier réflexe avant de poser une question : consultez les liens en bas de page
Gabout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 18h36   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Essaie comme ça
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  ' instancifier
  Set xlApp = CreateObject("Excel.application")
  Set xlBook = xlApp.Workbooks.Open(sFic)
  Set xlSheet = xlBook.Worksheets("Requete_Temporaire")
 
  xlSheet.Range("A1").FormulaR1C1 = "Catégorie"
  xlSheet.Columns("A:A").ColumnWidth = 28
 
  ' fermeture
  xlBook.Save
  Set xlSheet = Nothing
  Set xlBook = Nothing
  xlApp.Quit
  Set xlApp = Nothing
Ce que j'ai changé :
Pas de codage implicite (utilisation de Sheets, Range ou Columns sans désigner d'objet).
Libération des variables objet Excel dans l'ordre inverse de leur initialisation.
C'est à dire du membre le plus éloigné de Excel.Application (xlSheet) vers le membre le plus proche (xlApp).

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 20h17   #3
Membre Expert
 
Avatar de Gabout
 
Inscription : mai 2006
Messages : 1 298
Détails du profil
Informations personnelles :
Âge : 57
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : mai 2006
Messages : 1 298
Points : 1 289
Points : 1 289
Nickel, merci LedZeppII
__________________
Gabout
N'oubliez pas le premier réflexe avant de poser une question : consultez les liens en bas de page
Gabout est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h33.


 
 
 
 
Partenaires

Hébergement Web