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 25/01/2011, 10h06   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
Par défaut Envoi de mails à partir d'un formulaire

Pour commencer, merci à tous les contributeurs de ce site car j'y ai trouvé une multitude d'informations qui m'ont permis d'avancer rapidement et efficacement dans mes projets.
Cela dit, je suis beaucoup plus doué pour la conception graphique (ergonomie, importation de BMP créés avec FIreworks pour les transformer en boutons, etc.)

J'ai donc un problème de programmation concernant l'envoi d'emails depuis un formulaire basé sur une requête.
J'ai lu les FAQ VBA concernant la fonction "sendobject" et réalisé sans succès de multiples essais.

Ma base est de conception très simple:
Une table "Installateurs" qui contient mes techniciens dans toute la France (Nom, prénom, adresse, téléphone, adresse email, départements couverts)
Une autre "Interventions"contient les interventions (Nom du client, adresse, Code postal, tel, etc)

J'attribue une ou des missions à un technicien en fonction de sa position géographique (j'ai réussi à extraire le département du code postal "Interventions" et je le compare aux département couverts par les techniciens.
Cela m'a permis de créer une liste "combo" qui ne contient que les techniciens disponibles pour attribuer l'intervention au bon technicien.
Pour les "Pros" ce n'est pas un exploit mais pour moi cela a été une victoire !

En synthèse :

1. Enregistrement des missions (classeur xls) au travers d'un formulaire en mode feuille de données (ajout)
2. Attribution de la mission au travers d'un formulaire "attribution" (avec ma combo, yes !)
3. Affichage des missions attribuées au travers d'un formulaire "missions_attribuee_du_jour" qui contient: réf du client (nom, adresse, tel, etc.) et le nom du technicien

Je souhaite envoyer l'email au technicien choisi sans avoir a renseigner son adresse (déjà présente dans la table "Installateurs"

J'ai essayé ceci (ma modification est en rouge) en créant un nouveau module (nommé module1) afin que le code recherche l'adresse email du technicien dans le formulaire:

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
Public Sub CreateEmail( _
    Recipient As String, _
    Subject As String, _
    Body As String, _
    Optional Attach As Variant)
 ' --------------------------
    Dim I As Integer
    Dim oEmail As Outlook.MailItem
    Dim appOutLook As Outlook.Application

    ' créer un nouvel item mail

    Set appOutLook = New Outlook.Application
    Set oEmail = appOutLook.CreateItem(olMailItem)

    ' les paramètres

    oEmail.To = "SelectForm missions_attribuee_du_jour,Installateurs,email"
    oEmail.Subject = Subject
    oEmail.Body = Body

    If Not IsMissing(Attach) Then

       If TypeName(Attach) = "String" Then

             ' s'il y a des pièces jointes
            oEmail.Attachments.Add Attach

        Else

            For I = 0 To UBound(Attach) - 1
            oEmail.Attachments.Add Attach(I)

            Next

        End If

    End If

    ' envoie le message
    oEmail.Send

    ' détruit les références aux objets
    Set oEmail = Nothing

    Set appOutLook = Nothing

End Sub 

J'ai associé ce code à l'ouverture du formulaire (Évènement---Après MAJ--- [procédure évènementielle])
  
Private Sub Form_AfterUpdate()
mailauto = "=Module1()"
End Sub

Pour terminer, j'ai associé à mon bouton (nom: mailauto) ce code :

(Évènement---Sur clic--- [procédure évènementielle])

Private Sub mailauto_Click()

End Sub
J'imagine avoir fait un tas d'erreurs mais je ne sais pas ou (même après la lecture des FAQ)

J'ai compris que ce sujet avait déjà été traité (mon exemple trouvé sur ce site inclut même les pièces jointes) mais j'y travaille depuis samedi matin sans trouver la solution.

Si un connaisseur a le temps et la gentillesse de m'expliquer simplement la méthode ou d'écrire le code (je comprend mieux avec un code concret) je le remercie d'avance.

Cordialement,

ZZdriver
zzdriver est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 10h19   #2
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
Par défaut Envoi de mails à partir d'un formulaire

Merci d'avoir rectifié l'Intitulé et d'avoir placé ma demande dans la bonne section.
Avec mes excuses.
Cordialement,
zzdriver est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 11h32   #3
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
Bonjour,

ce n'est pas tout à fait correct.

ta procédure de CreateEmail semble correcte, si ce n'est l'initialisation du destinataire qui est farfelue.

le principe de cette procédure est qu'elle doit être appelée avec des paramètres, paramêtres qui seront utilisés dans la procédure elle-même.

les paramêtres sont visible dans la déclaration de la procédure :

Code :
1
2
3
4
5
Public Sub CreateEmail( _
    Recipient As String, _
    Subject As String, _
    Body As String, _
    Optional Attach As Variant)
parm 1 : récipient : le destinataire (ou les destinataires)
parm 2 : subjet : titre de ton email
parm 3 : body : le texte proprement dit
parm 4 : Attach : un éventuel attachement

Donc,

1)
dans ta procédure de CreateEmail, je remplacerais ceci
Code :
oEmail.To = "SelectForm missions_attribuee_du_jour,Installateurs,email"
par ceci
2) L'appel à cette procédure est à revoir complètement

Je ne comprend pas l'utilité de ceci
Code :
1
2
3
Private Sub Form_AfterUpdate()
mailauto = "=Module1()"
End Sub
Et je changerai le code du bouton de la manière suivante, en supposant que à la fois Recipient, Subject, Body et Attach sont des objets de ton formulaire.

Appelons les
- Dest pour recipient
- Titre pour subject
- Corps pour body
- Fichier pour attach

Code :
1
2
3
4
5
6
Private Sub mailauto_Click()
CreateEmail( Me![Dest],_
    Me![Titre], _
    Me![Corps], _
    Me![Fichier])
End Sub
J'espère que ceci t'aidera un peu.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 12h27   #4
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
Bonjour Godzestla, et merci pour ta réponse rapide,

Le point 2 était fait pour "activer" le module au chargement du formulaire (j'ai lu, je ne sais plus où, que c'était nécessaire, à priori, non)

J'ai modifié le module (Recipient)

En revanche, en ce qui concerne la procédure "bouton"
Et je changerai le code du bouton de la manière suivante, en supposant que à la fois Recipient, Subject, Body et Attach sont des objets de ton formulaire.

Appelons les
- Dest pour recipient
- Titre pour subject
- Corps pour body
- Fichier pour attach



Code :
1
2
3
4
5
6
Private Sub mailauto_Click()
CreateEmail( Me![Dest],_
    Me![Titre], _
    Me![Corps], _
    Me![Fichier])
End Sub
J'ai essayé ceci :

Private Sub mailauto_Click()
CreateEmail( Me![Dest],= email) email étant le nom du champ contenant l'adresse email dans le formulaire.
J'ai la réponse: erreur comilation, attendu =

Quand j'utilise :
CreateEmail(Me![Dest],=email)

J'ai la réponse:erreur comilation, attendu "expression"

J'ai remplacé "=" par "Comme" et par "as" sans plus de succès.

Il est évident que VBA ne se trompe pas et que l'âne c'est bien moi mais je commence à avoir de "serious nervous breakdown"......

Si tu peux m'éclairer de ta lumière...

Cordialement,

ZZdriver
zzdriver est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 12h39   #5
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
Citation:
Il est évident que VBA ne se trompe pas et que l'âne c'est bien moi mais je commence à avoir de "serious nervous breakdown"......
C'est toi qui l'a dit , mais surtout tu n'as pas lu ou compris ce que je t'ai écrit.

Et puis, il faut utiliser les balises codes pour la lisibilité (voir rêgles du forum).

je te proposais :
Code :
1
2
3
4
5
6
Private Sub mailauto_Click()
CreateEmail( Me![Dest],_
Me![Titre], _
Me![Corps], _
Me![Fichier])
End Sub
Si ta variable que j'appelle Dest s'appelle Email dans ton formulaire, alors la syntaxe est

Code :
1
2
3
Private Sub mailauto_Click()
CreateEmail( Me![Email], Me![Titre], Me![Corps],Me![Fichier])
End Sub
Le raisonnement est le même pour les autres parms. (çad à remplacer par TES noms de contrôles de ton formulaire)

je ne sais pas de quel langage tu t'inspires, mais les = qqchose n'ont pas leur place dans ce contexte.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h09   #6
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
Effectivement, je n'avais pas compris ....
Pour avancer "pas à pas" et du fait que l'objet et le corp de l'email ne sont pas dans le formulaire (je vais le faire avec un champ largeur 0 pour le rendre présent mais invisible)

J'ai essayé ceci (uniquement l'adresse E mail du destinataire):
Code :
1
2
3
4
 
Private Sub mailauto_Click()
CreateEmail (email)
End Sub
J'ai eu un message d'erreur avec "CreateEmail surligné en bleu:
"Erreur de compilation : Argument non facultatif"

J'ai pensé que le Module attendait les autres informations.
J'ai indiqué des champs présents dans le formulaire (même s'ils n'ont rien à voir) avec cette commande :
Code :
1
2
3
4
 
Private Sub mailauto_Click()
CreateEmail(Me![email], Me![Raison SOciale], Me![N° de contrat],Me![Ville])
End Sub
J'ai eu un message d'erreur "Erreur de compilation, Erreur se syntaxe"

J'ai ensuite entré uniquement "CreateEmail" et suivi l'aide à la syntaxe qui s'inscrit.
J'ai utilisé ce code (sans Me!) puisque non proposé dans l'aide:
Code :
1
2
3
4
 
Private Sub mailauto_Click()
CreateEmail [email], [Raison SOciale], [N° de contrat], [Ville]
End Sub
A ce stade, lorsque je clique sur mon bouton "mailauto", j'ai un nouveau message d'erreur mais qui est lié au module "Public Sub CreateEmail"

"Erreur de compilation:Type défini par l'utilisateur non défini"

Avec
Code :
1
2
3
4
5
Public Sub CreateEmail( _
    Recipient As String, _
    Subject As String, _
    Body As String, _
    Optional Attach As Variant)
Surligné en jaune.

Et
Code :
Dim appOutLook As Outlook.Application
Surligné en bleu

Dans mes références (outils ---références)
J'ai bien:
Visual Basic For Applications
Microsoft Access 12.0 Object Library
OLE Automation
Microsoft Access 12.0 Access database Engine Object Library
Microsoft Visual Basic For Applications Extensibility 5.3

Je me lance peut être dans une programmation trop compliquée pour moi mais j'ai toujours eu envie d'apprendre.

Je sais que je pose probablement des questions très basiques et ennuyeuses.
Cela dit, je suis pret à partager mes connaissances (ce que je fait régulièrement) sur l'animation vectoriel (Flash) ou sur ce que j'ai composé en PHP (Prestashop)

Dans tous les cas, merci pour tes réponses précédentes et pour la suivante si tu en as le temps.

PS: c'est vrai que le message est plus "propre" avec les balises...
zzdriver est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h48   #7
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
Euuuuuuuuuh, on ne va jamais en sortir ainsi, car l'informatique ce n'est pas merlin l'enchanteur ni les comptes de l'alchimiste.

il y a des rêgles à suivre, une syntaxe à respecter, tout comme une prise électrique danoise ne peut recevoir une fiche de cable életrique aux normes US.

Alors, je crois qu'il est temps que tu fonce un peu dans la FAQ, dans les tutos et que tu planches un peu sur les bases d'accès car essayer tout et n'importe quoi dans tous les sens, cela ne te mènera nulle-part à part à remplir le forum de tes nombreux essais divers qui ne peuvent qu'aboutir qu'à une conclusion unique : Chaque langage a ses rêgles. ne pas les respecter c'est échouer dans la communication, avec l'interlocuteur où la machine.


Maintenant, si tu as besoin de faire ce genre de tests, pas de soucis, mais il vaut mieux que tu essuies les plâtres seuls, jusqu'à t'apercevoir qu'en finalité c'est la machine qui dicte ses rêgles et pas le contraire.

Qu'en dis tu ?
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 16h23   #8
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
J'en dis que je te remercie pour le temps que tu as m'as accordé.
Que tes conseils m'ont permis d'avancer même si je n'ai pas encore obtenu le résultat recherché.
Qu'effectivement, je vais aller sur les FAQ pour m'inspirer des codes inscrits dans les exemples pour comprendre (même si c'est très partiellement) la syntaxe utilisée.
Malheureusement, je ne dispose pas en ce moment d'assez de temps pour me former plus en profondeur, mais ce sera fait car, même à 50ans, je suis toujours très avide de connaissance, surtout lorsque l'application est directe, c'est toujours pour moi une forme de petite victoire.
Pour conclure, merci encore pour ton aide.

Je te souhaite une excellente fin de journée.

Cordialement,
zzdriver 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 02h49.


 
 
 
 
Partenaires

Hébergement Web