je suis à la recherche d'une procédure à mettre dans XL qui me permettrait
de lancer l'impression ou la prévisualisation d'un état Access depuis XL.
En fait le fichier XL est attaché au fichier Access, et après mise à jour
des données dans XL, j'aimerais pourvoir lancer l'impression sans sortir
d'Excel et si possible en refermant Access après impression afin que cette
procédure soit transparente pour les utilisateurs.
Est-ce possible ?
Merci d'avance à ceux qui pourraont me mettre sur la voie. S'il le faut,
j'irai exposer le problème sur le forum XL.
je viens de lire la procédure et il me semble qu'elle recèle plusieurs anomalies, dont le DoCmd.Close qui n'a jamais fermé access mais seulement l'objet actif. je me suis attelé à l'automation excel-access et je te donne ci-dessous les fonctions à placer dans un module dans ton classeur excel. Option Explicit
Sub macro1() ReportPrint "c:bd1_2002.mdb", "etat1", acViewNormal End Sub
Sub ReportPrint(PathName As String, ReportName As String, Optional View As AcView = acViewNormal) Dim Acc_App As New Access.Application With Acc_App .Visible = True .OpenCurrentDatabase (PathName) .DoCmd.OpenReport ReportName, View If View <> acViewPreview Then .CloseCurrentDatabase .Quit End If End With Set Acc_App = Nothing End Sub
remplace "c:bd1_2002.mdb" et "etat1" par tes noms réels , et exécute la macro macro1. la procédure ci-dessus permet d'imprimer ou pré-visualiser ton état. Elle peut être améliorée.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Jac" a écrit dans le message de news: 41ca8e86$0$16260$
Voici la solution selon Patrick Morange du forum XL avec quelques retouches.
'__________________________________________________________ Sub IMPRIME_RAPPORT_ACCESS_DEPUIS_XL() '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ' dans Outils / Références de la fenêtre VBA, ' il faut référencer "Microsoft Access x.0 Object Library"
Dim DB, CP As Object Dim LE_FICHIER_ACCESS_AVEC_SON_CHEMIN Dim LE_RAPPORT_A_IMPRIMER As String
' chemin de la base de données Access -------- (à adapter) LE_FICHIER_ACCESS_AVEC_SON_CHEMIN = "c:essai.mdb"
' nom du rapport à imprimer ------------------ (à adapter) LE_RAPPORT_A_IMPRIMER = "Nom du rapport"
' ouvre la base de données ------------------------------ Set DB = GetObject(LE_FICHIER_ACCESS_AVEC_SON_CHEMIN) Set CP = DB.CurrentProject
' nettoyage des variables ------------------------------- Set CP = Nothing: Set DB = Nothing
'Il est évident que l'on pourrait imprimer plusieurs rapports 'ou autres objets Access à la suite.
'On ne peut pas prévisualier car Access est invisible donc "ça" ne peut que partir 'directement sur l'imprimante par défaut ou probablement (car non testé) sur l'imprimante 'définie dans le rapport.
'On pourrait, si nécessaire, définir l'imprimante cible dans la macro.
'__________________________________________________________ End Sub '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
En espèrant que cette solution pourra être utile et inspirer d'autres utilisateurs...
Jac
Bonjour.
je viens de lire la procédure et il me semble qu'elle recèle plusieurs
anomalies, dont le DoCmd.Close qui n'a jamais fermé access mais seulement
l'objet actif.
je me suis attelé à l'automation excel-access et je te donne ci-dessous les
fonctions à placer dans un module dans ton classeur excel.
Option Explicit
Sub macro1()
ReportPrint "c:bd1_2002.mdb", "etat1", acViewNormal
End Sub
Sub ReportPrint(PathName As String, ReportName As String, Optional View As
AcView = acViewNormal)
Dim Acc_App As New Access.Application
With Acc_App
.Visible = True
.OpenCurrentDatabase (PathName)
.DoCmd.OpenReport ReportName, View
If View <> acViewPreview Then
.CloseCurrentDatabase
.Quit
End If
End With
Set Acc_App = Nothing
End Sub
remplace "c:bd1_2002.mdb" et "etat1" par tes noms réels , et exécute la
macro macro1.
la procédure ci-dessus permet d'imprimer ou pré-visualiser ton état. Elle
peut être améliorée.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Jac" <Jsanspam@fra.net> a écrit dans le message de news:
41ca8e86$0$16260$636a15ce@news.free.fr...
Voici la solution selon Patrick Morange du forum XL avec quelques
retouches.
'__________________________________________________________
Sub IMPRIME_RAPPORT_ACCESS_DEPUIS_XL()
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
' dans Outils / Références de la fenêtre VBA,
' il faut référencer "Microsoft Access x.0 Object Library"
Dim DB, CP As Object
Dim LE_FICHIER_ACCESS_AVEC_SON_CHEMIN
Dim LE_RAPPORT_A_IMPRIMER As String
' chemin de la base de données Access -------- (à adapter)
LE_FICHIER_ACCESS_AVEC_SON_CHEMIN = "c:essai.mdb"
' nom du rapport à imprimer ------------------ (à adapter)
LE_RAPPORT_A_IMPRIMER = "Nom du rapport"
' ouvre la base de données ------------------------------
Set DB = GetObject(LE_FICHIER_ACCESS_AVEC_SON_CHEMIN)
Set CP = DB.CurrentProject
' nettoyage des variables -------------------------------
Set CP = Nothing: Set DB = Nothing
'Il est évident que l'on pourrait imprimer plusieurs rapports
'ou autres objets Access à la suite.
'On ne peut pas prévisualier car Access est invisible donc "ça" ne peut
que partir
'directement sur l'imprimante par défaut ou probablement (car non testé)
sur l'imprimante
'définie dans le rapport.
'On pourrait, si nécessaire, définir l'imprimante cible dans la macro.
'__________________________________________________________
End Sub
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
En espèrant que cette solution pourra être utile
et inspirer d'autres utilisateurs...
je viens de lire la procédure et il me semble qu'elle recèle plusieurs anomalies, dont le DoCmd.Close qui n'a jamais fermé access mais seulement l'objet actif. je me suis attelé à l'automation excel-access et je te donne ci-dessous les fonctions à placer dans un module dans ton classeur excel. Option Explicit
Sub macro1() ReportPrint "c:bd1_2002.mdb", "etat1", acViewNormal End Sub
Sub ReportPrint(PathName As String, ReportName As String, Optional View As AcView = acViewNormal) Dim Acc_App As New Access.Application With Acc_App .Visible = True .OpenCurrentDatabase (PathName) .DoCmd.OpenReport ReportName, View If View <> acViewPreview Then .CloseCurrentDatabase .Quit End If End With Set Acc_App = Nothing End Sub
remplace "c:bd1_2002.mdb" et "etat1" par tes noms réels , et exécute la macro macro1. la procédure ci-dessus permet d'imprimer ou pré-visualiser ton état. Elle peut être améliorée.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Jac" a écrit dans le message de news: 41ca8e86$0$16260$
Voici la solution selon Patrick Morange du forum XL avec quelques retouches.
'__________________________________________________________ Sub IMPRIME_RAPPORT_ACCESS_DEPUIS_XL() '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ' dans Outils / Références de la fenêtre VBA, ' il faut référencer "Microsoft Access x.0 Object Library"
Dim DB, CP As Object Dim LE_FICHIER_ACCESS_AVEC_SON_CHEMIN Dim LE_RAPPORT_A_IMPRIMER As String
' chemin de la base de données Access -------- (à adapter) LE_FICHIER_ACCESS_AVEC_SON_CHEMIN = "c:essai.mdb"
' nom du rapport à imprimer ------------------ (à adapter) LE_RAPPORT_A_IMPRIMER = "Nom du rapport"
' ouvre la base de données ------------------------------ Set DB = GetObject(LE_FICHIER_ACCESS_AVEC_SON_CHEMIN) Set CP = DB.CurrentProject
' nettoyage des variables ------------------------------- Set CP = Nothing: Set DB = Nothing
'Il est évident que l'on pourrait imprimer plusieurs rapports 'ou autres objets Access à la suite.
'On ne peut pas prévisualier car Access est invisible donc "ça" ne peut que partir 'directement sur l'imprimante par défaut ou probablement (car non testé) sur l'imprimante 'définie dans le rapport.
'On pourrait, si nécessaire, définir l'imprimante cible dans la macro.
'__________________________________________________________ End Sub '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
En espèrant que cette solution pourra être utile et inspirer d'autres utilisateurs...
Jac
Jac
Bonjour Raymond,
j'étais content d'avoir une solution... et maintenant je suis heureux d'en avoir deux ! J'ai déjà mis en place un msgbox qui permet de choisir entre impression directe et prévisualisation. Tout fonctionne parfaitement.
Chapeau bas et mille mercis,
Jac
Nb: Joyeux Noël et Bonne Année à tous !!!
Bonjour Raymond,
j'étais content d'avoir une solution... et maintenant je suis heureux d'en
avoir deux !
J'ai déjà mis en place un msgbox qui permet de choisir entre impression
directe et prévisualisation. Tout fonctionne parfaitement.
j'étais content d'avoir une solution... et maintenant je suis heureux d'en avoir deux ! J'ai déjà mis en place un msgbox qui permet de choisir entre impression directe et prévisualisation. Tout fonctionne parfaitement.