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 23/03/2011, 11h36   #1
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 118
Points : 32
Points : 32
Par défaut Envoi de courriels

Bonjour à tous

Pour automatiser un peu l'envoi de certains e-mails, j'ai créé un bouton dans mon formulaire et mis le code suivant :

Code :
1
2
3
4
5
 
DoCmd.SendObject , , , [Mail], , , [Client], "Bonjour " & [prénom] & "," & vbCrLf & vbCrLf & _
"Bla bla bla" & vbCrLf & _
vbCrLf & vbCrLf & _
"Cordialement", True
Ça fonctionne à peu près sauf que deux petites choses me dérangent :
- le corps du texte est inséré après la signature figurant sur tous mes mails dans thunderbird. Pourtant le curseur est ensuite bien placé au début du message.

- Le code entraîne l'ouverture de thunderbird et de la fenêtre nouveau message, je voudrais seulement ouvrir une fenêtre nouveau message mais pas thunderbird.

Y a-t-il une manière plus simple de faire ce que je veux ??

Merci par avance pour votre aide !
Guillaume
GCAccess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 12h22   #2
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

L'utilisation de CDO est une alternative.

Je vous encourage à regarder la discussion suivante :

Envoyer des mails avec CDO

Bonne journée

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 15h05   #3
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 118
Points : 32
Points : 32
Merci Pierre pour votre réponse et pour le lien.

Cependant, après un bref coup d'oeil, il me semble que ça n'est pas vraiment adapté à ce que je recherche. Je ne veux pas envoyer d'e-mails en masse, mais un seul e-mail à chaque fois, avec des PJ ou pas. L'intérêt pour moi est principalement de gagner du temps en ayant toutes les références de la commande et du client insérées directement dans l'e-mail, sans oublier l'adresse de l'interlocuteur.
En outre, avec la méthode décrite, il semble (si j'ai bien compris) que les e-mails envoyés ne soient pas enregistrés dans le dossier "envoyés" (ce qui se comprend quand on envoie des milliers de mails) mais dans mon cas, il faut justement que j'ai une trace des e-mails envoyés.

J'utilise un petit programme appelé "Find and Run Robot" avec lequel il est possible d'envoyer des e-mails en ouvrant seulement une fenêtre nouveau message et pas thunderbird « en entier ». Il s'agit de la commande "Mailto:" Je me demande s'il est possible d'utiliser une commande similaire en vba.

Merci.
Guillaume
GCAccess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 17h03   #4
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Personnellement, j'utilise cette procédure, non car j'ai beaucoup de messages à envoyer, mais parce que je n'ai pas trouvé comment piloter Thunderbird.

Pour ce qui est de garder une trace de l'envoi, je m'envoie le message à moi-même.

Sinon, je ne sais pas comment vous aider.

Bonne fin de journée

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 19h25   #5
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : developpeur amateur dans mon cadre professionnel
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 499
Points : 360
Points : 360
personnellement j'utilise ce code, qui ouvre thunderbird et garde une trace dans mes envois :

Code :
EnvoiEmail Adresse:="Greg@Domaine.fr", objet:="Objet de mon courrier" & Year(Journee) & "/" & MaSemaine, Corps:="en pièce jointe les offres de la semaine " & Year(Journee) & "/" & MaSemaine, PJ:="", Cc:="juju@Domaine.fr", Bcc:="momo@Domaine.fr"
ajouter dans un module "Initmail"

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
Option Compare Database
 
' ------------------------------------------------------------------
Option Explicit
' ------------------------------------------------------------------
'Déclaration des tableaux qui recevront les touches à utiliser suivant
' le logiciel de messagerie par défaut du système.
' Déclarés ici, les tableaux ont une portée qui couvre tout le module
Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String
' ------------------------------------------------------------------
' Procédure principale qui compose les éléments du message
' et effectue la demande d'envoi
' c'est cette procédure qui sera appelée par le programme principal (ici Excel)
'
Sub EnvoiEmail(Adresse As String, objet As String, Corps As String, Optional PJ As String, Optional Cc As String, Optional Bcc As String, Optional Collage As Boolean)
'--------------------------------------------------------------------------------
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
                        ' composés à partir des arguments fournis à la procédure
Dim i As Integer        ' un compteur
Dim Client As Integer
' la syntaxe de base du mailto est la suivante :
' mailto:dest@domaine.bof?Subject=Le sujet du message _
                         &Body=Le corps du message _
                         &cc=Destinataire copie _
                         &bcc=Destinataire copie cachée
 
HyperLien = "mailto:" & Adresse & "?"       ' Le ? introduit les arguments
HyperLien = HyperLien & "Subject=" & objet
If Not Collage Then ' (en cas de collage, le corps est ajouté juste avant le collage)
    HyperLien = HyperLien & "&Body=" & Corps    ' le & sépare les arguments
End If
If Cc <> "" Then HyperLien = HyperLien & "&cc=" & Cc
If Bcc <> "" Then HyperLien = HyperLien & "&bcc=" & Bcc
 
' Activation du lien
'
'ActiveWorkbook.FollowHyperlink HyperLien    ' Pour Excel (les autres doivent être en commentaire)
'ThisDocument.FollowHyperlink HyperLien      ' Pour Word (les autres doivent être en commentaire)
Application.FollowHyperlink HyperLien       ' Pour Access
 
 
Attendre 2
If Collage Then
    ' colle puis insère le texte du message au début du message
    SendKeys "+{INSERT}", True  ' collage
    SendKeys "^{HOME}", True    ' début du message
    SendKeys Corps, True        ' envoi du corps du message
    SendKeys "{Enter}", True    ' ligne suivante
End If
' modifier la valeur ci-dessous pour adapter le code à votre client mail
Client = 5  ' 1=Outlook Express
            ' 2=Mozilla Thunderbird
            ' 3=Office Outlook
            ' Suivent des configurations pour d'autres clients de messagerie
            ' trouvées sur le forum
            ' 4=Une autre version pour Outlook2003
            ' 5=Incredimail
            ' 6=Office Outlook 2007
            ' 7=...à vous d'ajouter d'autres clients
 
Select Case Client      ' appel du chargement des tableaux des touches selon le
                        ' client de messagerie indiqué
    Case 1
        OutLookExpress
    Case 2
        MozillaThunderbird
    Case 3
        Office2003OutLook
    Case 4
        Office2003OutLookV2
    Case 5
        Incredimail
    Case 6
        Office2007OutLook
    Case Else
        MsgBox "Aucun client de messagerie connu n'est indiqué" & vbCrLf & _
        "Vous devez terminer l'envoi du mail manuellement"
        Exit Sub
End Select
 
' Le traitement de la pièce jointe ne s'exécute que si la procédure à reçu qqchose
' dans l'argument PJ (Optional<=>Facultatif)
 
If PJ <> "" Then
    For i = 1 To TouchesPJ(0)   ' dans TouchesPJ(0) on a stocké le nombre de touches
                                ' à envoyer au programme pour joindre une pièce
        SendKeys TouchesPJ(i), True     ' Envoie les touches d'ajout d'1 pièce jointe
        Attendre 1                        ' temporise (à règler éventuellement)
    Next i
    SendKeys PJ, True       ' A ce stade le programme Attend un nom de fichier
                            ' on lui envoie
    Attendre 1                ' on temporise
    SendKeys "{ENTER}", True    ' et on valide ce nom de fichier
    Attendre 1
End If
For i = 1 To TouchesEnvoi(0)
    SendKeys TouchesEnvoi(i), True  ' on envoie le message
    Attendre 1
Next i
End Sub
 
Sub Attendre(Secondes As Single)
' Cette procédure temporise pendant le nombre de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long, Chrono As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
    DoEvents
Loop
End Sub
 
 
Sub OutLookExpress()
'Initialisation des tableaux de touches pour Outlook Express
    ' Pour une pièce jointe
    TouchesPJ(0) = 2        ' Nombre de touches nécessaires
    TouchesPJ(1) = "%i"     ' Appel du menu Insertion par la touche Alt-i
    TouchesPJ(2) = "p"      ' appel du sous-menu pièce par la touche p
    ' Pour l'envoi du mail
    TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
    TouchesEnvoi(1) = "%s"  ' Envoi du message avec Alt-s
End Sub
 
Sub MozillaThunderbird()
'Initialisation des tableaux de touches pour Mozilla Thunderbird
    ' Pour une pièce jointe
    TouchesPJ(0) = 4        ' Nombre de touches nécessaires
    ' il semble que l'appel par Alt-f du menu fichier ne marche pas
    ' à tous les coups donc (merci à FRED65200)
    TouchesPJ(1) = "{F10}"     ' Appel des menus par {F10}
    TouchesPJ(2) = "f"     ' Appel du menu Fichier par la touche f
    TouchesPJ(3) = "j"      ' appel du sous-menu Joindre par la touche j
    TouchesPJ(4) = "f"      ' appel du sous-sous-menu Fichier par la touche f
    ' Pour l'envoi du mail
    TouchesEnvoi(0) = 4             ' Nombre de touches nécessaires
    TouchesEnvoi(1) = "%xf"         ' choisit l'expéditeur qui commence par F
    TouchesEnvoi(2) = "^{ENTER}"    ' Envoi du message avec Ctrl-Entrée
    TouchesEnvoi(3) = "{DOWN}"      ' Flèche bas pour choisir l'option "Envoyer en HTML seul"
                                    ' dans la boite dialogue
    TouchesEnvoi(4) = "{ENTER}"     ' confirmation par Entrée
End Sub
 
Sub Office2003OutLook()
'Initialisation des tableaux de touches pour Office Outlook 2003
    ' Pour une pièce jointe
    TouchesPJ(0) = 2        ' Nombre de touches nécessaires
    TouchesPJ(1) = "%i"     ' Appel du menu Insertion par la touche Alt-i
    TouchesPJ(2) = "f"      ' appel du sous-menu fichier par la touche f
    ' Pour l'envoi du mail
    TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
    TouchesEnvoi(1) = "%v"  ' Envoi du message avec Alt-v
End Sub
 
Sub Incredimail()
    ' Contribution de KOLOCO pour Incredimail
    ' Initialisation des tableaux de touches pour Incrédimail
    ' Pour une pièce jointe
    TouchesPJ(0) = 1        ' Nombre de touches nécessaires
    TouchesPJ(1) = "^+a"    'Appel du menu Insertion Fichier par la touche Ctrl+Shift+A
    ' Pour l'envoi du mail
    TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
    TouchesEnvoi(1) = "%s"  'Envoi du message avecAlt-s
End Sub
 
Sub Office2003OutLookV2()
    ' Version corrigée par CLARK1978 à essayer si la version d'origine ne gère pas
    ' la touche Alt-i correctement
    ' Initialisation des tableaux de touches pour Office Outlook 2003
    ' Pour une pièce jointe
    TouchesPJ(0) = 3            ' Nombre de touches nécessaires
    TouchesPJ(1) = "%a"         'Appel du menu Insertion par la touche Alt-a (affichage)
    TouchesPJ(2) = "{RIGHT}"    ' puis flèche à droite
    TouchesPJ(3) = "f"          ' appel du sous-menu fichier par la touche f
    ' Pour l 'envoi du mail
    TouchesEnvoi(0) = 1         ' Nombre de touches nécessaires
    TouchesEnvoi(1) = "%v"      ' Envoi du message avecAlt-v
End Sub
 
Sub Office2007OutLook()
    ' Contribution de PC512 pour Office 2007
    ' Initialisation des tableaux de touches pour Office Outlook 2007
    ' Pour une pièce jointe
    TouchesPJ(0) = 2        ' Nombre de touches nécessaires
    TouchesPJ(1) = "%s"     ' Appel du menu Insertion par la touche Alt-i
    TouchesPJ(2) = "jf"     ' appel du sous-menu fichier par la touche f
    ' Pour l'envoi du mail
    TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
    TouchesEnvoi(1) = "%v"  'Envoi du message avecAlt-v
End Sub
 
Sub Office2000OutLook()
    ' Contribution de TANATLOC92 pour Office Outlook 2000
    ' Initialisation des tableaux de touches pour Office Outlook 2000
    ' Pour une pièce jointe
    TouchesPJ(0) = 2 ' Nombre de touches nécessaires
    TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
    TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
    ' Pour l'envoi du mail
    TouchesEnvoi(0) = 1 ' Nombre de touches nécessaires
    TouchesEnvoi(1) = "^{ENTER}" ' Envoi du message avec Ctrl-Entrée
End Sub
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 21h34   #6
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 118
Points : 32
Points : 32
Merci beaucoup pour ce code. Je l'ai adopté après de grosses simplifications.
Il a permis de régler le problème de l'ouverture de thunderbird. À présent, seule la fenêtre nouveau message s'ouvre comme je le voulais.

Par contre, le corps du texte est toujours inséré après ma signature, j'ai bien essayé de bidouiller un peu mais rien n'y fait, je n'ai pas encore trouvé de solution...

Encore merci et bonne soirée
Guillaume
GCAccess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 03h46   #7
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Je me trompe peut-être mais ce code, qui fait appel à des combinaisons de touches ne m'inspire pas confiance : Je me dis que si une fenêtre est activée pendant le code, l'instruction "sendkeys" va envoyer les codes de touches sur la mauvaise fenêtre.

D'autre part, en cas de changement de version de thunderbird, ou autre, il n'y a aucune certitude que la même combinaison de touches donne le même résultat.

Mais c'est une alternative interessante.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 08h07   #8
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 118
Points : 32
Points : 32
Bonjour Pierre,

Je suis tout à fait d'accord avec vous. En voyant s'exécuter le code (la fenêtre qui s'ouvre, le déplacement vers le bon bouton pour la refermer, etc.), j'ai trouvé la méthode un peu particulière. Disons que ça ressemble un peu à de la bidouille.
C'est pour ça que j'ai beaucoup simplifié le code. En fait, je n'ai gardé que ça*:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub BtMail_Click()
 
EnvoiEmail Adresse:=Mail, objet:=Client & " " & Ref, Corps:="Bonjour " & prénom & ",", PJ:="", Cc:="", Bcc:=""
 
 
End Sub
 
Sub EnvoiEmail(Adresse As String, objet As String, Corps As String, Optional PJ As String, Optional Cc As String, Optional Bcc As String, Optional Collage As Boolean)
'--------------------------------------------------------------------------------
Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
                        ' composés à partir des arguments fournis à la procédure
HyperLien = "mailto:" & Adresse & "?"       ' Le ? introduit les arguments
HyperLien = HyperLien & "Subject=" & objet
 
If Cc <> "" Then HyperLien = HyperLien & "&cc=" & Cc
If Bcc <> "" Then HyperLien = HyperLien & "&bcc=" & Bcc
 
HyperLien = HyperLien & "&Body=" & Corps    ' le & sépare les arguments
 
Application.FollowHyperlink HyperLien       ' Pour Access
 
 End Sub
Rien de plus. C'est ce que je cherchais pour coder à la façon "mailto:".
Ça marche très bien. Il n'y a que ce problème d'insertion après la signature que je n'ai pas (encore ?) réglé.

Bonne journée
Guillaume
GCAccess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h27   #9
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 254
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 254
Points : 1 870
Points : 1 870
Bonjour Guillaume,

Avec ce code minimaliste, il n'est plus possible d'envoyer une pièce jointe
Je me trompe ?
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h35.


 
 
 
 
Partenaires

Hébergement Web