Comment accèder à une cellule sur un fichier Excel exporté par Access

Le
dpouit
Bonjour,

Dans un module, j'ai fait :
DoCmd.RunCommand acCmdOutputToExcel
pour envoyer le contenu de mon formulaire vers Excel.

Tout se passe bien, le contenu de mon formulaire est bien envoyé vers
Excel. Mais je voudrais pouvoir faire de la mise en forme sous Excel
en automatique à partir de mon module. Par exemple, supprimer la
première colonne, modifier le titre de mes colonnes pour remplacer le
nom des rubriques dans ma table par un libellé compréhensible par
l'utilisateur.

J'ai récupéré du code sur le groupe de discussion + aide Access, mais
il ne se passe rien (l'appli Excel ne se ferme même pas).

Voilà ce que j'ai fait :

' Variable devant contenir la référence à Microsoft
' Excel.
Dim MyXL As Object

' Indicateur pour la libération à la fin.
Dim ExcelWasNotRunning As Boolean

' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next ' Retarde la récupération
' d'erreur.
' La fonction Getobject appelée sans le premier
' argument renvoie une référence à une occurrence de
' l'application. Si l'application n'est pas en
' exécution, une erreur se produit. Notez la virgule

' utilisée en tant que premier espace réservé
' d'argument.
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Efface l'objet Err si une erreur s'est
' produite.

' Définit la variable objet pour qu'elle fasse
' référence au fichier à ouvrir.
Set MyXL = GetObject(, "Excel.Sheet")

' Affiche Microsoft Excel par l'intermédiaire de sa
' propriété Application. Affiche ensuite la fenêtre

' contenant le fichier à l'aide de la collection
' Windows de la référence à l'objet MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True

MyXL.Parent.Worksheets(1).Activate
MyXL.Parent.Worksheets(1).Columns("A:A").Select
MyXL.Parent.Worksheets(1).Selection.Delete Shift:=xlToLeft


If ExcelWasNotRunning = True Then MyXL.Application.Quit

Set MyXL = Nothing ' Libère la référence à
' l'application et à la feuille de
' calcul.

Que dois-je faire ? Où est-ce que je me suis plantée ?

Merci pour votre aide.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Raymond [mvp]
Le #5081061
Bonjour.

Pour commencer dans l'automation office, toujours utiliser une nouvelle
instance de l'application. l'utilisation d'une instance chargée c'est pour
plus tard, car qui te dit que tu as le droit d'utiliser une instance en
cours ?

regarde les exemples sur la page : http://access.seneque.free.fr/excel.htm

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Dani?le" news:
Bonjour,

Dans un module, j'ai fait :
DoCmd.RunCommand acCmdOutputToExcel
pour envoyer le contenu de mon formulaire vers Excel.

Tout se passe bien, le contenu de mon formulaire est bien envoyé vers
Excel. Mais je voudrais pouvoir faire de la mise en forme sous Excel
en automatique à partir de mon module. Par exemple, supprimer la
première colonne, modifier le titre de mes colonnes pour remplacer le
nom des rubriques dans ma table par un libellé compréhensible par
l'utilisateur.

J'ai récupéré du code sur le groupe de discussion + aide Access, mais
il ne se passe rien (l'appli Excel ne se ferme même pas).

Voilà ce que j'ai fait :

' Variable devant contenir la référence à Microsoft
' Excel.
Dim MyXL As Object

' Indicateur pour la libération à la fin.
Dim ExcelWasNotRunning As Boolean

' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next ' Retarde la récupération
' d'erreur.
' La fonction Getobject appelée sans le premier
' argument renvoie une référence à une occurrence de
' l'application. Si l'application n'est pas en
' exécution, une erreur se produit. Notez la virgule

' utilisée en tant que premier espace réservé
' d'argument.
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Efface l'objet Err si une erreur s'est
' produite.

' Définit la variable objet pour qu'elle fasse
' référence au fichier à ouvrir.
Set MyXL = GetObject(, "Excel.Sheet")

' Affiche Microsoft Excel par l'intermédiaire de sa
' propriété Application. Affiche ensuite la fenêtre

' contenant le fichier à l'aide de la collection
' Windows de la référence à l'objet MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True

MyXL.Parent.Worksheets(1).Activate
MyXL.Parent.Worksheets(1).Columns("A:A").Select
MyXL.Parent.Worksheets(1).Selection.Delete Shift:=xlToLeft


If ExcelWasNotRunning = True Then MyXL.Application.Quit

Set MyXL = Nothing ' Libère la référence à
' l'application et à la feuille de
' calcul.

Que dois-je faire ? Où est-ce que je me suis plantée ?

Merci pour votre aide.


dpouit
Le #5077971
Bonjour,

Donc, si j'ai bien compris, ce n'est pas parce que j'ai le fichier
affiché sous Excel que je peux faire des manip dessus.
Dans ce cas, comment dois-je faire ?
le "DoCmd.RunCommand acCmdOutputToExcel" que j'utilise est
complétement pris en charge par Microsoft. Je ne connais pas le chemin
du fichier créé. Pour pouvoir utiliser une nouvelle instance, il
faudrait que je puisse ouvrir ce fichier tout en lançant une nouvelle
instance d'Excel. Est-ce bien celà ? Or le répertoire utilisé est
celui pas défaut d'Excel et non pas celui d'Access. Comment faire pour
le récupérer ?
Par ailleurs, pour ouvrir le fichier, il faudrait qu'il soit fermé.
Comment faire pour fermer un fichier de l'instance chargée (ou fermer
l'instance) ?

Pour info, au départ mon problème vient des temps de réponse. Avant
j'avais une requête avec 11 critères de sélection (renseignés ou
non).J'ai résolu mon problème en mettant un filtre sur mon formulaire.
Mais pour envoyer le résultat de la requête vers Excel, soit j'avais
des temps de réponse épouvantables mais avec les données que je
voulais, soit il fallait trouver une autre solution. D'où le
"DoCmd.RunCommand acCmdOutputToExcel" qui me permet d'exporter vers
Excel le contenu de ma requête sur laquelle est basé mon formulaire.
Mais j'ai des colonnes en trop et les titres des colonnes ne sont pas
conviviaux pour les utilisateurs. Mais peut-être y a-t-il une
meilleure solution ?

Merci de votre aide.


"Raymond [mvp]"
Bonjour.

Pour commencer dans l'automation office, toujours utiliser une nouvelle
instance de l'application. l'utilisation d'une instance chargée c'est pour
plus tard, car qui te dit que tu as le droit d'utiliser une instance en
cours ?

regarde les exemples sur la page : http://access.seneque.free.fr/excel.htm

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Dani?le" news:
Bonjour,

Dans un module, j'ai fait :
DoCmd.RunCommand acCmdOutputToExcel
pour envoyer le contenu de mon formulaire vers Excel.

Tout se passe bien, le contenu de mon formulaire est bien envoyé vers
Excel. Mais je voudrais pouvoir faire de la mise en forme sous Excel
en automatique à partir de mon module. Par exemple, supprimer la
première colonne, modifier le titre de mes colonnes pour remplacer le
nom des rubriques dans ma table par un libellé compréhensible par
l'utilisateur.

J'ai récupéré du code sur le groupe de discussion + aide Access, mais
il ne se passe rien (l'appli Excel ne se ferme même pas).

Voilà ce que j'ai fait :

' Variable devant contenir la référence à Microsoft
' Excel.
Dim MyXL As Object

' Indicateur pour la libération à la fin.
Dim ExcelWasNotRunning As Boolean

' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next ' Retarde la récupération
' d'erreur.
' La fonction Getobject appelée sans le premier
' argument renvoie une référence à une occurrence de
' l'application. Si l'application n'est pas en
' exécution, une erreur se produit. Notez la virgule

' utilisée en tant que premier espace réservé
' d'argument.
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Efface l'objet Err si une erreur s'est
' produite.

' Définit la variable objet pour qu'elle fasse
' référence au fichier à ouvrir.
Set MyXL = GetObject(, "Excel.Sheet")

' Affiche Microsoft Excel par l'intermédiaire de sa
' propriété Application. Affiche ensuite la fenêtre

' contenant le fichier à l'aide de la collection
' Windows de la référence à l'objet MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True

MyXL.Parent.Worksheets(1).Activate
MyXL.Parent.Worksheets(1).Columns("A:A").Select
MyXL.Parent.Worksheets(1).Selection.Delete Shift:=xlToLeft


If ExcelWasNotRunning = True Then MyXL.Application.Quit

Set MyXL = Nothing ' Libère la référence à
' l'application et à la feuille de
' calcul.

Que dois-je faire ? Où est-ce que je me suis plantée ?

Merci pour votre aide.




Raymond [mvp]
Le #5077961
Bonjour.

Essaie de passer par vba pour tout, comme ceci:
1- faire une requête avec seulement les champs nécessaires
2- indiquer des alias si tu veux que les noms des colonnes ne soient pas
ceux de access
3- exporter la requête par la commande :
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9,
"nomdelarequete", "chemindufichierexcel.xls", True
4- passer par automation pour faire certaines modifs
mais qui ne seront pas nombreuses si ta requête est bien faite.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Dani?le" news:
Bonjour,

Donc, si j'ai bien compris, ce n'est pas parce que j'ai le fichier
affiché sous Excel que je peux faire des manip dessus.
Dans ce cas, comment dois-je faire ?
le "DoCmd.RunCommand acCmdOutputToExcel" que j'utilise est
complétement pris en charge par Microsoft. Je ne connais pas le chemin
du fichier créé. Pour pouvoir utiliser une nouvelle instance, il
faudrait que je puisse ouvrir ce fichier tout en lançant une nouvelle
instance d'Excel. Est-ce bien celà ? Or le répertoire utilisé est
celui pas défaut d'Excel et non pas celui d'Access. Comment faire pour
le récupérer ?
Par ailleurs, pour ouvrir le fichier, il faudrait qu'il soit fermé.
Comment faire pour fermer un fichier de l'instance chargée (ou fermer
l'instance) ?

Pour info, au départ mon problème vient des temps de réponse. Avant
j'avais une requête avec 11 critères de sélection (renseignés ou
non).J'ai résolu mon problème en mettant un filtre sur mon formulaire.
Mais pour envoyer le résultat de la requête vers Excel, soit j'avais
des temps de réponse épouvantables mais avec les données que je
voulais, soit il fallait trouver une autre solution. D'où le
"DoCmd.RunCommand acCmdOutputToExcel" qui me permet d'exporter vers
Excel le contenu de ma requête sur laquelle est basé mon formulaire.
Mais j'ai des colonnes en trop et les titres des colonnes ne sont pas
conviviaux pour les utilisateurs. Mais peut-être y a-t-il une
meilleure solution ?

Merci de votre aide.


dpouit
Le #5370051
Bonjour,

Quand tu dis "nomdelarequête", il s'agit bien d'une variable définie
dans VBA et contenant le string de ma requête ?

Encore merci.



"Raymond [mvp]"
Bonjour.

Essaie de passer par vba pour tout, comme ceci:
1- faire une requête avec seulement les champs nécessaires
2- indiquer des alias si tu veux que les noms des colonnes ne soient pas
ceux de access
3- exporter la requête par la commande :
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9,
"nomdelarequete", "chemindufichierexcel.xls", True
4- passer par automation pour faire certaines modifs
mais qui ne seront pas nombreuses si ta requête est bien faite.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Dani?le" news:
Bonjour,

Donc, si j'ai bien compris, ce n'est pas parce que j'ai le fichier
affiché sous Excel que je peux faire des manip dessus.
Dans ce cas, comment dois-je faire ?
le "DoCmd.RunCommand acCmdOutputToExcel" que j'utilise est
complétement pris en charge par Microsoft. Je ne connais pas le chemin
du fichier créé. Pour pouvoir utiliser une nouvelle instance, il
faudrait que je puisse ouvrir ce fichier tout en lançant une nouvelle
instance d'Excel. Est-ce bien celà ? Or le répertoire utilisé est
celui pas défaut d'Excel et non pas celui d'Access. Comment faire pour
le récupérer ?
Par ailleurs, pour ouvrir le fichier, il faudrait qu'il soit fermé.
Comment faire pour fermer un fichier de l'instance chargée (ou fermer
l'instance) ?

Pour info, au départ mon problème vient des temps de réponse. Avant
j'avais une requête avec 11 critères de sélection (renseignés ou
non).J'ai résolu mon problème en mettant un filtre sur mon formulaire.
Mais pour envoyer le résultat de la requête vers Excel, soit j'avais
des temps de réponse épouvantables mais avec les données que je
voulais, soit il fallait trouver une autre solution. D'où le
"DoCmd.RunCommand acCmdOutputToExcel" qui me permet d'exporter vers
Excel le contenu de ma requête sur laquelle est basé mon formulaire.
Mais j'ai des colonnes en trop et les titres des colonnes ne sont pas
conviviaux pour les utilisateurs. Mais peut-être y a-t-il une
meilleure solution ?

Merci de votre aide.




Raymond [mvp]
Le #5370041
Bonjour.

je crois que dans ce cas c'est bien le nom d'une requête enregistrée, mais
quand ça marchera avec la requête enregistrée, tu fais un essai avec un
texte sql.
soit tu indiques une variable qui contient le nom de ta requête soit le nom
de ta requête entouré de "
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Dani?le" news:
Bonjour,

Quand tu dis "nomdelarequête", il s'agit bien d'une variable définie
dans VBA et contenant le string de ma requête ?

Encore merci.


Publicité
Poster une réponse
Anonyme