Joindre un fichier excel actualisé à un mail dans access 2013/16
Résolu/Fermé
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
-
Modifié le 26 oct. 2017 à 17:50
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 - 28 oct. 2017 à 20:21
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 - 28 oct. 2017 à 20:21
A voir également:
- Joindre un fichier excel actualisé à un mail dans access 2013/16
- Iphone 16 - Accueil - Téléphones
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Yahoo mail - Accueil - Mail
5 réponses
Utilisateur anonyme
26 oct. 2017 à 23:19
26 oct. 2017 à 23:19
Bonjour,
j'aime pas bien ce nom de répertoire :
xls.Workbooks.Open "U:\Public\3.Production\Commun\Organisation\Export_GPF_(ne pas modifier)\CONFIG_DYNA_TDB\Dyna_Stock_AR_VLG_PIC_92.xlsm"
tu ne peux pas tester avec un répertoire moins long et surtout sans les ( ) ?
Aussi, tu n'as pas une question d'excel qui te demande si tu veux enregistrer avant de fermer ??
Je mettrai entre les 2 lignes :
ActiveWorkbook.RefreshAll
ActiveWorkbook.Close
un
A+
j'aime pas bien ce nom de répertoire :
xls.Workbooks.Open "U:\Public\3.Production\Commun\Organisation\Export_GPF_(ne pas modifier)\CONFIG_DYNA_TDB\Dyna_Stock_AR_VLG_PIC_92.xlsm"
tu ne peux pas tester avec un répertoire moins long et surtout sans les ( ) ?
Aussi, tu n'as pas une question d'excel qui te demande si tu veux enregistrer avant de fermer ??
Je mettrai entre les 2 lignes :
ActiveWorkbook.RefreshAll
ActiveWorkbook.Close
un
Application.DisplayAlerts = False
A+
Utilisateur anonyme
27 oct. 2017 à 17:18
27 oct. 2017 à 17:18
Bonjour,
il faudrait libérer tes variables à la fin du code :
A+
il faudrait libérer tes variables à la fin du code :
Set MonOutlook = nothing Set MonMessage = nothing Set OLk_Appli = nothing
A+
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
Modifié le 27 oct. 2017 à 19:34
Modifié le 27 oct. 2017 à 19:34
J'ai ajouté mais,
à la première exécution de la macro tout fonctionne mais le fichier Excel joint ne sait pas rafraichit des données modifiés dans une autre base de données en connexion au fichier Excel.
à la deuxième exécution de la macro ça laisse le fichier Excel ouvert et un message d'erreur "Variable objet ou variable de bloc with non définie" à cette ligne
J'ai exécuté la macro 10 fois et à chaque 2ème fois ça plante.
Code modifié :
J'ai modifié en renseignant mes connexions et le fichier Excel est joint et bien à jour donc ça fonctionne mais toujours pareil 1 fois, si le lance la macro 2 minutes après ça plante et si je recommence une 3ème fois ça fonctionne et ainsi de suite.
à la première exécution de la macro tout fonctionne mais le fichier Excel joint ne sait pas rafraichit des données modifiés dans une autre base de données en connexion au fichier Excel.
à la deuxième exécution de la macro ça laisse le fichier Excel ouvert et un message d'erreur "Variable objet ou variable de bloc with non définie" à cette ligne
ActiveWorkbook.RefreshAll
J'ai exécuté la macro 10 fois et à chaque 2ème fois ça plante.
Code modifié :
Private Sub Proc3()
For i = 1 To 2000 'pour simuler le temps d'exécution de la procédure
Next
' Initialisation :
Dim ListeEMail As DAO.Recordset
Set ListeEMail = CurrentDb.OpenRecordset("R_EMAIL_LA")
ListeEMail.MoveFirst
ListeComplete = ""
' Parcourt de la requête :
While Not ListeEMail.EOF
ListeComplete = ListeComplete & ListeEMail("EMail") & ";"
ListeEMail.MoveNext
Wend
' On enlève le dernier point virgule :
' ListeComplete nous sera évidemment utile tout à l'heure :
ListeComplete = Left(ListeComplete, Len(ListeComplete) - 1)
' Stop DAO :
ListeEMail.Close
Set ListeEMail = Nothing
' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################
' Initialisation :
Dim MonOutlook As Object
Dim MonMessage As Object
Dim OLk_Appli As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)
Set OLk_Appli = CreateObject("Outlook.Application")
Dim xls As Excel.Application
Set xls = CreateObject("Excel.Application")
xls.Workbooks.Open "U:\Public\3.Production\Commun\Organisation\SYS_TDB_Production\Tempo_Dyna_EXCEL\Dyna_Stock_AR_VLG_PIC_92.xlsm"
xls.Visible = True
ActiveWorkbook.RefreshAll
Excel.Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
' nom du fichier pdf temporaire
cheminfichier = "U:\Public\3.Production\commun\organisation\SYS_TDB_Production\Tempo_EMail_TDB\E72_BILAN_LA_Rech.pdf"
cheminfichier2 = "U:\Public\3.Production\commun\organisation\SYS_TDB_Production\Tempo_EMail_TDB\B72_RETARD_BILAN_LA_Rech.pdf"
cheminfichier4 = "U:\Public\3.Production\Commun\Organisation\SYS_TDB_Production\Tempo_Dyna_EXCEL\Dyna_Stock_AR_VLG_PIC_92.xlsm"
' Préparation du message :
MonMessage.To = "xxxxx@free.fr"
MonMessage.CC = "xxxxx@free.fr"
' Récupération de la chaîne d'E-Mails Access :
MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de Production Lettre Arrivée"
MonMessage.HTMLBody = corps
' Ajout de la signature
MonMessage.HTMLBody = MonMessage.HTMLBody & "<br/>" & "<br>" & Signature("Signature")
' Ajout des pièces jointes
MonMessage.Attachments.Add cheminfichier
MonMessage.Attachments.Add cheminfichier2
MonMessage.Attachments.Add cheminfichier4
MonMessage.display vbSystemModal = False
If OLk_Appli Is Nothing Then
OLk_OK = Shell("C:\Program Files\Microsoft Office\Office10\OUTLOOK.EXE", 1)
End If
' supprimer le fichier pdf après envoi du message
Kill (cheminfichier)
Kill (cheminfichier2)
Set MonOutlook = Nothing
Set MonMessage = Nothing
Set OLk_Appli = Nothing
End Sub
J'ai modifié en renseignant mes connexions et le fichier Excel est joint et bien à jour donc ça fonctionne mais toujours pareil 1 fois, si le lance la macro 2 minutes après ça plante et si je recommence une 3ème fois ça fonctionne et ainsi de suite.
ActiveWorkbook.Connections("TDB_Production_LA_AR_01").Refresh
ActiveWorkbook.Connections("TDB_Production_LA_AR_02").Refresh
ActiveWorkbook.Connections("TDB_Production_LA_AR_03").Refresh
ActiveWorkbook.Save
ActiveWorkbook.Close
Excel.Application.DisplayAlerts = True
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
Modifié le 27 oct. 2017 à 20:07
Modifié le 27 oct. 2017 à 20:07
Je me demande si y a pas non plus peut être un problème de lecture seul
par contre j'ai la base de données avec le recording qui reste ouverte car les trois connexions rafraichies restaient ouvertes.
Toujours pareil 1 fois sur 2 ca fonctionne.
par contre j'ai la base de données avec le recording qui reste ouverte car les trois connexions rafraichies restaient ouvertes.
ActiveWorkbook.Connections("TDB_Production_LA_AR_01").Delete
ActiveWorkbook.Connections("TDB_Production_LA_AR_02").Delete
ActiveWorkbook.Connections("TDB_Production_LA_AR_03").Delete
Toujours pareil 1 fois sur 2 ca fonctionne.
Utilisateur anonyme
27 oct. 2017 à 19:48
27 oct. 2017 à 19:48
Ca plante toujours les fois "paires" sur la même ligne ??
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
Modifié le 28 oct. 2017 à 04:21
Modifié le 28 oct. 2017 à 04:21
Oui à chaque deuxième fois de l’execution de la procédure ça plante toujours à la même ligne, « activeworkbook.refresh » ou même avec « activeconnexion.xxxx.refresh ».
« Variable objet ou variable de bloc with non définie ».
« Variable objet ou variable de bloc with non définie ».
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 janvier 2025
Ambassadeur
1 557
Modifié le 28 oct. 2017 à 11:28
Modifié le 28 oct. 2017 à 11:28
bonjour, au lieu de:
je suggère d'essayer quelque chose comme:
(non testé)
je préfère éviter "active" (tout comme "select").
Set xls = CreateObject("Excel.Application") xls.Workbooks.Open "U:\Public\3.Production\Commun\Organisation\SYS_TDB_Production\Tempo_Dyna_EXCEL\Dyna_Stock_AR_VLG_PIC_92.xlsm" xls.Visible = True ActiveWorkbook.RefreshAll Excel.Application.DisplayAlerts = False ActiveWorkbook.Save ActiveWorkbook.Close
je suggère d'essayer quelque chose comme:
dim wb as Excel.Workbook Set xls = New Excel.Application set wb = xls.Workbooks.Open("U:\Public\3.Production\Commun\Organisation\SYS_TDB_Production\Tempo_Dyna_EXCEL\Dyna_Stock_AR_VLG_PIC_92.xlsm") xls.Visible = True wb.RefreshAll xls.DisplayAlerts = False wb.Save wb.Close xls.Quit
(non testé)
je préfère éviter "active" (tout comme "select").
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
Modifié le 28 oct. 2017 à 18:26
Modifié le 28 oct. 2017 à 18:26
Bonjour,
Cela fonctionne à chaque exécution de la macro maintenant, merci.
Par contre il me reste un problème, avec Refreshall, le fichier Excel joint n'ai pas à jour quand on l'ouvre dans les pièces jointe avant d'envoyer le mail ou en le recevant.
Si un utilisateur change une saisie dans la base de données qui est en liaison avec ce fichier Excel il ne se met pas à jour.
Le fichier Excel est en connexion avec une autre base de données que celle ou on exécute se code de préparation de mail. Quand je regarde dans le dossier ou est située l'autre base de données, je la voit s'ouvrir un bref instant du à l'ouverture du ficher Excel par le code et elle se referme très vite, donc forcément pas le temps que le fichier Excel se rafraichisse car il est fermé de suite et joint au mail.
Pour les utilisateurs qui reçoivent ce fichier Excel et qui sont dans l'établissement, ce n'est pas un problème, car à l'ouverture du fichier, vue qu'ils sont sur le même réseau que la base de données d'ou arrivent les données.
C'est juste si on essaye d'ouvrir ce fichier de l'extérieure de l’établissement, il faut activer les macros et je pense pas que le fichier va trouver les liaisons d'un serveur du entreprise privée.
Cela fonctionne à chaque exécution de la macro maintenant, merci.
Par contre il me reste un problème, avec Refreshall, le fichier Excel joint n'ai pas à jour quand on l'ouvre dans les pièces jointe avant d'envoyer le mail ou en le recevant.
Si un utilisateur change une saisie dans la base de données qui est en liaison avec ce fichier Excel il ne se met pas à jour.
Le fichier Excel est en connexion avec une autre base de données que celle ou on exécute se code de préparation de mail. Quand je regarde dans le dossier ou est située l'autre base de données, je la voit s'ouvrir un bref instant du à l'ouverture du ficher Excel par le code et elle se referme très vite, donc forcément pas le temps que le fichier Excel se rafraichisse car il est fermé de suite et joint au mail.
Pour les utilisateurs qui reçoivent ce fichier Excel et qui sont dans l'établissement, ce n'est pas un problème, car à l'ouverture du fichier, vue qu'ils sont sur le même réseau que la base de données d'ou arrivent les données.
C'est juste si on essaye d'ouvrir ce fichier de l'extérieure de l’établissement, il faut activer les macros et je pense pas que le fichier va trouver les liaisons d'un serveur du entreprise privée.
Utilisateur anonyme
>
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
28 oct. 2017 à 20:00
28 oct. 2017 à 20:00
C'est normal, ils (les utilisateurs) le reçoivent avec les données au moment de l'envoi...
S'ils ne sont pas en réseau avec la source de données, ya pas d'autre moyen que :
1/ leur envoyer le fichier à chaque modif (vive l'usine à gaz)
2/ les mettre en réseau et leur envoyer un *lien* vers le fichier plutôt que le fichier lui-même.
A+
S'ils ne sont pas en réseau avec la source de données, ya pas d'autre moyen que :
1/ leur envoyer le fichier à chaque modif (vive l'usine à gaz)
2/ les mettre en réseau et leur envoyer un *lien* vers le fichier plutôt que le fichier lui-même.
A+
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
>
Utilisateur anonyme
28 oct. 2017 à 20:21
28 oct. 2017 à 20:21
On va dire qu'il y a très peu de chance d'avoir une ouverture à l’extérieur du réseau mais bon dans le doute.
Merci pour l'aide.
Merci pour l'aide.
yg_be
Messages postés
23417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 janvier 2025
1 557
28 oct. 2017 à 20:00
28 oct. 2017 à 20:00
je pense que c'est parce que les connexions de Excel vers la base de données sont déclarées dans Excel pour fonctionner en arrière-plan, donc ne bloquent pas Excel pendant qu'elles fonctionnent. si c'est exact, il te suffit de désactiver la case à cocher décrite ici:
Exécuter une requête en arrière-plan ou lors d’une attente.
Exécuter une requête en arrière-plan ou lors d’une attente.
AstraLife
Messages postés
98
Date d'inscription
lundi 2 octobre 2017
Statut
Membre
Dernière intervention
1 juillet 2019
>
yg_be
Messages postés
23417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 janvier 2025
28 oct. 2017 à 20:18
28 oct. 2017 à 20:18
Effectivement, merci
J'ai décoché la mise à jour en arrière plan et ça fonctionne à chaque modif et le fichier envoyé est bien rafraichi, c'est parfait, merci.
J'ai décoché la mise à jour en arrière plan et ça fonctionne à chaque modif et le fichier envoyé est bien rafraichi, c'est parfait, merci.
Modifié le 27 oct. 2017 à 09:03
J'ai modifié un peu le chemin du fichier Excel,
Il s'ouvre bien mais plante à cette ligne
Objet requis
ActiveWorkbooks.RefreshAll
Pourtant le fichier excel s'ouvre bien, se met à jour mais reste ouvert et non enregistré avec en arrière plan le message d'erreur "Objet requis" sur la ligne de code ActiveWorkbooks.RefrashAll
J'ai aussi rajouté Excel. devant Application.Displayalerts = False. sinon message d'erreur.
En info complémentaire, le fichier Excel que je cherche à ouvrir, ainsi qu'actualiser les connexions puis à joindre au mail est en faite un fichier en liaison avec une requête Access situé dans une base de données sur le même réseau.
Ca fonctionne une fois sur 2, étrange. à chaque 2ème fois d'execution du code j'ai un message d'erreur "Variable objet ou variable de bloc with non définie"
' Initialisation :
Dim MonOutlook As Object
Dim MonMessage As Object
Dim OLk_Appli As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)
Set OLk_Appli = CreateObject("Outlook.Application")
Dim xls As Excel.Application
Set xls = CreateObject("Excel.Application")
xls.Workbooks.Open "U:\Public\3.Production\Commun\Organisation\Tempo_dyna_EXCEL\Dyna_Stock_AR_VLG_PIC_92.xlsm"
xls.Visible = True
ActiveWorkbook.RefreshAll
Excel.Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
' nom du fichier pdf temporaire
cheminfichier = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\E72_BILAN_LD_Rech.pdf"
cheminfichier2 = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\B72_RETARD_BILAN_LD_Rech.pdf"
cheminfichier4 = "U:\Public\3.Production\Commun\Organisation\Tempo_dyna_EXCEL\Dyna_Stock_AR_VLG_PIC_92.xlsm"