ENVOI AUTOMATIQUE DE MAIL (AVEC PIÈCE JOINTE) EN VBA : EXCEL, WORD OU ACCESS PAR

cs_Pirotes31 Messages postés 37 Date d'inscription lundi 15 novembre 2004 Statut Membre Dernière intervention 3 juillet 2015 - 26 mai 2005 à 08:45
Hiro_ Messages postés 1 Date d'inscription mercredi 3 août 2016 Statut Membre Dernière intervention 3 août 2016 - 3 août 2016 à 22:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31545-envoi-automatique-de-mail-avec-piece-jointe-en-vba-excel-word-ou-access-par-oulook-express-ou-modzilla-thunderbird-ou-d-autres

Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
25 juin 2007 à 19:34
Bonjour,

comme tout le monde, le code est très bien, mais je voudrais savoir deux choses :

- le mail est-il sensé s'envoyer automatiquement, parce que chez moi l'utilisateur doit quand même appuyer sur la touche "envoyer".. (ça tue le charme :p)
- comment je peux insérer un lien hypertexte dans le corps

Merci beaucoup
Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
26 juin 2007 à 10:40
Rectification : pour l'envoi automatique c'est bon c'est juste une questiion de réglage du timer, le temps que le client messagerie s'ouvre, mais pour le lien hypertext par contre je sais pas, si quelqu'un avait un type, ça serait bien vu :)
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
1 juil. 2007 à 16:35
Bonjour et merci pour ce code.
Je m'en sers pour envoyer en pièce jointe une feuille de mon classeur au format pdf.
J'ai eu quelques petits soucis avec Thunderbird (pièce jointe envoyée d'une façon aléatoire, désactivation de la touche VerrNum) j'ai donc remplacé

TouchesPJ(0) = 4 ' Nombre de touches nécessaires
TouchesPJ(1) = "{F10}" ' Appel du menu Fichier par les touches F10 et DOWN
TouchesPJ(2) = "{DOWN}"
TouchesPJ(3) = "j" ' appel du sous-menu Joindre par la touche j
TouchesPJ(4) = "f" ' sous-sous-menu Fichier par la touche f


Je suis sur Excel 2007 et ThunderBird 2.0.0.4
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
1 juil. 2007 à 17:00
Pour Gorzyneon ,
L'envoi de lien hypertexte type mailto ou http fonctionne.
Je n'ai pas trouvé comment ajouter du "&body" , ni comment afficher "proprement" le "?subject"
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
1 juil. 2007 à 22:28
C'est encore moi
Pour ceux que l'envoi de copie cachée intéresse, il faut utiliser Bcc

HyperLien = "mailto:" & Adresse
HyperLien = HyperLien & "?Cc=copie@xxxxx.com" ' Copie
HyperLien = HyperLien & "&Bcc=copie_cachée@xxxxx.com" ' Copie cachée
HyperLien = HyperLien & "&Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
ActiveWorkbook.FollowHyperlink HyperLien
pc152 Messages postés 38 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 9 octobre 2008
2 août 2007 à 10:02
Petite contribution pour OFFICE 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 avec Alt-v

La seul chose qui est domage c'est l'ouverture et la fermeture d'Office Outlook.

Si quelqu'un à une methode pour l'envois de mail depuis excel sans l'ouverture d'outlook.

Merci
Youplabooom Messages postés 1 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 5 septembre 2007
5 sept. 2007 à 18:50
Excellent code, bravo et merci.
Petit problème néanmoins pour moi. Le texte de mon mail est très long, et la macro qui fonctionne très bien pour les textes courts se met à bugger. Avez vous une idée de la solution ?

Merci beaucoup
tiph_101 Messages postés 14 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 17 septembre 2007
10 sept. 2007 à 10:17
Bonjour,

J'ai le même problème que YOUPLABOOM.

Merci d'avance
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
14 sept. 2007 à 21:27
D'abord 2 Mots : GÉNIAL et MERCI (focntione, SANS MODIF, sur Outlook express et Outlook2003)

J'ai rajouter une messagerie, Incrédimail, voici le code :

Sub 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 avec Alt-s
End Sub
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
14 sept. 2007 à 21:39
Bon maintenant j'ai un problème pour le corps du mail, si quelqu'un à la solution, me la communiquer, SVP - Merci.
Problème :
Dans le coprs du mail, je n'arrive pas à aller à la ligne.
Je voudrai le résultat suivant :
Ligne1
Ligne2

Resultat : Ligne1 (un symbole carré) Ligne2 J'ai utilisé les codes suivants :
Corps= "Ligne1" & vbCrLf & "Ligne2"
Résultat : Ligne1 vbCrLf Ligne2
ou Corps= "Ligne1" & Chr(13) & "Ligne2"
Résultat : Ligne1 (1 symbole carré) Ligne2
ou Corps= "Ligne1" & Chr(10) & "Ligne2"
Résultat : Ligne1 (1 symbole carré) Ligne2
ou Corps= "Ligne1" & Chr(13)+Chr(10) & "Ligne2"
Résultat : Ligne1 (2 symbole carré) Ligne2

En utilisant msgbox("Ligne1" & vbCrLf & "Ligne2") j'ai le message correct cad : Ligne1
Ligne2
Ou en mettant Chr(13), Chr(10), etc tout est correct.

Donc cela ne vient pas de vbCrlF ou de Chr(13), Chr(10)

Je suis dans l'impasse...

En attente d'une solution, et encore Merci par avance.
tiph_101 Messages postés 14 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 17 septembre 2007
17 sept. 2007 à 08:18
Pour le retour à la ligne, essaie :

Corps "Ligne1" & "%0A" & "Ligne2" ("%0A" "%zéroA")

J'avais le même problème et avec "%0A", le retour à la ligne fonctionne.

J'espère que ton problème va être résolu par ce biais.
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
17 sept. 2007 à 20:59
OUI, mon problème est parfaitement résolu avec "%0A", le retour à la ligne fonctionne dans le corpsdu mail.

MERCI BEAUCOUP.
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
19 sept. 2007 à 22:13
Bonjour,
j'ai un souci en essayant d'envoyer plusieurs adresses en "Bcc".
Il ne me prend que la première et les N autres il les met dans mailto.

Mon code :
HyperLien = "mailto:" & "my.adress@chezmoi.fr" & "?"

HyperLien = HyperLien & "Subject=" & Objet
HyperLien = HyperLien & "&Body=" & Corps
HyperLien = HyperLien & "&Bcc=" & LesAutresAdresses

ActiveWorkbook.FollowHyperlink HyperLien

Avec LesAutresAdresses=adress1@toto.com;adress2@toto.com;adress3@toto.com;

Résultats :
"A" : my.adress@chezmoi.fr;adress2@toto.com;adress3@toto.com
"Bcc" : adress1@toto.com

Si quelqu'un a déjà rencontré ce problème et a la solution, merci pour l'aide.
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
20 sept. 2007 à 11:01
Bonjour,
pour compléter le message du dessus, les tests en "Bcc" ont été faits pour "incredimail".
Je viens d'effectuer ces mêmes tests avec Office2003Outlok et là cela fonctionne parfaitement.

Désolé, si j'ai fait chercher quelqu'un et merci.
tizamourine Messages postés 1 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 20 septembre 2007
20 sept. 2007 à 15:16
Bonjour,
Je suis un nouveau venu dans le monde VBA, le code est super et répond parfaitement à mon besoin à part que la pièce jointe n'arrive pas à être ajouté au mail. Je m'explique, je suis sur outlook office 2003, sans pièce jointe le mail part très bien. Par contre, quand j'ajoute une pièce jointe, la fenêtre d'insertion de pièce s'ouvre, puis le lien est saisi la pièce jointe apparait mais après il ne se passe plus rien. Même si j'appuie sur enter avec la souris ca ne fonctionne pas, il faut que je sélectionne la PJ avec la souris et ENTER.
Est ce que quelqu'un aurait une solution à mon problème ?
Merci d'avance.
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
21 sept. 2007 à 13:01
Bonjour,

savez-vous s'il est possible de mettre un autre expéditeur que celui par défaut ?

Si OUI, avez-vous le code ?

Merci beaucoup.
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
21 sept. 2007 à 21:27
Bonsoir,
Pour répondre à Koloco
HyperLien = HyperLien & "&Reply-To=reponse@XXXX.com" fonctionne avec Office 2007 et Thunderebird

@+
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
21 sept. 2007 à 22:31
Bonsoir,
tout d'abord merci pour votre réponse qui est correcte pour monmessage.
Mais je me suis mal exprimé (mes excuses).
Dans Thunderbird j'ai plusieurs compte de messagerie 4 pour la famille) et 1 pour une association.
Le soft donné Tout en haut (GENIAL au passage) permet de démarrer la messagerie utilisé par défaut (c'est le but) et aussi sur le compte de messagerie par défaut (le mien personnel). Je voulais que ce soft permette de choisir le compte de l'association au démarrage.
J'ai trouvé une astuce qui est pour Thunderbird donné dans le code suivant :
Sub Ouvrir_MozillaThunderbird()
'Initialisation des tableaux de touches pour Mozilla Thunderbird
' Pour une pièce jointe {DOWN}
TouchesPJ(0) = 5 ' Nombre de touches nécessaires
TouchesPJ(1) = "%x" ' Se positionne dans la fenêtre expéditeur (le
' compte par défaut) par la touche Alt-x
TouchesPJ(2) = "{DOWN}" ' Passe au compte de messagerie suivant (flèche vers le bas)
TouchesPJ(3) = "{DOWN}" ' Passe au compte de messagerie suivant (flèche vers le bas)
TouchesPJ(4) = "{DOWN}" ' Passe au compte de messagerie suivant (flèche vers le bas)
TouchesPJ(5) = "{DOWN}" ' Passe au compte de messagerie suivant (flèche vers le bas) (je m'arrête car je suis sur le bon compte)
End Sub

En descendant de N Flèches, j'accède au compte de messagerie de l'association (ce n'est peut-être pas très beau, mais c'est efficace) et répond parfaitement à mon besoin.

Cordialement.
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
21 sept. 2007 à 23:22
Bonsoir Koloco
Ma réponse de toute façon ne fonctionne pas! Je me suis quelque peu embrouillé dans mes test.
Votre solution fonctionne et je n'est pas trouvé mieux, siu ce n'est t'envoyer la touche de la première lettre du compte plutôt que des {DOWN} consécutifs

SendKeys "%xt", True pour sélectionner le premier compte qui commence par "T" test@xxxx.com
ou
SendKeys "%x{f 3}", True ' le 3ème compte qui commence par "F"
ou
SendKeys "%x{DOWN 4}", True ' pour atteindre le 4ème compte

Salutations
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
21 sept. 2007 à 23:25
La même sans les fautes

Bonsoir Koloco
Ma réponse de toute façon ne fonctionne pas! Je me suis quelque peu embrouillé dans mes tests.
Votre solution fonctionne et je n'ai pas trouvé mieux, su ce n'est d'envoyer la touche de la première lettre du compte plutôt que des {DOWN} consécutifs

SendKeys "%xt", True pour sélectionner le premier compte qui commence par "T" test@xxxx.com
ou
SendKeys "%x{f 3}", True ' le 3ème compte qui commence par "F"
ou
SendKeys "%x{DOWN 4}", True ' pour atteindre le 4ème compte

Salutations
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
21 sept. 2007 à 23:26
Presque
je vais me coucher!!
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
22 sept. 2007 à 13:36
Bonjour,
je viens de prendre en compte votre solution (SendKeys "%xt",)
et elle fonctionne parfaitement.

Je lui ai donné les 4 premières lettres du compte (fjep-...)
SendKeys "%xfjep" et cela fonctionne parfaitement.

VBA me sort une erreur en rajoutant True ? (mais cela fonctionne sans.

GRAND MERCI, parce que cela évite de toucher au code en cas de rajout de compte de messagerie.

Salutations.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
23 sept. 2007 à 10:44
Pour Youplaboum et Tiph_1001

Bonjour,

En effet, le type de variable déclaré dans la procédure Sub EnvoiMail pour l'argument Corps est String et sa taille est limitée à 256 caractères.

Il faudrait essayer de déclarer en Variant comme ceci :

Sub EnvoiEmail(Adresse As String, Objet As String, Corps As Variant, Optional PJ As String)

A vérifier.

Plus généralement : quand j'ai écrit ce code (il y a + de 2 ans) j'avais hésité à utiliser le Copier/Coller pour constituer le corps du message, mais comme au départ, il ne s'agissait que d'envoyer un petit texte, j'avais retenu la solution la plus simple.

Depuis j'ai fait une petite adaptation pour joindre des données présentées en tableau (cf mon commentaire du 11/06/2007). Et depuis, je me dis qu'il faudrait que j'essaie cette technique du copier/coller qui permettrait d'envoyer n'importe quoi dans le corps du message. Il ne faut pas oublier que l'on peut déjà envoyer à peu près n'importe quoi en utilisant une pièce jointe.

Cordialement
JC
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
23 sept. 2007 à 13:51
bonjour,
pour les corps de message trop long,
j'utilise une image du texte

ActiveWorkbook.Worksheets("test").Activate
'on mémorise si le quadrillage est affiché
DG = ActiveWindow.DisplayGridlines
'on enlève le quadrillage
ActiveWindow.DisplayGridlines = False
'Copie, en tant qu'image, les cellules sélectionnées dans la feuille.
Range("A1:G44").CopyPicture
'on colle
ActiveSheet.Paste
'on recopie dans le presse papier
Selection.Copy
'on supprime l'image temporaire
Selection.Delete
'on rétablie le quadrillage comme à l'origine
ActiveWindow.DisplayGridlines = DG

HyperLien = "mailto:" & "adresse1@xxxxx.com" & "?"
HyperLien = HyperLien & "BCC=adressebcc@xxxxx.com"
HyperLien = HyperLien & "&Subject=" & Sujet
'HyperLien = HyperLien & "&Body=" & Corps
ActiveWorkbook.FollowHyperlink HyperLien
Attendre 2
on colle avec shift + insert
SendKeys "+{INSERT}", True

salutations
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
24 sept. 2007 à 10:02
Bonjour,

Autant pour moi : Il faut bien garder l'argument Corps en String car la méthode FollowHyperlink attend un argument String.

D'autre part le type String peut recevoir jusqu'à 2^31 (2 milliards) caractères.

Par contre la méthode FollowHyperlink bloque à partir de 818 caractère (pourquoi à 817 ça passe ??? drôle de limitation) pour l'ensemble de l'adresse (mailto+subject+body....)

Donc au delà de cette limite, utiliser le copier coller comme l'indique FRED65200

Cordialement
JC
mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009
26 sept. 2007 à 18:13
boujour à tous,

vba excel et pièces jointes dans outlok 2003, hé bien ça marche pas , même en reprenant les codes existant. Les pièces jointes n'apparaissent pas.

Merci
ancestrix Messages postés 1 Date d'inscription jeudi 1 septembre 2005 Statut Membre Dernière intervention 9 octobre 2007
9 oct. 2007 à 12:11
Bravo et merci pour ce très bon code qui me dépanne beaucoup.

Je vais devoir l'utiliser avec 'lotus'
Savez-vous si un amateur a communiqué la solution ?

merci
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
10 oct. 2007 à 10:59
Bonjour

Pour MDELPH : Je manque un peu de précisions sur le bug. Voyez-vous les simulations des touches se faire ? Et si oui avez-vous repéré celle(s) qui ne fonctionne(nt) pas ? Pour bien voir ce qui se passe, vous pouvez allonger les temps de pause entre l'envoi de chaque touche avec Attendre 2 (ou plus)...

Pour ANCESTRIX : Hélas je n'ai pas vu trace d'infos sur lotus. Mais vous pouvez trouver tout seul en notant les touches à utiliser pour envoyer un message déjà composé (puisque la composition est assurée par le code). Généralement cela commence par l'activation d'un menu par Alt+une touche...
Vous faites la même chose pour l'envoi d'une pièce jointe
vous ajoutez une procédure dans le code sur le modèle des autres
vous ajoutez l'appel à cette procédure dans le SELECT CASE avec un Case 8 (par exemple)
Vous positionnez la variable Client=8

Si ça marche, pensez à me communiquer le résultat de vos recherches en indiquant bien la version de lotus utilisée

Cordialement
JC
maingu64 Messages postés 1 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 19 novembre 2007
19 nov. 2007 à 17:04
Bonjour,

Je vais également utilisé ce code sous lotus pour envoyer un mail à partir d'un bouton de commande.
Le bouton de commande est situé dans une userform d'un fichier excel comportant 5 feuilles. Est-il possible de joindre une seule feuille de ce fichier dans le mail, et non le fichier complet.
Ce code permet-il d'envoyer un mail automatiquement, à partir de plusieurs ordinateurs dont l'utilisateur n'est pas le même (émetteur différent).
Merci de votre réponse.

Mickael.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
22 nov. 2007 à 21:07
Bonjour Mickael (MAINGU64),

Pour n'envoyer qu'une feuille :
Une feuille n'est pas un document (au sens windows du terme, donc un fichier sur le disque) et ne peut donc pas être une pièce jointe. Par contre, vous pouvez envoyer un classeur qui ne contient que cette feuille.

Pour cela je vous suggère

-de copier la feuille voulue dans un nouveau classeur,
-d'enregistrer ce classeur,
-de l'envoyer
-puis de supprimer le fichier ainsi créé...

mais tout cela en VB bien sur. avec un code du genre:

Sheets("Feuille à envoyer").Copy ' sans destination du type Before ou After,
' Excel copie la feuille dans un nouveau classeur
' et active ce dernier
ActiveWorkBook.SaveAs Filename:="D:\Mes Documents\Classeur à Envoyer.xls" ' enregistre le classeur qui ne contient que la feuille à envoyer
ActiveWindow.Close ' ferme le classeur
' Appel la procédure d'envoi de mail
EnvoiEmail "adresse1@xx.com,adresse2@xx.com", _
"Voici le document....", _
"le texte du message", _
"D:\Mes Documents\Classeur à Envoyer.xls"
Kill "D:\Mes Documents\Classeur à envoyer.xls" ' Efface le classeur envoyé du disque !!!

Les noms des différents déstinataires sont séparés par des virgules
L'instruction Kill supprime le fichier sur le disque (attention, pas de demande confirmation et PAS DE CORBEILLE : suppression directe)

Je ne pense pas que l'usage de cette procédure par plusieurs personnes sur un réseau pose de problème car chaque application Excel dialogue avec le client de messagerie du poste ou de l'utilisateur de la session

cordialement
JC
BERU80 Messages postés 19 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 7 octobre 2008
28 nov. 2007 à 17:39
bon code après plusieurs essais pas de problèmes particuliers 9/10
swyss Messages postés 1 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 2 décembre 2007
2 déc. 2007 à 14:34
Bonjour,

J'ai bien essayé votre code (envoi automatique d'un mail avec pièce jointe ) et il marche très bien en exécution directe. Hélas, mon problème est le suivant: Si j'essaye de mettre mon Excel qui contient le code dans les "scheduled tasks", le code se déroule an arrière plan. L'excel s'ouvre, l'OutlookExpress s'ouvre également (visible dans le task manager), mais la suite ne se fait plus. Je présume que les commandes "SendKeys" ne fonctione pas et ainsi la suite ne se fait plus. Est-ce quelqu'un a déjà vu ce problème et ev. une solution à ce problème?

Merci d'avance
Sandro
lmet35 Messages postés 1 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 31 décembre 2007
31 déc. 2007 à 15:14
En effet, simple et efficace!
Je sens que mes chers utilisateurs vont en faire la pub autour d'eux et que je devrais mettre cette fonctionnalité dans beaucoup de mes bases (Dvpt sous Access).

Chapeau Bas...

LM
JeanMimi75 Messages postés 3 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 12 janvier 2008
12 janv. 2008 à 09:34
Super documenté . . . . . Bravo !
je souhaite l'utiliser avec ACCESS, et là petit problème :
les arguments passés par la variable "HyperLien" dans la commande commande "Application.FollowHyperlink HyperLien" se retrouve tous dans la ligne "Adresse" de OutLook .

Qu'ai-je fait de pas bien ? ? ? ?

S'il vous plait aidez moi ..
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
12 janv. 2008 à 12:02
Pour JeanMimi75

Essayez de faire un 'MsgBox Hyperlien' avant l'instruction 'Application.FollowHyperlink HyperLien' et faites une capture d'écran du message affiché pour me l'envoyer.
(Vous pouvez aussi faire un 'Debug.Print Hyperlien' et copier ce qui s'affiche dans la fenêtre de débugage)

Normalement, c'est le point d'interrogation qui introduit les arguments du MailTo

Je viens de faire un essai avec un copier coller du code publié ci-dessus dans une mini appli access et ça marche tel quel sans changer une ligne de code (il faut tout de même supprimer les fonctions PH et PT qui ne fonctionnent qu'avec Excel).

Envoyez moi votre adresse mail et je vous envoie la mini base access pour que vous puissiez comparer (j'utilise Access 2003, dites moi si je dois vous l'envoyer dans une version antérieure)

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
16 janv. 2008 à 11:43
Suite à quelques échanges fructueux avec JeanMimi75 j'indique ici une méthode (trouvée par JeanMimi sur VBFrance) qui fonctionne avec OutLook. J'y ai ajouté la gestion des pièces jointes.

Son avantage est que cette technique n'affiche pas la fenêtre Outlook lors de l'envoi et qu'elle est tout de même plus élégante.

Elle utilise la technologie Automation (OLE) et nécessite donc d'ajouter la référence "Microsoft Outlook 11.0 Object Library" au projet VBA (Menu Outils-Réferences).

Sub EnvoiMailMéthodeOLE(Adresse As String, Objet As String, Corps As String, Optional Pièce As String, Optional Cc As String, Optional Bcc As String)
Dim MonAppliOutlook As New Outlook.Application
Dim MonMail As Outlook.MailItem
Dim MaPièce As Outlook.Attachments
Set MonMail = MonAppliOutlook.CreateItem(olMailItem)
With MonMail
.To = Adresse
If Not IsNull(Cc) Then .Cc = Cc
If Not IsNull(Bcc) Then .Bcc = Bcc
.Subject = Objet
.Body = Corps
If Not IsNull(Pièce) Then
Set MaPièce = .Attachments
MaPièce.Add Pièce, olByValue
End If
.Send
End With
End Sub
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
16 janv. 2008 à 13:09
Suite du message précédent

Un inconvénient avec cette méthode est que les paramètres de sécurité d'Outlook provoquent l'affichage d'un message indiquant qu'une application essai d'envoyer une mail à l'insu de votre plein gré et que cela rompt l'automatisme.

Moralité : si vous voulez écrire un macro virus, utilisez plutôt la méthode FollowHyperLink... ;-)
samylatortue Messages postés 42 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 6 mars 2009
21 janv. 2008 à 09:24
Salut,
Excelente source je susi entrain de l'analyser pour faire qqche des symilaire dans une gestion client Acces.
Est il possible de faire des envoie en se passant d'un client mail ? je sais que ce n'est pas l'objectif de la source qui se veux simple mais je suis entrain de chercher tu coté d'un serveur SMTP en vba si qqun a déjà fait des recherche dans ce sens dites moi.
j'aimerai que le programe soit utilisable sur des ordi n'ayant pas paramétrer de client mail.
++ encore merci pour la source
cs_misfit Messages postés 2 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 30 janvier 2008
28 janv. 2008 à 11:45
Bonjour,

Cela faisait quelques temps que j'utilisais ce source et tout fonctionnait bien (j'avais Excel 2002 et outlook express 6). Je viens de passer sous Excel 2003 et ça ne marche plus : la pièce jointe n'est pas insérée (le mail est lui bien envoyé).
Quelqu'un a t'il la solution
Merci d'avance
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
30 janv. 2008 à 10:06
Bonjour MisFit,

je crois que les raccourcis clavier entre les différentes versions d'excel et d'outlook ont changés, fais des tests manuellement et corrige dans la macro

# 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

cordialement
cs_misfit Messages postés 2 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 12:05
Bonjour,
Tout d'abord merci pour ta réponse.
J'ai déjà regardé ça directement dans OE(les raccourcis sont Alt i puis p). Mais que ce soit avec les sub OfficeOutlook, Office2003Outlook ou Office2003OutlookV2 cela ne marche pas. En fait, tout va bien jusqu'à la ligne 133 (OE s'ouvre, un nouveau message est créé, le destinataire, le corps du message et l'objet apparaissent bien. C'est après qu'OE perd la main (comme si les sendkeys étaient envoyés à Excel). J'ai beau allonger la durée de la tempo cela ne change rien.
J'ai refait des essais sur un autre poste avec Excel 2002 (les versions d'OE sont les mêmes sur les 2 postes) et là ça marche. J'en déduit que c'est Excel 2003 qui provoque l'erreur

Cordialement
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
30 janv. 2008 à 12:19
Bonjour,

Vous pouvez essayer avec la procédure EnvoiMailMéthodeOLE donnée en fin de code. Si vous avez téléchargé le code avant le 16/01/2008, cette partie n'y figurait pas, vous devrez l'ajouter.

Pensez à ajouter la bibliothèque "Microsoft Outlook 11.0 Object Library".

Ceci dit, c'est bizarre que cela ne fonctionne pas. J'utilise personnellement Excel 2003 et Outlook 2003 et je n'ai pas de pb

Cordialement
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
30 janv. 2008 à 12:22
Re bonjour,

suite du message précédent

Attention, cette procédure ne fonctionne qu'avec Outlook et non pas avec Outlook Express

Cordialement
ezmou Messages postés 2 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 11 février 2008
11 févr. 2008 à 12:18
Bonjour !!

Merci Beaucoup
Marche impécable

Utilisation : Formulaire ACCESS VBA + Outlook 2007

Je reviens vers vous concernant la mise en forme du su corps de l'email

En effet, j'aimerais mettre dans le corps du HTML,

Cependant je ne sais comment faire pour modifier le HTMLBODY

Avez vous une solution ou une idée?

Merci d'avance de votre aide
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
11 févr. 2008 à 13:45
Pour EZMOU

Bonjour,

Voici une procédure que j'utilise dans Access pour envoyer un mail en HTML à partir d'un formulaire. Vous pouvez vous en inspirer.

(T0, T1 ...T7, Perso, signature, Nom, Ps, SMail et Objet sont des contrôles de mon formulaire)

Sub EnvoiUn()
Dim Corps As Variant, c As String
c = "

"
Corps = "<html><head><title></title></head>"
Corps = Corps & "
"
Corps = Corps & T0 & c & T1.Caption & c & T2.Caption _
& c & T3.Caption & c & T4.Caption & c _
& T5.Caption & c & T6.Caption & c & T7.Caption & c _
& IIf(Perso <> "", " Message personnel : " & Perso & " ", "") _
& c & Signature.Caption & c & PS.Caption _
& "[ lien] et d'envoyer le message généré."
Corps = Corps & "
</html>"
If Simulation Then
DoCmd.SendObject , , acFormatHTML, "suivi@pro-forma.fr", , "suivi-mails@pro-forma.fr", Objet, Corps, False
Else
DoCmd.SendObject , , acFormatHTML, SMail, , "suivi-mails@pro-forma.fr", Objet, Corps, False
End If
End Sub

En réalité, ici, je n'utilise pas la procédure publiée dans VBFrance car je n'ai pas besoin de pièce jointe. J'utilise plus simplement DoCmd.SendObject. Mais le principe de la composition du corps reste le même.

Vous pouvez aussi vous inspirer de la fonction PH qui figure dans le code publié(dans la partie 'Pour envoyer une plage de cellules'). Cette fonction (utilisable telle quelle uniquement dans Excel) génère un message en HTML très simplifié ( juste une balise <html> et une balise <table>) mais ça marche

Cordialement

Jean
ezmou Messages postés 2 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 11 février 2008
11 févr. 2008 à 15:30
Merci Beaucoup de ta réponse
je vais tester cela et te tiens informer
Smay59 Messages postés 2 Date d'inscription vendredi 9 mai 2008 Statut Membre Dernière intervention 16 mai 2008
13 mai 2008 à 14:33
Bonjour,

Je trouve se code très complet. Cependant, j'ai un soussi. J'utilise ce code sous excel. Dans une de mes colones, il y a différentes adresse mail, une seul par ligne. Je souhaite envoyer a cette adresse des information de la ligne correspondante, sachant qu'il peut y avoir plusieurs envoies à différentes adresses, avec des informations différente.
Est-ce possible?
J'espère avoir été assez claire et comprehensible à la lecture.
ps : je suis novice en VBA

Cordialement
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
14 mai 2008 à 16:19
Bonjour Smay59,

Si vous êtes novice en VBA, cela peut ne pas être facile.

Une piste peut-être

Soit une plage en colonne A avec le texte à envoyer
une plage en colonne B avec les adresses mail en face
une plage en colonne C avec le chemin de la pièce jointe à envoyer

A B C
1 Texte 1 adresse1@xxx C:\Mes Documents\toto1.jpg
2 Texte 2 adresse2@xxx C:\Mes Documents\toto2.jpg
3 Texte 3 adresse1@xxx C:\Mes Documents\toto3.txt
etc...

un code du genre :

Range("A1").Select
Do Until IsEmpty(ActiveCell)
EnvoiMail ActiveCell,"Objet du message",ActiveCell.Offset(0,1),ActiveCell.Offset(0,2)
Loop

devrait fonctionner

Cordialement

Jean
Smay59 Messages postés 2 Date d'inscription vendredi 9 mai 2008 Statut Membre Dernière intervention 16 mai 2008
16 mai 2008 à 11:48
Bonjour Nerim,

Merci pour ta réponce rapide.
J'ai utilisé ton code et deux problème se pose.
Le destinataire n'est pas la bonne colone (j'ai changer ActiveCell.Offset)
L'E-mail doit etre envoyer sous certaine conditions, comme dans le fichier téléchargeable, et la il envoie tous le tableau.
Merci encore, ca m'as bien fait avencer

Cordialement
LUD734 Messages postés 1 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 9 juillet 2008
9 juil. 2008 à 10:53
Bonjour,
Tout d'abord un grand merci pour ce code, il est complet et tourne impeccablement pour Access 2003 et Outlook 2003.
Etant en train de monter une Bdd pour des utilisateurs ne connaissant pas Access et VBA, je souhaiterais pouvoir modifier les différents arguments.
Je m'explique: Le code ne fonctionne que pour des destinataires prédéfinis dans le code même sous Access. Même en utilisant un InputBox, il faut toujours taper les adresses. J'aimerais que la fonction vienne chercher les adresses dans une table liée au form.
Gain de temps pour moi, et surtout, interface utilisable pour les néophytes qui ne savent pas quoi modifier dans le code. Car les destinataires changent très souvent.
Même chose pour la pièce jointe: je souhaite envoyer un état converti en PDF (l'automatisation étant inexistante sous Access 2003, je suis obligé de passer par un code qui enregistre l'état sous PDF -_-), mais l'état change à chaque fois: peut-on programmer un code qui ouvre un explorateur de fichier (type treeview) et sélectionne la pièce jointe?
Bref, une fenêtre qui fonctionne comme un logiciel de messagerie et où on n'aurait pas à taper manuellement le chemin d'accès du fichier joint.

Merci d'avance

LUD734
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
9 juil. 2008 à 20:19
Bonjour,

j'ai récupéré et adapté un code qui répond à ce tu attends.

C'est l'appel de la function FileOpen qui fait tout le travail.

La recopier sans rien changer.

En espérant que cela réponde à ta demande.

Cordialement.

Private Sub CheckBox_PièceJointe_Click()
If CheckBox_PièceJointe.Value = True Then
Dim Tab_PJ(9) As String
Worksheets("Pilotage").Range("Trait_Envoi_PJ").Value = "Oui"
FileOpen
Call RechercheNomsPJ(Tab_PJ) 'Ss-prg qui récupère les noms de Fichiers sélectionnés
Noms_PJ = ""
For I = 0 To 9
If Tab_PJ(I) <> "" Then
i_long = Len(Tab_PJ(I))
For J = i_long To 1 Step -1
If Mid(Tab_PJ(I), J, 1) = "" Then
Noms_PJ = Noms_PJ & Mid(Tab_PJ(I), J + 1, i_long) & " | "
J = 2
End If
Next J
Else
I = 9
End If
Next I
TextBox_PJ.Value = Noms_PJ
Else
Worksheets("Pilotage").Range("Trait_Envoi_PJ").Value = "Non"
Worksheets("Pilotage").Range("Trait_Nom_PJ").Value = ""
TextBox_PJ.Value = ""
End If
End Sub
Function FileOpen(Optional ByVal sTitle As String "Choisir le(s) fichier(s)", Optional ByVal bAllowMultiSelect As Boolean True, Optional ByVal sFiltreName As String = "Images", Optional ByVal sFiltreContent As String = "*.bmp; *.gif; *.jpg; *.jpeg; *.png") As String
' CHOIX D'UN FICHIER PAR VBA
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant, Nb_Fic As Integer

With fd
.Title = sTitle 'Titre
.AllowMultiSelect = bAllowMultiSelect 'Choix multiples
'.Filters.Add sFiltreName, sFiltreContent, 1 'Filtre image
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
FileOpen = Trim(FileOpen & "|" & vrtSelectedItem)
Next vrtSelectedItem
Worksheets("Pilotage").Range("Trait_Nom_PJ").Value = FileOpen
Else
'Bouton Annuler
End If
End With
Set fd = Nothing
End Function
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
11 juil. 2008 à 14:50
Bonjour LUD734,

Il semble que le code de KOLOCO soit plutôt écrit pour Excel... mais l'utilisation de FileDialog est correcte. Attention, la Librairie Office doit être référencée !!

Pour le destinataire, vous pouvez remplacer

# EnvoiMail Adresse:= Range("A1"), _

par

# EnvoiMail Adresse:= ListeChoix, _
# ' Où ListeChoix est le nom d'une liste déroulante d'un formulaire Access
# ' qui permet de choisir le destinataire dans une liste

et pour la pièce jointe, remplacer

# PJ:= Application.Path & "\AJoindre.jpg" _

par

# PJ:=FichierChoisi()

avec la fonction FichierChoisi définie comme suit

Function FichierChoisi() as String
FichierChoisi=""
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
.Filters.Add "Fichiers PDF", "*.PDF", 1
.AllowMultiSelect = False
.Title = "Choix du fichier à joindre"
' Affiche la boite de dialogue Ouvrir et vérifie si un fichier a été choisi
' si on clique sur annuler, Show prend la valeur False
If .Show Then FichierChoisi = fd.SelectedItems(1)
End With
Set fd = Nothing
' La variable Fichier contient le chemin complet du fichier choisi
' et peut être utilisée par la procédure EnvoiMail
End Function

(Voir l'aide de VBAccess à FileDialog illustrée par de nombreux exemples)

Rappel pour le destinataire : Vous pouvez récupérer la valeur d'un champ d'une table ou d'une requête qui correspond à un critère avec la fonction DLookUp

Exemple :

Dim Destinataire as String
Destinataire=DLookUp("[ChampAdresse]","Table Destinataires","[ChampNom]='" & ContrôleNomDuFormulaire & "'")
EnvoiMail Adresse:=Destinataire

Voila, si ça peut vous aider

Cordialement

Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
11 juil. 2008 à 14:58
FileDialog (suite)

le fd devant SelectedItems(1)est bien entendu inutile
un simple .SelectedItems(1) est suffisant puisqu'on est à l'intérieur de la structure
With fd
End With

Par ailleurs, il faut lire
' La fonction FichierChoisi renvoie le chemin complet...
au lieu de 'La variable Fichier contient...
JLHS Messages postés 2 Date d'inscription lundi 26 janvier 2004 Statut Membre Dernière intervention 19 novembre 2008
11 juil. 2008 à 20:21
Bonjour,

J'utilise le code de la fonction EnvoiMailMéthodeOLE
Cela marche parfaitement mais j'ai un petit souci avec la fenêtre outlook qui s'ouvre.

La boîte de demande de confirmation s'ouvre régulièrement dans le coin gauche de la fenêtre outlook, cachant ainsi les entêtes du mail.

Peut-on par code vba positionner différemment la boîte? ou est-ce dans le paramétrage de outlook 2003?

J'aurais souhaité aussi pouvoir formater certaines partie du corps en gras.

Est-il possible également de définir une propriété du mail pour que la signature par défaut d'outlook soit automatiquement ajoutée?

Merci
antone69 Messages postés 1 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 16 juillet 2008
16 juil. 2008 à 14:40
Bonjour à tous,

Ce code source est super!!!
Mais je me demandais, est-il possible de modifier le nom du fichier en fonction des données contenus dans notre feuille de calcul mais qu'il ne soit pas enregistré mais plutôt directement envoyé par mail?
En gros combiner :
Sub cartman()
'ici tu recuperes les nom pour la sauvegarde de ton fichier
fournisseur = Cells(1, 3)
redacteur = Cells(2, 3)
ladate = Cells(3, 3)

'ici tu met le chemin d acces ou tu veux le sauvegarder
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\FDL\Bureau" & fournisseur & "_" & redacteur & "_" & ladate, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
End Sub

Avec le code d'envoi de mail...

Cordialement Antone69
krichk86 Messages postés 1 Date d'inscription samedi 16 décembre 2000 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 14:43
bonjour

bien que ce code semble fonctionner correctement chez tout le monde, sur mon poste les 'mail to' n'ouvrent qu' outlook express. Mozilla1.7.8 est pourtant la messagerie par défaut, c'est la seule qui est valide et je souhaiterai savoir s'il existe une manip' spéciale pour que ces liens ouvrent cette dernière.

merci
gmenguy Messages postés 1 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 12 septembre 2008
12 sept. 2008 à 09:52
Bonjour

Merc pour ce code qui dépanne bien... j'ai juste une dernière demande, je souhaiterais mettre en dure le champ expéditeur sur mon code mais a priori "from" n'existe pas!!
Quelqu'un a t-il une solution ?

Merci
Dioude01 Messages postés 8 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 9 septembre 2009
7 oct. 2008 à 10:05
Bonjour,
nikel ce code, mais y a t'il une solution pour envoyer une alerte par mail pour une une plage ou tache arrivant a échéance.

Merci et bonne continuation.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
8 oct. 2008 à 00:33
Bonjour Dioude01,

Dans le classeur Excel du fichier Zip, vous avez un exemple de mail qui s'envoie automatiquement à l'ouverture du classeur. Le mail contient une liste de taches (cellules) dont l'échéance est atteinte.

Ça devrait pouvoir vous servir...

Nerim
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
8 oct. 2008 à 01:56
Bonjour GMENGUY,

Je n'ai pas la solution VBA pour tous les client mail. Personnellement j'utilise Mozilla Thunderbird et j'ai défini l'expéditeur de mon choix comme expéditeur par défaut de Thunderbird et ça me suffit

Pour le faire en VBA :

Dans Thunderbird, le choix de l'expéditeur de fait en faisant Alt-x (eXpéditeur). Puis si vos nom d'expéditeurs commencent par des lettres différentes, l'initiale de l'expéditeur choisi : exemple Alt-x d (pour Dupont) ou Alt-x f (pour Formation)

Il faudrait envoyer cette séquence de touche par SendKeys dans la procédure
Sub MozillaThunderbird()
avant de valider l'envoi du message :

Sub MozillaThunderbird()
...
' Pour l'envoi du mail
TouchesEnvoi(0) = 3 ' 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) = "{ENTER}" ' confirmation par Entrée
...
End Sub

sur ma machine, je doit placer une temporisation dans la boucle d'envoi des touches pour que ça marche :

Sub EnvoiMail
...
For i = 1 To TouchesEnvoi(0)
SendKeys TouchesEnvoi(i), True ' on envoie le message
Attendre 1
Next i
End Sub

J'ai mis en place cette modification de mon code dans la nouvelle version du ZIP que je mets en ligne aujourd'hui (08/10/08)
Laurent3233 Messages postés 2 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 19 novembre 2008
12 nov. 2008 à 16:00
Bonjour,

Je cherche à envoyer le même message à plusieurs destinataires sans créer un message par personne (+ de 50 destinataires). J'utilise Mozilla Thunderbird comme client de messagerie et je n'arrive pas à renseigner plusieurs adresses dans le champ destinataire (une chaine de type "wwww@aaaa.fr;zzzzz@aaaa.fr;xxxx@aaaa.fr" ne fonctionne pas). Quelqu'un aurait-il la solution?
Merci d'avance.

PS: le code d'origine est super et marche sans problème
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
12 nov. 2008 à 17:32
Bonjour Laurent3233

Je fais des essais et je vous tiens au courant. Si vous n'avez pas de nouvelles d'ici 2 ou 3 jours, relancez moi en m'envoyant un message privé (je ne vient pas très régulièrement sur le site de codes sources

Cordialement

JC
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
12 nov. 2008 à 20:16
Bonjour,
voici un bout de code ou j'envoie à 1 seul mail à N élèves. Mais attention le nombre de caractères dans le champ adresses est limité à 818 caractères max y ciompris le coprs du mail (explication au dessus par Nerim le 24/09/2007 : Par contre la méthode FollowHyperlink bloque à partir de 818 caractère (pourquoi à 817 ça passe ??? drôle de limitation) pour l'ensemble de l'adresse (mailto+subject+body....)

Voici mon bout de code :
' Tab_Adres_Mail : est un tableau dans lequel j'ai au préalable chargé toutes les adresses mails des élèves
' Mon Tableau Tab_Hyperlien contiendra N fois (si besoin) les adresses (de 817 caractère max) séparés par un ";"

' Éleves : les adresses seront en Blind Carbon Copie (copie cachée) pour éviter la diffusion aux autres des adresses et aussi pour éviter un reply All

Nb_Max_Car_Adress = 817

Tab_Hyperlien(Nb_Hyp) = "mailto:" & Adresse_Expéditeur & "?" 'Je m'envoie systématiquement le mail des élèves.
Tab_Hyperlien(Nb_Hyp) = Tab_Hyperlien(Nb_Hyp) & "Subject= " & Objet
Do
Ind_Adress = Ind_Adress + 1 Long_Adress Len(Tab_Hyperlien(Nb_Hyp)) + Len(Tab_Adres_Mail(Ind_Adress)) + Len(Corps) + 11 ' 11 : 5"&Bcc=" + 6="&Body="
If Long_Adress < Nb_Max_Car_Adress Then
' Alors : Je rajoute l'adresse
Tab_Hyperlien(Nb_Hyp) = Tab_Hyperlien(Nb_Hyp) & "&Bcc=" & Tab_Adres_Mail(Ind_Adress)
Else
Sinon : j'insère le corps
Tab_Hyperlien(Nb_Hyp) = Tab_Hyperlien(Nb_Hyp) & "&Body=" & Corps
' Et j'incrémente mon compteur
Nb_Hyp = Nb_Hyp + 1
Tab_Hyperlien(Nb_Hyp) = "mailto:" & Adresse_Expéditeur & "?"
Tab_Hyperlien(Nb_Hyp) = Tab_Hyperlien(Nb_Hyp) & "Subject= " & Objet
End If
Loop Until Tab_Adres_Mail(Ind_Adress) = ""
Tab_Hyperlien(Nb_Hyp) = Tab_Hyperlien(Nb_Hyp) & "&Body=" & Corps
End If

'Ensuite une boucle pour envoyer le mail (si plus de 817 car ou multiple de 817 alors il ouvrira N mail)
ind_Hyp = 0
Do
ActiveWorkbook.FollowHyperlink Tab_Hyperlien(ind_Hyp)

.... ' faire les sendkeys utiles pour l'envoi ....

ind_Hyp = ind_Hyp + 1
Loop Until ind_Hyp > Nb_Hyp

Moi aussi je fais tout sur Thunderbird.

Bon courage

Koloco
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
12 nov. 2008 à 20:26
Un rajout des initialisations au début :
Ind_Adress = 1 'l'adresse à l'indice 0 étant la mienne
Nb_Max_Car_Adress = 817
Nb_Hyp = 0
Javanaise1 Messages postés 3 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 10 février 2009
17 nov. 2008 à 22:56
Bonjour,
Félicitations pour cette procédure.
Je cherchais depuis quelques jours comment envoyer rapidement le même texte avec en pièce jointe une fiche personnalisée en format pdf spécifique à chaque personne d'une longue liste de diffusion. Et cela à partir d'une base de données gérée sous Excel.
J'ai maintenant la solution avec cette procédure que je vais adaptée à mes besoins.
Encore merci.
Cordialement
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
18 nov. 2008 à 18:56
Bonjour,

Juste une petite remarque. J'ai essayé les destinataires multiples avec thunderbird (version 2.0.0.17) et il lui faut des virgules pour séparer les adresses au lieu des point-virgules.

Par ailleurs, il peut être utile de placer une temporisation entre deux envois.

Voici deux versions d'envoi en nombre :

1)Chaque destinataire reçoit la même pièce jointe mais l'objet et le corps du message sont spécifiques à chaque destinataire : Donc il faut n mails différents :

Sub EnvoieUnMailParDestinataire()
' le nom "Document" fait référence à une plage Excel
' qui contient l'adresse de la pièce jointe
' le nom "Plage" fait référence à une plage (de 3 colonnes)
' qui contient les adresses mel (col 1),
' la partie variable du corps (col 2),
' et l'objet (col 3)
Dim i As Integer
Dim LAdresse As String, LObjet As String, LeCorps As String, LaPièce As String

For i = 1 To Range("Plage").Rows.Count ' Boucle pour chaque ligne de la plage
With Range("Plage").Cells(i, 1) ' avec la cellule en ligne i, colonne 1
LAdresse = .Value ' sa valeur est stockée dans la variable LAdresse
LObjet = .Offset(0, 2).Value ' on stocke l'objet (décalage de 2 colonne)
' Exemple de corps composé d'une partie fixe et d'une partie
' spécifique à chaque destinataire
' ici la partie variable du corps représente un identifiant
' que l'on veut rappeler à chaque destinataire
LeCorps = "Nous vous rappelons votre identifiant : " & .Offset(0, 1).Value ' on stocke l'ID (décalage de 1 colonne)
LeCorps = LeCorps & "%0D" & "J'ai ajouté une temporisation entre chaque envoi"
LaPièce = Range("Document").Value ' on stocke l'adresse physique de la pièce jointe
End With
EnvoiEmail Adresse:=LAdresse, Objet:=LObjet, Corps:=LeCorps, PJ:=LaPièce
Attendre 2
Next i
' avec les temporisation on a le temps d'aller boire un café si on a une centaine de destinataires
' mais ça tourne tout seul...
End Sub

suit dans le prochain message
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
18 nov. 2008 à 19:11
Suite du message précédent :

2) tout le monde reçoit le même mel. On regroupe les adresses dans le même mel avec les limites évoquées par Koloco, on doit éventuellement faire paquets. Sa solution fonctionne à tous les coups et je pense que je vais l'utiliser pour mon propre usage.

Mais comme j'utilise déjà une autre méthode où on choisit la taille des paquets (10 dans l'exemple), je vous la propose avec 2 variantes.

Dans la première le premier destinataire de chaque lot est en adresse (to) les autres en copie cachée (bcc)..

Sub EnvoieLeMemeMailAToutLeMonde()
' cette procédure envoie le même mail à tous les destinataires
' par paquets de 10 (ou autre)
' le corps et l'objet doivent être identiques
' le premier destinataire est en adresse normale
' tous les suivants sont en copie cachée
Dim ParPaquetDe As Integer, NuméroPaquet As Integer
Dim i As Integer, Combien As Integer, NbreDestinataires As Integer
Dim LAdresse As String, LObjet As String, LeCorps As String, LaPièce As String
Dim LaBcc As String
NuméroPaquet = 1
ParPaquetDe = 10
NbreDestinataires = Range("Plage").Rows.Count
Combien = 0
LAdresse = ""
LaBcc = ""
LObjet = "Envoi groupé du même mail à tout le monde"
LaPièce = Range("Document").Value ' on stocke l'adresse physique de la pièce jointe
For i = 1 To NbreDestinataires ' Boucle pour chaque ligne de la plage
LeCorps = "Envoi du paquet numéro " & NuméroPaquet & "de " & ParPaquetDe & " mails"
LeCorps = LeCorps & "%0D" & "seule la première adresse de chaque paquet est visible"
With Range("Plage").Cells(i, 1) ' avec la cellule en ligne i, colonne 1
If Combien = 0 Then ' le premier destinataire du paquet est en adresse normale
LAdresse = .Value
Else ' les suivants en copie cachée
If LaBcc = "" Then
LaBcc = .Value ' sa valeur est stockée dans la variable LABcc
Else
LaBcc = LaBcc & "," & .Value ' ou ajoutée dans la variable LABcc
End If
End If
End With
Combien = Combien + 1 ' +1 dans le compteur de mails d'un paquet
' si on a atteind le nombre maxi de mails par paquet ou
' qu'on a atteind le dernier destinataire If Combien ParPaquetDe Or i NbreDestinataires Then
'on envoie le mail
EnvoiEmail Adresse:=LAdresse, Bcc:=LaBcc, Objet:=LObjet, Corps:=LeCorps, PJ:=LaPièce
' ré-initialise pour le prochain paquet
LaBcc = ""
Combien = 0
NuméroPaquet = NuméroPaquet + 1
Attendre 2
End If
Next i
End Sub

suite dans le prochain message...
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
18 nov. 2008 à 19:13
suite du message précédent

Dans la deuxième variante tous les destinataires sont en copie cachée (bcc). aucun destinataire ne peut connaitre l'adresse des autres..

Sub EnvoieLeMemeMailAToutLeMonde2()
' cette procédure envoie le même mail à tous les destinataires
' par paquets de 10 (ou autre)
' le corps et l'objet doivent être identiques
' tous les destinataires sont en copie cachée
Dim ParPaquetDe As Integer, NuméroPaquet As Integer
Dim i As Integer, Combien As Integer, NbreDestinataires As Integer
Dim LAdresse As String, LObjet As String, LeCorps As String, LaPièce As String
Dim LaBcc As String
NuméroPaquet = 1
ParPaquetDe = 10
NbreDestinataires = Range("Plage").Rows.Count
Combien = 0
LAdresse = "" ' on peut placer ici une adresse générique
'( tous les destinataires ne verront que cette adresse)
LaBcc = ""
LObjet = "Envoi groupé du même mail à tout le monde - deuxième version"
LaPièce = Range("Document").Value ' on stocke l'adresse physique de la pièce jointe
For i = 1 To NbreDestinataires ' Boucle pour chaque ligne de la plage
LeCorps = "Envoi du paquet numéro " & NuméroPaquet & "de " & ParPaquetDe & " mails"
LeCorps = LeCorps & "%0D" & "aucune adresse n'est visible"
With Range("Plage").Cells(i, 1) ' avec la cellule en ligne i, colonne 1
If LaBcc = "" Then
LaBcc = .Value ' sa valeur est stockée dans la variable LABcc
Else
LaBcc = LaBcc & "," & .Value ' ou ajoutée dans la variable LABcc
End If
End With
Combien = Combien + 1 ' +1 dans le compteur de mails d'un paquet
' si on a atteind le nombre maxi de mails par paquet ou
' qu'on a atteind le dernier destinataire If Combien ParPaquetDe Or i NbreDestinataires Then
'on envoie le mail
EnvoiEmail Adresse:=LAdresse, Bcc:=LaBcc, Objet:=LObjet, Corps:=LeCorps, PJ:=LaPièce
' ré-initialise pour le prochain paquet
LaBcc = ""
Combien = 0
NuméroPaquet = NuméroPaquet + 1
Attendre 2
End If
Next i
End Sub

Voila. Bon codage.
Cordialement
Jean (Nerim)
Laurent3233 Messages postés 2 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 07:41
Bonjour,

Merci Koloco et Nerim pour votre aide et pour ces deux codes qui fonctionnent à merveille.
Bonne continuation.

Laurent.
stetou Messages postés 3 Date d'inscription mercredi 27 décembre 2000 Statut Membre Dernière intervention 14 janvier 2014
19 nov. 2008 à 11:31
bonjour,

merci, super bien

stephane
Javanaise1 Messages postés 3 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 10 février 2009
19 nov. 2008 à 17:29
Bonjour Nerim,
J'ai adapté vos procédures à mon besoin et cela fonctionne parfaitement bien. Il reste une opération que je ne sais pas faire. Ayant plusieurs adresses d'expéditeur, c'est le choix de celle-ci. Pour palier à ce problème secondaire j'ai modifié mon adresse par défaut qui est celle prise en compte. J'utilise Thunderbird et j'ai bien remarqué la combinaison de touches [Alt]+[x]+[1 caractère], mais ayant plusieurs adresses avec la même première lettre je ne vois pas comment faire. Avez vous un exemple à me donner pour traiter ce cas ?
Encore merci pour ces procédures qui sont très utiles.
Cordialement
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
19 nov. 2008 à 18:43
Bonjour,
il ne prend que la première lettre.

Ayant eu le même problème, j'ai renommer les comptes avec la 1ère lettre différente à chaque fois (lettre ou chiffre).
Pour mon cas, j'utilise (hors comptes perso) des chiffres de 0 à 9.
Exemple : 0 - Danse
1 - Musique
2 - Peinture
3 - ...
Par contre, je n'ai pas tester s'il fait pour une lettre donnée une différence entre majuscule et minuscule.

Pour NERIM : vous écrivez ' avec les temporisation on a le temps d'aller boire un café si on a une centaine de destinataires
' mais ça tourne tout seul...
Je suis tout a fait d'accord, à condition qu'une fenêtre (style MSN) ne "monte" pas entre temps. Ce qui était mon cas, donc à chaque envoi, je sauvegarde dans une cellule le nom du dernier destinataire (cela me permet de faire une reprise d'envoi sans avoir à rechercher les messages envoyés).
Je tiens encore à vous remercier de ce code qui m'a parfaitement dépanné.

Bon Courage à Javanaise1 ...
JLHS Messages postés 2 Date d'inscription lundi 26 janvier 2004 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 18:55
Bonsoir,
J'utilise ton code avec Excel 2003 et Outlook 2003 et en suis très content.
Je regerette simplement qu'il ne permette pas d'ajouter automatiquement la signature par défaut d'outlook 2003. J'ai essayé avec l'inspector comme vu sur le net mais je n'y suis pas arrivé.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
19 nov. 2008 à 19:10
Bonjour javanaise1

C'est vrai que [Alt][x][lettre] ne fonctionne que pour la première lettre en essai réel (hors VBA) avec thunderbird. (lisez quand même les messages de Koloco et Fred65200 (21 et 22/09/2007) puisque Koloco semble indiquer que "%xjea" sélectionne bien l'expéditeur dont le nom commence par jea. Mais il utilise peut-être Outlook...)

Une solution consiste à utiliser les flèches de direction {DOWN} pour se positionner sur le bon expéditeur. Si on n'est pas sur de l'expéditeur sur lequel on se positionne en faisant Alt-x, on peut commencer par envoyer par exemple Alt-x-j (je suis sur de me positionner sur l'expéditeur qui commence par j (choisir une unique)). et envoyer le nombre de flèches bas nécessaires pour atteindre l'expéditeur voulu.

Dans Excel, il suffit d'indiquer dans une cellule (ou en face de chaque destinataire si on gère les envois multiples) le nombre de touches bas à utiliser pour sélectionner le bon expéditeur.
A B
1 destinataire@wanafree.fr 3

et d'utiliser la valeur en question dans une boucle de la procédure EnvoiMail

# 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
--------------------- MODIF ------------------------------------------------
# TouchesEnvoi(1) = "%xj" ' choisit l'expéditeur qui commence par J (unique)
# ' à changer bien sur pour votre cas perso
dim i as Integer,TouchesBas as string
TouchesBas=""
for i=1 to range("B3").value (si B3=0 ont ne rentre pas dans la boucle)
TouchesBas=ToucheBas & "{DOWN}"
next i
TouchesEnvoi(1)=ToucheEnvoi(1) & TouchesBas
--------------------- FIN MODIF ------------------------------------------------
# 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

Il serait plus propre d'ajouter un paramètre (optionel) à la procédure EnvoiMail qui serait le nombre flèches bas à utiliser. Dans ce cas la valeur de B3 serait transmise à la procédure lors de son appel...

J'essayerai d'y regarder de plus près si j'ai un peu de temps...

Mais c'est déjà une piste

Bon codage

Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
19 nov. 2008 à 19:15
Rebonjour

Le temps que rédige mon message hors ligne, Koloco avait déjà posté le sien....

Merci pour l'idée du stockage dans une cellule de la dernière adresse utilisée au cas où...

Jean
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
19 nov. 2008 à 19:22
Bonjour Javanaise et Nerim,

contrairement à ce que j'avais écrit le le 22/09/2007 13:36:00 la sélection de l'expéditeur avec N lettres ne fonctionne pas (ni sur outlook, ni sur thunderbird ).

Mes excuses de ne pas l'avoir indiqué lorsque je m'en suis aperçu.

Bonne continuation...
FRS81 Messages postés 2 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 15:31
Bonjour,

Super Code, je suis en train de l'utiliser pour envoyer un mail a plusieurs destinataires dotn les adresses peuvent souvent changer (d'où l'utilisation d'un tableau excel pour la liste des destinataires).
Le systeme de comptage et d'envoi de mails par lots de 10 destinataire est interessant, mais je le trouve un peu long.
Ne peut on pas simplement copier la liste des destinataires (regroupés dans une cellule) dans la case "A:" d'Oultook Express, une fois que le message est ouvert ?

Merci beaucoup pour ce code, et bravo pour les explications,etant newb' j'ai apprécié les commentaires, ce qui m'a incité à m'inscrire sur ce site.
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
13 févr. 2009 à 17:33
Bonjour,

non car nous sommes limité par une longueur de chaine à 818 caractère.
Chaine = Objet+destinataireS+corps de mail (donc cela limite sérieusement).

Mon message du 12/11/2008 20:16:53 reprend un extrait d'un commentaire de NERIM sur cela et donne une astuce pour aller juste en limite de ses 818 caractères.
NERIM quelques messages après (le 18/11/2008 18h...) donne aussi une procédure (bien mieux codée que la mienne).

Bonne continuation ...
FRS81 Messages postés 2 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 16 février 2009
16 févr. 2009 à 11:36
Bonjour,

J'ai bien compris, et j'arrive a envoyer le même message avec plusieurs mails. J'ai choisi de faire une boucle sur les adresses à entrer.
Maintenant, je voudrais avoir le même corps de message, avec une mise en forme type, je pensais utiliser une page html (j'ai un lien dans mon corps de texte).
Est il possible d'utiliser de faire référence à un papier peint avec la technique de l'hyperlien ? (En plus ça pourrais diminuer la taille du corps de message)
metronix22 Messages postés 1 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 18 février 2009
18 févr. 2009 à 09:34
Bonjour,

Je suis un très grand novice, juste vous remercier pour votre code et surtout vous poser une question comment faire pour envoyer plusieurs pièces jointes et ne pas effectuer l'envoi automatique du mail ? J'ai vu votre commentaire qui dit qu'il faut créer un tableau mais je bloque quand meme !!!
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
18 févr. 2009 à 18:40
Bonjour à FRS81 et METRONIX22,

Je n'ai pas trop le temps de me pencher sur la question en ce moment.

Pour ne pas faire l'envoi automatique, il suffit de placer un Exit Sub entre la ligne 180 et la ligne 181 : cela n'envoie pas le code la touche qui provoque l'envoi du mail. (A retirer quand le problème des pièces jointes sera résolu)

J'essaie d'y réfléchir ce WE

Cordialement
Jean
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
19 févr. 2009 à 18:25
Bonjour,

voici un bout de code qui permet d'insérer autant de pièces jointes que vous voulez (j'ai limité à 9). Par contre ces pièces jointes doivent TOUTES dans le MEME dossier.
Nota : mes excuses pour NERIM qui va s'arracher les cheveux lorsqu'il verra ce code... (mais cela fonctionne).

" le click d'une checkbox lance cette procédure
Private Sub CheckBox_PièceJointe_Click()
If CheckBox_PièceJointe.Value = True Then
Dim Tab_PJ(9) As String
Worksheets("Pilotage").Range("Trait_Envoi_PJ").Value = "Oui"
FileOpen
Call RechercheNomsPJ(Tab_PJ)
Noms_PJ = ""
' Boucle permettant de n'afficher que le nom (sans le chemin) des pièces jointes à insérer dans une textbox (séparées par " | ")
For I = 0 To 9
If Tab_PJ(I) <> "" Then
i_long = Len(Tab_PJ(I))
For J = i_long To 1 Step -1
If Mid(Tab_PJ(I), J, 1) = "" Then
Noms_PJ = Noms_PJ & Mid(Tab_PJ(I), J + 1, i_long) & " | "
J = 2
End If
Next J
Else
I = 9
End If
Next I
TextBox_PJ.Value = Noms_PJ
Else
Worksheets("Pilotage").Range("Trait_Envoi_PJ").Value = "Non"
Worksheets("Pilotage").Range("Trait_Nom_PJ").Value = ""
TextBox_PJ.Value = ""
End If
End Sub

'Cette fonction ouvre une fenêtre qui vous permet de vous "balader" dans le dossier ou se trouve vos pièces jointes.
' Les pièces jointes seront séparées par "|"Function FileOpen(Optional ByVal sTitle As String "Choisir le(s) fichier(s)", Optional ByVal bAllowMultiSelect As Boolean True, Optional ByVal sFiltreName As String = "Images", Optional ByVal sFiltreContent As String = "*.bmp; *.gif; *.jpg; *.jpeg; *.png") As String
' CHOIX D'UN FICHIER PAR VBA
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant, Nb_Fic As Integer

With fd
.Title = sTitle 'Titre
.AllowMultiSelect = bAllowMultiSelect 'Choix multiples
'.Filters.Add sFiltreName, sFiltreContent, 1 'Filtre image
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
FileOpen = Trim(FileOpen & "|" & vrtSelectedItem)
Next vrtSelectedItem
ilong = Len(FileOpen)
'Le résultat est mis dans une cellule
Worksheets("Pilotage").Range("Trait_Nom_PJ").Value = Mid(FileOpen, 2, ilong)
Else
'Bouton Annuler
End If
End With
Set fd = Nothing
End Function

'Permet de remplir un tableau avec les noms de chaque pièce jointe.
Sub RechercheNomsPJ(Tab_PJ() As String)

Dim PJ_Saisie As String
Dim LEttre As String

PJ_Saisie = Worksheets("Pilotage").Range("Trait_Nom_PJ").Value
i_long = Len(PJ_Saisie)

ind = 0
ideb = 1
For I = 2 To i_long
LEttre = Mid(PJ_Saisie, I, 1)
If Mid(PJ_Saisie, I, 1) = "|" Then
Tab_PJ(ind) = Mid(PJ_Saisie, ideb, I - ideb)
ind = ind + 1
ideb = I + 1
End If
Next I
Tab_PJ(ind) = Mid(PJ_Saisie, ideb, i_long)
End Sub
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
19 févr. 2009 à 18:50
Re-bonjour

Ce commentaire pour compléter mon message précédent et pour ajouter l'envoi ou non en automatique.

Compléter mon mail précédent: j'ai adapté la procédure écrite tout au début par "Jean" en rajoutant des séquence sendkeys (TouchesPJ)
' ==> Voir Sub MozillaThunderbird_Ouvrir(Let_Cpte As String) plus loin) ou j'explique les séquence sendkeys que j'ai rajouté.

mais avant j'ai une boucle qui permet d'insérer les PJ l'une après l'autre
If Worksheets("Pilotage").Range("Trait_Envoi_PJ").Value = "Oui" Then
Call RechercheNomsPJ(Tab_PJ) 'Vu dans mail précédent
For K = 0 To 9
If Tab_PJ(K) <> "" Then
PJ = Tab_PJ(K)
For I = 1 To TouchesPJ(0) ' pour chaque touche à envoyer
SendKeys TouchesPJ(I), True ' Envoi de la touches
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 ' on temporise
End If
Next K
End If

------------------------------------------

'Maintenant pour l'envoi ou non du mail en automatique voila comment je procède.
Après avoir rempli les destinataires, corps du mail, pièce jointes, etc.. et avant de faire "Run" j'ai une checkbox qui me dit si j'envoie automatiquement ou non mon mail.

Private Sub CheckBox_EnvoiMail_Click()

If CheckBox_EnvoiMail.Value = True Then
Worksheets("Pilotage").Range("Trait_EnvoiMail").Value = "Oui"
Else
Worksheets("Pilotage").Range("Trait_EnvoiMail").Value = "Non"
endif
End Sub

'Ensuite : j'ai adapté la procédure écrite tout au début par "Jean" en rajoutant séquence sendkeys (ToucheEsEnvoi)

If Worksheets("Pilotage").Range("Trait_EnvoiMail").Value = "Oui" Then
For I = 1 To TouchesEnvoi(0) ' idem pour les touches d'envoi du message
SendKeys TouchesEnvoi(I), True
Next I
End If

-------------------------------
' Et pour Thunderbird cela donne (j'ai 3 tableaux de sendkeys :
Le premier : pour sélectionner le compte expéditeur
le second : pour insérer N pièces jointes
le 3ième : pour envoyer ou non automatiquement.

Sub MozillaThunderbird_Ouvrir(Let_Cpte As String)
'Initialisation des tableaux de touches pour Mozilla Thunderbird
' Choix de l'Expéditeur
TouchesExpéditeur(0) = 1 ' Nombre de touches nécessaires
TouchesExpéditeur(1) = "%x" & Let_Cpte
' Se positionne dans la fenêtre expéditeur (Alt-x) + sur le
' compte de messageire par défaut commençant par la lettre choisie

' Pour insérer une pièce jointe
TouchesPJ(0) = 3 ' Nombre de touches nécessaires
TouchesPJ(1) = "%f" ' Appel du menu Fichier par la touche Alt-f
TouchesPJ(2) = "j" ' appel du sous-menu Joindre par la touche j
TouchesPJ(3) = "f" ' sous-sous-menu Fichier par la touche f

' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "^{ENTER}" ' Envoi du message avec Ctrl-Entrée
TouchesEnvoi(2) = "{ENTER}" ' confirmation par Entrée
End Sub

Nota : Let_Cpte ne peut contenir qu'UN seul caractère (si plusieurs c'est le 1er qui est pris) pour le choix de l'expéditeur.

Bonne continuation ....
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
19 févr. 2009 à 19:38
Bonjour,

Merci à tous pour vos questions, suggestions et solutions. Toutes les questions n'ont pas trouvé de réponse et j'en suis bien désolé. Mais ce petit programme, publié au départ dans un but pédagogique, s'est déjà bien étoffé grâce aux contributions publiées sur le forum.

Un merci particulier à Koloco qui fait "vivre ce code" autant que moi. Dès que j'aurai un peu le temps j'essaierai d'intégrer toutes ces nouveautés dans le code d'origine.

Je retiens en particulier le choix de l'expéditeur, l'envoi de plusieurs pièces jointes et l'envoi automatique optionnel.

Par contre comme mon code n'est pas à l'origine spécifique à Excel (je pense que la plupart des personnes qui l'utilisent le font avec Excel, certainement très peu avec Word mais je sais qu'un certain nombre l'utilisent avec Access), je vais essayer d'intégrer ces nouvelles fonctionnalités dans la procédure de base en la rendant la plus indépendante possible de l'application appelante.

Tout ça demande un peu de réflexion...

A bientôt
Jean
bmeddeb Messages postés 2 Date d'inscription vendredi 12 juin 2009 Statut Membre Dernière intervention 9 avril 2013
12 juin 2009 à 14:37
Bonjour,

je n'arrive pas a envoyer une PJ !!

je ne sais pas ce qu'il faux changer dans code...
j'utilise outlook 2003 V11.56

aide SVp

merci.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
13 juin 2009 à 22:42
Bonjour,

Essayez d'utiliser la procédure EnvoiMailMéthodeOLE au lieu de la procédure EnvoiMail, c'est le plus pratique avec Outlook. Tout çà est très commenté dans le code (tout à la fin).

Cordialement
Jean
cs_pyn Messages postés 3 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 8 juillet 2009
1 juil. 2009 à 17:42
Bonjour.
Comme tout le monde je trouve que ce code est super. Mais voilà j'ai un problème à soumettre à votre sagacité.
Dans mon fichier excel j'ai des cellules auquelles sont affectées des liens HYPERLINK vers des fichiers sur le réseau.
Lorsque je déclenche la macro pour enoyer un message, tous les liens sont modifiés (remplacement de l'emplacement réseau par l'adresse imap...). Quelqu'un a une idée ?
D'avance merci.
Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
2 juil. 2009 à 09:58
Bonjour

Problème aussi avec les liens hypertexte
Si j'insère un lien hypertexte dans le corps du mail du type
//serveur/dossier/fichier.truc

ça marche impeccable
mais dès qu'il y a un espace dans le chemin il s'arrête à l'espace dans le chemin, du coup le lien n'est pas valide

par exemple si mon lien est
//serveur/dossier/mon fichier.truc
dans le mail il va considérer que le lien est
//serveur/dossier/mon

si quelqu'un a une idée sur un moyen de faire considérer à Outlook un lien hypertexte comportant un espace, celà me serait d'une utilité certain
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
2 juil. 2009 à 10:03
Bonjour PYN,

Je ne comprends pas le phénomène que vous décrivez. Si vous envoyez le mail à partir de votre classeur Excel et que vous joignez une pièce jointe autre que le classeur lui-même, je ne vois pas comment un simple Followhyperlink "mailto:...." (la partie active de la macro se résume à cette instruction) peut modifier du contenu dans votre classeur. L'envoi fonctionne-t-il tout de même ? Pour voir si c'est l'envoi des touches (SendKeys) qui provoque le Pb, essayez de le désactiver (mise en commentaire des instructions SendKeys).

Si c'est le classeur lui-même que vous envoyez, je ne sais pas trop (je préfère piloter l'envoi à partir d'un autre classeur car cela évite d'envoyer un classeur avec le code de la macro dont les destinataires n'ont à priori rien à faire).

Désolé de pas pouvoir vous aider plus

Cordialement
Jean
cs_pyn Messages postés 3 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 8 juillet 2009
2 juil. 2009 à 11:48
Bonjour et merci pour cette réponse si rapide.
Je vais essayer d'être plus précis dans la description du problème (qui malheureusement est aléatoire et je n'ai pas encore trouvé la cause. Ce qui me gêne) :
J'ai un fichier excel qui me sert de chrono de document à réaliser.
Sur la ligne de chaque document j'ai une imagette à laquelle j'affecte un lien Hypertext qui permet de sélectionner le document en question. Ex. \\serveur\dossier\Mon fichier.txt (avec espace ou sans espace, celane change rien)
Une autre cellule de la même ligne me permet, après sélection de déclencher un mail pour indiquer que le document est réalisé.
C'est là que le problème survient. Après envoi du mail "\\serveur" est remplacé par imap://toto%25fai.com@mail.fai.com:143/fetch%3EUID%3E/
Pour info j'utilise Thunderbird comme client de messagerie.
D'avance merci et bonne journée.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
2 juil. 2009 à 17:44
Re-bonjour,

Votre macro envoie-t-elle le document sélectionné en pièce jointe ? Et si oui, comment transmettez-vous l'adresse du document à la procédure EnvoiMail ?

Vous pouvez peut être publier sur le forum un extrait du code que vous utilisez pour appeler la procédure EnvoiMail ou mieux me contacter par "Ecrire un message privé" et m'envoyer une copie (expurgée d'éventuelles données confidentielles) de votre classeur (on ne publie pas d'adresse mail sur le forum...). Votre problème m'intrigue...

De mon côté, je vais faire des essais en utilisant une adresse réseau pour la pièce jointe (je n'ai encore jamais essayé)

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
2 juil. 2009 à 17:55
Bonjour Gorzyneon

Vous parlez d'Outlook, utilisez-vous la procédure standard (EnvoiMail avec SendKeys) ou la procédure "EnvoiMailMethodeOLE" ?

Voir mon commentaire précédent (De mon côté, je vais des essais...)
Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
2 juil. 2009 à 18:00
J'utilise la procédure standard EnvoiMail
Je n'ai pas essayée l'autre
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
2 juil. 2009 à 19:12
Vous devriez peut-être essayer, l'appel à la procédure est identique (sauf que l'argument PJ:="xxx" doit être remplacé par Piece:="xxx"). Et ça marche bien avec Outlook.

Gorzyneon et Pyn, je viens de relire vos messages et j'ai un doute : les problèmes que vous évoquez avec les liens hypertextes concernent-ils des liens qui figurent dans le corps du mail ou des liens qui sont utilisés comme adresse pour une pièce jointe?

Et pour Pyn, si le lien figure dans le corps du texte du mail, le changement de "//serveur/" en "imap//..." se produit-il dans le corps message envoyé ou dans le classeur lui-même ?

Cordialement
Jean
Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
2 juil. 2009 à 19:24
corps du mail en ce qui me concerne

exemple :

"Mail automatique généré pour vous signaler que le fichier

//serveur/dossier machin/fichier.truc a été modifié"

du coup le destinataire ne peut pas clicker sur le lien car le espace entre "dossier" et "machin" coupe le lien
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
3 juil. 2009 à 10:16
Bonjour Gorzyneon,

Un essai fait avec Thunderbird provoque en effet la coupure du lien.
Une solution peut être de composer le corps du mail en HTML.

Voici une solution que j'ai essayée avec Thunderbird et qui fonctionne :

Une fonction qui compose le corps en HTML :

Function MiseEnFormeLienHT(Texte As String, Lien As String, TexteLien As String)
MiseEnFormeLienHT = "<html>" & _
Texte & _
"
" & _
TexteLien & _
"</html>"
End Function

La procédure qui appelle l'envoi du mail :

Sub EnvoiAvecLienDansCorps()
With Sheets("Quelques Exemples")
EnvoiEmail _
Adresse:="jc@pro-forma.fr", _
Objet:="Essai envoi lien", _
Corps:=MiseEnFormeLienHT(.Range("B30"), .Range("B31"), .Range("B32"))
End With
End Sub

Dans ma feuille "Quelques Exemples", j'ai :
En B30 : Veuillez trouver l'adresse du dernier fichier disponible :
En B31 : http://mirenetjean.free.fr/cpg/albums/Ben/Dessins/femme tatouee.jpg
En B32 : femme tatouee.jpg

Par contre un essai fait avec un accent (femme tatouée.jpg) donne un lien incorrect.

A essayer avec Outlook...

Cordialement
Jean
mathomtb Messages postés 8 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 6 juillet 2009
6 juil. 2009 à 11:07
Bonjour,
Je voudrais utiliser ce module dans le but d'automatiser l'envoi de mail à mes 250 utilisateurs. J'ai donc le choix entre envoyer un mail à chaque user ou envoyer un mail à tout le monde d'un seul coup. Evidemment, je préfère qu'un seul email soit envoyé pour gagner du temps mais c'est là que ca coince ! Si je mets une adresse dans ma variable Recipient, tout va bien. Si j'en mets 2, séparées par un ; ca va aussi. Mais en vrai j'ai une boucle qui concatène les adresses email des 250 utilisateurs et là, impossible d'appeler l'Hyperlink ! J'ai l'erreur "Argument ou appel de procédure incorrect" alors que j'arrive à afficher le contenu de la variable Hyperlien et je ne vois pas de problème.
Est-ce dû à la longueur de ma requête (6038 caractères) ?
Merci pour votre aide.
Mat
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
6 juil. 2009 à 13:46
Bonjour,
c'est limité à 818 caractères.

NERIM à écrit le 24/09/2007:
Par contre la méthode FollowHyperlink bloque à partir de 818 caractère (pourquoi à 817 ça passe ??? drôle de limitation) pour l'ensemble de l'adresse (mailto+subject+body....).

Bonne suite ...
Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
6 juil. 2009 à 14:18
Merci Nerim pour ta suggestion d'utiliser le html
J'ai fait un essai, a priori ça ne passe pas sous Outlook qui se contente d'écrire le corps en mode texte, sans interpréter le html - je me suis peut être planté mais j'ai l'impression qu'il ne tient aucun compte des balises
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
6 juil. 2009 à 18:54
Bonjour MAthomtb,

Bravo à Koloco pour sa vigilance, mais il est modeste car il a proposé une solution au problème : voir son post du 12/11/2008... et des variantes dans mes posts du 18/11/2008

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
6 juil. 2009 à 18:57
Pour Gorzyneon

Bonjour,

Dommage, l'idée était séduisante, dès que j'aurai un peu de temps, je vais essayer avec Outlook (je n'aime pas trop changer mon client mail par défaut...).

Si vous trouvez une solution d'ici là, tenez-moi au courant

Cordialement
Jean
Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
7 juil. 2009 à 10:32
Bonjour Nerim,

L'idée du HTMLBody était effectivement bonne. J'ai trouvé la solution avec un bout de code particulièrement efficace qui nécessite d'activer la référence Microsoft Outlook.

L'intérêt de se code est qu'il permet par ailleurs d'envoyer directement le mail sans faire apparaître la fenêtre Outlook (pas de SendKeys)

'********* EXEMPLE ***********
sub hypertext_email()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String

Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
strbody = "[ Photos 2007]"
On Error Resume Next
With OutMail
.To = "toto@toto.fr"
.CC = ""
.BCC = ""
.Subject = "Lien hypertexte"
.HTMLBody = strbody
.BodyFormat = olFormatHTM
'.Display 'Pour afficher le message avant envoi
.Send 'Pour envoyer directement sans afficher
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End Sub

Pour tout savoir sur VB Outlook je vous conseillerais le tuto suivant
http://dolphy35.developpez.com/article/outlook/vba/
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
7 juil. 2009 à 23:13
Bonjour Gorzyneon,

Je connais cette méthode. C'est en effet celle utilisée par la procédure EnvoiMailMethodeOLE dont je vous parlais dans mon message du 02/07 (voir les lignes 343 et suivantes dans le code publié...).

Donc avec cette méthode et le corps en HTML, les liens dans le corps fonctionnent? C'est bon à savoir.

Cordialement
Jean
Gorzyneon Messages postés 141 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 19 mai 2023
8 juil. 2009 à 10:54
Oui effectivement, ça m'apprendra à pas lire les commentaires, et bien sûr cette méthode ne fonctionne qu'avec Outlook !
cs_pyn Messages postés 3 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 8 juillet 2009
8 juil. 2009 à 12:54
Bonjour à tous et désolé pour l'absence de ces derniers jours.
Pour répondre à Nerim, il y a incompréhension sur l'opération effectuée? Le lien n'est pas dans le corps, ni l'objet d'ailleurs du message mais sur image qui marque la ligne excel à traiter et qui me permet en cliquant dessus d'atteindre directement l'emplacement de stockage du document en question.
Voici en fait le code ci-dessus (je rappelle que le message est envoyé au travers de Thunderbird et non pas d'outlook) :

Sub Worksheet_Change(ByVal Target As Range)
Dim ibouc As Integer
Dim Objet As String
Dim Corps As String
Dim Adr_objet As String
Dim AdresseMail As String
Dim Action_Dev As Variant ' String

Action_Dev = Range(Target.Address(0, 0)).Value
If Range(Target.Address(0, 0)).Column = 6 Then ' correspond à la colonne où mettre "achevé"

For ibouc = 0 To Range("DERN_LIG") - 3 If Target.Address(0, 0) "F" & 2 + ibouc And Action_Dev "achevé" Then
ActiveSheet.Calculate
Range(Target.Address(0, 0)).Value = "impr_en_cours"
Range(Target.Address(0, 0)).Offset(0, 2).Value = "Signature en cours"
AdresseMail = Worksheets("Suivi").Range("ADR_MEL") ' cellule nommée contenant l'adresse du destinataire
Adr_objet = Range(Target.Address(0, 0)).Offset(0, -3) ' -3 correspond à l'emplacement du nom du document
Objet = "DOCUMENT : signatures à obtenir pour le document intitulé " & Range(Target.Address(0, 0)).Offset(0, -3).Value
Corps = "Ceci est un message genere automatiquement." & Chr(13) _
& " Prevenir par retour de courrier lorsque l'action citee en objet est effectuee." & Chr(13) & " Merci"
EnvoiEmail AdresseMail, Objet, Corps
End If
Next ibouc
End If
End Sub

Donc lorsque j'indique "achevé" dans la bonne cellule (en l'occurrence la celulle F), je constitue un message avec le nom du documents quie je trouve dans la cellule C... et j'envoie le message.
Je n'arrive plus à reproduire pour l'instant le problème mais je n'utilise pas non plus tous les jours ce programme.
Au fait si vous voyez des amélioration à apporter au code n'hésitez pas à m'en faire part.
Pour info lorsque le contenu de "Object" contient des accents, ceux-ci n'apparaisssent pas dans le message reçu.
Exemple "intitulé" deviens "intitul" ou "éléments"deviens "l ments"
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
9 juil. 2009 à 00:59
Bonjour,

Juste quelques remarques sur votre code :
Vous pouvez utiliser simplement Target (qui est une Range) plutôt que
Target.Address(0, 0).
Votre boucle (pour repérer la ligne sur laquelle on a tapé "achevé" si j'ai bien compris) me semble inutile.
Le mail ne doit être envoyé que si on a tapé "achevé" en colonne F et entre les lignes 2 et Range("DERN_LIG"), on peut donc conditionner l'envoi par un seul test qui vérifie ces conditions : Dans ce cas le Target.offset(0,-3) récupère directement l'adresse du document sur la bonne ligne.

Cela peut donner quelque chose du genre :

Sub Worksheet_Change(ByVal Target As Range)
Dim Objet As String
Dim Corps As String
Dim Adr_objet As String
Dim AdresseMail As String
If Selection.Cells.Count > 1 Then Exit Sub
With Target
' le With permet de ne pas répéter partout dans le code "Target." le "." suffit
If .Column = 6 _
And .Row >= 2 And .Row <= Range("DERN_LIG") _
And .Value = "achevé" Then
.Value = "impr_en_cours"
.Offset(0, 2).Value = "Signature en cours"
AdresseMail = Worksheets("Suivi").Range("ADR_MEL") 'cellule nommée...
Adr_objet = .Offset(0, -3).Value
Objet = "DOCUMENT : signatures à obtenir pour le document intitulé " & Adr_objet
Corps = "Ceci est un message généré automatiquement." & %0A _
& " Prevenir par retour de courrier lorsque l'action citée en objet est effectuée." & %0A & " Merci"
EnvoiEmail AdresseMail, Objet, Corps
End If
End With
End Sub

Par ailleurs, pour éviter le problème de transformation de l'adresse du document, vous pouvez essayer d'envoyer le corps en HTML en utilisant la fonction MiseEnFormeLienHT citée dans mon post du 03/07 à l'intention de Gorzyneon
Par exemple :
Corps = "Ceci est un message généré automatiquement." & "%0A" _
& " Prévenir par retour de courrier lorsque l'action citée en objet est effectuée." & "%0A" & "Merci" & _
"%0A" & "vous pouvez accéder au document cité en objet en cliquant "
EnvoiEmail AdresseMail, Objet, MiseEnFormeLienHT(Corps, Adr_objet, "ici")

Je vous conseille d'éviter de placer un lien hypertexte dans l'objet du message (de toutes façon, même si ça marche, le lien ne sera pas actif (cliquable) pour le destinataire). Essayez d'extraire le nom du fichier seul (sans le chemin) pour l'indiquer dans l'objet. Et d'indiquer le lien dans le corps (l'envoi d'un lien dans le corps est possible avec l'astuce HTML indiquée + haut)

Enfin, lors de mes essais (avec Thunderbird), je n'ai pas rencontré de pb avec les accents dans l'objet mais le lien dans le corps avec la méthode ci-dessus est erroné quand il y a un accent dans l'adresse du document.

Je n'ai certainement encore tout compris de votre pb, mais ces quelques infos peuvent peut-être vous aider.

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
9 juil. 2009 à 01:22
Juste pour dire que le code que je propose dans le message précédent ne marche pas "mieux" que le votre. Il ne s'agit donc pas à proprement parler "d'améliorations", c'est juste que c'est comme cela que je l'aurais programmé...
Savage17 Messages postés 4 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 24 août 2009
11 août 2009 à 16:17
Bonjour,

J'utilise la procédure "EnvoiMail", lorsque j'éxécute la macro, Outlook2007 s'ouvre mais ne prend pas la pièce jointe. Il faut que je clique dans le corps du message, une fois que le curseur apparaît, la procédure se déroule normalement. Il faudrait que le fenêtre( nouveau message ) soit active. Avez-vous une solution ???

Merci d'avance
Cordialement.

PS : La procédure est exellente !!!
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
12 août 2009 à 09:37
Bonjour,

Je n'ai jamais rencontré ce pb. Normalement la méthode FollowHyperLink "mailto:...." lance et active le client mail par défaut (pour vous Outlook 2007). Vous dites qu'il faut cliquer dans la fenêtre Outlook pour que la procédure se déroule normalement. Cela veut dire que la fenêtre Outlook est passée au premier plan sans être active? Quelle est la fenêtre active avant que vous cliquiez dans Outlook.
Essayer de placer l'instruction suivante qui lance une application Microsoft ou l'active si elle est déjà lancée:

Application.ActivateMicrosoftApp xlMicrosoftMail

en ligne 168 (avant If PJ <> "" Then)

Par contre, avec Outlook 2007, je vous conseille d'utiliser la procédure "EnvoiMailMéthodeOLE" qui figure à la fin du code (voir les commentaires dans le code). Pensez à ajouter la bibliothèque "Microsoft Outlook 12.0 Object Library" (Menu Outils-Références dans l'interface VBA).

Tenez-moi au courant.

Cordialement
Jean
Savage17 Messages postés 4 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 24 août 2009
12 août 2009 à 14:04
Bonjour Jean,

J'ai placé l'instruction juste avant "If PJ..." cela ne marchait pas, ça ouvrait le dernier mail que j'avais reçu. Je l'ai placé après la l'instruction "HyperLien = HyperLien & "Subject=" & Objet & "?", et ca marche bien. C 'est vrai que j'ai un peu modifié le code source.
En tout cas, grand merci pour ton aide, c'est frustrant quand on est bloqué et qu'on sait qu'il manque pas grande chose, je voulais pas lâcher l'affaire. J'avais testé avec application.Activate mais ca ne marchait pas, je suis plus que limité en VBA.

Je vais testé la méthode OLE, mais j'y connais pas grand chose, je vais assayer de trouver un source commenté, et de me plonger à fond la-dedans. J'essaye d'automatiser un traitement qui consiste à envoyer différents tableaux à différents utilisateurs.


Encore merci pour ton aide et pour réponse plus que rapide.
Cordialement.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
13 août 2009 à 09:29
Bonjour Savage17,

c'est bien que ça marche mais je ne comprends pas pourquoi cela ne marchait pas chez vous sans l'ajout de l'instruction...

Pour la méthode OLE, il est peut-être inutile de "chercher" un code commenté : celui qui figure dans le code publié ici (voir le source listé au début de l'article lignes 343 à 380) est déjà bien commenté et fonctionne parfaitement...

Bon courage pour la suite

Cordialement
Jean
Savage17 Messages postés 4 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 24 août 2009
19 août 2009 à 11:28
Bonjour Jean,

Dans le code pour la méthode OLE, à quel moment on renseigne la pièce jointe ?
Pour les lignes de 356 à 360, il s'agit uniquement de commentaires ?
le code va essentiellement de la ligne 362 à la ligne 380.
Je doit supprimer tout le code correspondant à la méthode EnvoiMail.

Cordialement.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
21 août 2009 à 08:45
Bonjour Savage17,

En effet les lignes 355 à 359 sont indiquées dans le code en commentaires car elles sont placées là uniquement comme exemple d'utilisation de la procédure :

' EnvoiMailMéthodeOLE Adresse:= Range("A1"), _
' Objet:= Range("A2"), _
' Corps:= PH(Range("A3:A10")), _
' PJ:= Application.Path & "\AJoindre.jpg" _
' Bcc:="zorro@fantomas.com"

On renseigne la pièce jointe lors de l'appel à la procédure EnvoiMailMéthodeOLE par
PJ:=le chemin et le nom du fichier à joindre en pièce jointe.

En effet, une fois vérifié le bon fonctionnement de la méthode OLE, vous pouvez ne conserver que les lignes 362 à 380
Savage17 Messages postés 4 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 24 août 2009
24 août 2009 à 14:29
Bonjour Jean,

Je ne comprend pas car PJ n'est pas déclaré dans la méthode OLE, si je supprimes tout le code correspondant à la méthode "EnvoiMail", je supprime également la déclaration de la variable PJ.

Cordialement.
Stefan.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
25 août 2009 à 08:38
Bonjour,

Autant pour moi. Il y a une erreur de nom d'argument dans le commentaire :
à la place de
' PJ:= Application.Path & "\AJoindre.jpg" _
il faut lire
' Pièce:= Application.Path & "\AJoindre.jpg" _
(les arguments déclarés dans le nom de la procédure : Adresse, Objet, Corps, Pièce, Cc et Bcc font office de déclaration de variable).

De toutes les façons, même si vous conserviez le code de la procédure EnvoiEmail, les arguments déclarés d'une procédure ne sont connus que dans la procédure elle-même : l'argument (la variable si vous préférez) PJ déclarée dans la procédure EnvoiEmail n'est pas utilisable dans une autre procédure.

Désolé de vous avoir fait chercher pour rien

Cordialement
Jean
cs_MathieuLS Messages postés 1 Date d'inscription mardi 8 septembre 2009 Statut Membre Dernière intervention 8 septembre 2009
8 sept. 2009 à 16:37
Salut,

Super code apparemment. Mais quand je le copie-colle dans mon module et que je veux activer l'une des macros :
- il ne me trouve pas la principale (EnvoiMail)
- il m'envoie un message d'erreur "erreur de compilation : sub ou function non definie" quand je veux activer l'importe laquelle des autres macros

Résutat : impossible de l'utiliser

Pour info, je suis complètement novice en vba, je suis sur un Mac et j'utilise excel + thunderbird.
Est-ce que qqn aurait une indication ?
Par avance, merci
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
13 sept. 2009 à 11:25
Bonjour Mathieuls,

Vérifiez que vous appelez bien la procédure par EnvoiEmail et non par EnvoiMail (comme indiqué dans votre message)

Sinon, je ne vois pas pourquoi les procédures sont inaccessibles depuis votre module.
Vous pouvez essayer de placer devant chaque définition de procédure et de fonction le mot "Public"

Exemple
Public Sub EnvoiEmail (Adresse....

C'est normalement inutile mais comme je manque un peu de précisions...

Vous pouvez m'envoyer votre classeur par mail en me contactant par l'envoi d'un message privé à partir du site de Code-SourceS

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
16 sept. 2009 à 09:01
Je place ici une copie des échanges de messages privés avec Mathieuls car cela peut intéresser d'autre débutants en VBA. :

Copie du message privé envoyé par MATHIEULS

Bonjour Jean,

Merci beaucoup pour votre réponse.
Et désolé de ne pas réussi du premier coup car, c'est d'autant plus énervant, votre démo est effectivement très commentée.

Alors :

- J'ai essayé avec "Public" en début de formule, mais sans changement notoire.

- J'ai remarqué que seules les formules avec des infos entre parenthèses (Sub EnvoiEmail et Sub Attendre) ne sont pas disponibles quand je fais Outil > Macros alors que les autres (Sub Incredimail, Sub MozillaThunderbird, etc.) le sont. Serait-ce ces infos entre parenthèse qui empêchent qqc ? Le fait que je sois sur un Mac ?

Par ailleurs, je n'ai plus de message d'erreur quand je veux exécuter une des macros dispo (en l'occurrence, MozillaThunderbird). Simplement, il ne se passe rien.

J'aurais voulu vous envoyer un tableau mais je ne vois pas comment attacher une PJ au message... Comment puis-je faire ?

Par avance, merci.
Cordialement,

Mathieu

Copie de la réponse envoyée à Mathieu

Bonjour Mathieu,

Il est normal que les procédures et fonctions qui ont besoin de recevoir des paramètres pour fonctionner (celles qui ont des arguments entre parenthèses) ne soient pas visibles depuis Outils->Macros. Par exemple la procédure Sub Attendre (Durée) a besoin de connaître le nombre de secondes pour fonctionner et par Outils->Macros ont ne peut pas lui transmettre l'information.

Vous devez donc écrire une procédure qui appelle EnvoiEmail en lui transmettant les infos voulues et c'est cette procédure que vous lancerez par Outils->Macros.

Par exemple, vous pouvez écrire une macro Appel de la façon suivante :

Sub Appel
' Envoi simple sans pièce jointe :
EnvoiEmail Range("A1"), Range("A2"), Range("A3")
End Sub

ou

Sub Appel
' En utilisant les arguments nommés (c'est le plus clair):
EnvoiEmail Adresse:= Range("A1"), _
Objet:= Range("A2"), _
Corps:= PH(Range("A3:A10")), _
PJ:= Application.Path & "\AJoindre.jpg" _
Bcc:="zorro@fantomas.com"
En Sub

Je viens de m'apercevoir que dans les commentaires indiqués dans ma source, j'utilise le nom de procédure EnvoiMail alors qu'il faut utiliser EnvoiEmail. Désolé.

Je vais placer cette réponse dans les messages publics car je réalise que les débutants peuvent être coincés comme vous ne sachant pas comment utiliser ce code.

Une dernière chose, je vous conseille de télécharger l'exemple de code proposé et de regarder les macros associées aux différents boutons.

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
16 sept. 2009 à 16:32
Message de Mathieu :

Bonjour Jean,

Vos explications m'ont permis d'avancer et de comprendre pourquoi je n'y arrivais pas, merci beaucoup. Mais je me retrouve confronté à des nouveaux problèmes :

- je ne comprends pas comment intégrer les Function PH ou PT dans le Sub Appel (à quel endroit de la formule Sub Appel ? que dois-je remplacer dans le script "Function" pour l'adapter à mon tableau ?)

- Excel m'ouvre bien un nouveau mail - c'est magique -, mais me colle des signes étranges un peu partout (les caractères accentués, par exemple, sont traduits par "%C3%A9" ou assimilés, et je ne trouve pas le code de retour à la ligne - j'ai essayé & %0A & et & vbCRLF & mais sans résultat. Par ailleurs, la case "Objet" das mon mail est systématiquement complétée par (%C3%A0 13:45:50), alors que je n'ai pas commandé l'heure.

C'est rageant : j'ai tout mon code dans la tête en langage "français" mais n'arrive pas à le traduire correctement :-)

Peut-être n'êtes vous pas là pour tout résoudre :-) et dans ce cas j'irai faire un tour sur d'autres forums. Quoi qu'il en soit, merci de votre attention.
Mathieu

Ma réponse :

Pour les fonctions PH (transforme une plage de cellules Excel en tableau HTML) ou PT (transforme une plage de cellules Excel en tableau avec des tabulations : moins élégant mais plus compatible), l'utilisation est indiquée dans l'exemple donné dans le message précédent :

Sub Appel
...
Corps:=PH(Range("xxxx")),
...
End Sub

Vous placez les coordonnées de la plage de cellules que vous voulez envoyer comme corps du message à la place des xxxx. La fonction PH() transforme votre plage en tableau et c'est ce tableau qui est transmis à la procédure EnvoiEmail.

Pour les caractères accentués transformés, c'est l'éternel problème des codes de caractères différents entre PC et MAC. Si vous avez récupéré le code par un copier coller, essayez de retaper les caractères accentués dans votre environnement MAC. Ou, mieux, évitez d'utiliser les accents...

Il se peut que le problème du "%0A" (il faut bien veiller à mettre les guillemets pour ce code de craractère soit envoyé tel comme un texte : donc & %0A est faux, & "%0A" est juste. Par contre & vbCrLf est juste (car vbCrLf est le nom d'une constante) mais ne fonctionne pas ici) soit du même ordre car ça marche bien sur PC :
Exemple d'utilisation :

Sub Appel
Dim Texte As String
Texte="Voici un extrait du tableau demandé :" & "%0A"
Texte=Texte & PH(Range("B5:D20")
EnvoiEmail Adresse:= Range("A1"), _
Objet:= Range("A2"), _
Corps:= Texte, _
PJ:= Application.Path & "\AJoindre.jpg" _
Bcc:="zorro@fantomas.com"
End Sub

Si ça ne fonctionne pas sur MAC, il faut trouver le code hexadécimal du retour ligne sur le MAC que je ne connais pas.

En ce qui concerne l'envoi de la date et de l'heure dans l'objet, c'est que le code est tiré du classeur d'exemple dans lequel j'ai programmé cet ajout. A retirer si vous n'en avez pas besoin (%C3%AO doit correspondre au "à" sur MAC...

En ce qui concerne le fait que "je ne sois pas là pour tout résoudre", je suis formateur de métier et j'ai publié ce code à l'origine dans un but pédagogique donc quand j'ai un peu de temps j'assume le côté pédagogique... Même si je dois répéter des infos déjà données précédemment (voir les messages des 07/06/2005, 25/10/2005, 14/09/2007 et 17/09/2007)

Cordialement et bon courage pour votre apprentissage de VBA
Jean
cs_AndrePe Messages postés 3 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 7 février 2010
4 févr. 2010 à 10:19
Bonjour Nerim,
Je viens d'ajouter Eudora à la liste en tenant compte du message que vous m'avez envoyé suite à ma demande.
Voici le code utilisé
Sub Eudora()
'PJ non encore adapté, envoi fonctionne
'Initialisation des tableaux de touches pour Outlook Express
' Pour une pièce jointe
TouchesPJ(0) = 1 ' Nombre de touches nécessaires
TouchesPJ(1) = "^h" ' Appel du menu Insertion par la touche CTRL h
'TouchesPJ(2) = "p" ' appel du sous-menu pièce par la touche p
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) "^e" 'clic sur le bouton 'Queue' CTRL e
TouchesEnvoi(2) = "^t" ' Envoi du message avec CTRL t
End Sub

Je n'ai pas besoin pour l'instant de PJ, mais je vais m'en occuper et ne manquerai pas de vous transmettre le code qui va bien.

Amicalement
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
5 févr. 2010 à 09:22
Bonjour AndrePe,

Juste une petite correction pour l'envoi de pièce jointe quand vous l'utiliserez :

Écrivez bien TouchesPJ(0)=2 s'il faut réellement utiliser 2 touches pour joindre la pièce (Ctrl-h puis p)

Merci de signaler sur le forum si votre procédure fonctionne quand vous l'aurez essayée.

Cordialement
Jean
cs_AndrePe Messages postés 3 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 7 février 2010
5 févr. 2010 à 09:45
Merci de la remarque.
Pour le moment, je n'envoie pas de PJ, et n'utilise donc pas ce code.
A+
André
cs_AndrePe Messages postés 3 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 7 février 2010
7 févr. 2010 à 15:38
Bonjour à tous,
Pour Eudora (V 7.1.0.9) vec le code
'Initialisation des tableaux de touches pour Outlook Express
' Pour une pièce jointe
TouchesPJ(0) = 2 ' Nombre de touches nécessaires
TouchesPJ(1) = "^h" ' Appel du menu Insertion par la touche CTRL h
TouchesPJ(2) = "p" ' appel du sous-menu pièce par la touche p
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) "^e" 'clic sur le bouton 'Queue' CTRL e
TouchesEnvoi(2) = "^t" ' Envoi du message avec CTRL t
End Sub

le programme fonctionne bien.

Merci NERIM, tu peux ajouter cela dans ton code.
Amicalement
André
B13C13210 Messages postés 4 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 9 juin 2010
11 févr. 2010 à 14:49
Bonjour a tous

J'aimerais savoir comment pouvoir insérer en piéces jointe le classeur entier ou une feuille

et sous Word

comment insérer le Document actif en piéces jointe

cordialement
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
12 févr. 2010 à 16:33
Bonjour B13C13210,

Vous pouvez regarder mon commentaire en date du 22/11/2007 21:07:35
J'y explique comment envoyer une feuille du classeur. Pour envoyer le classeur entier, il suffit de l'enregistrer sous un nom choisi et de fournir à la procédure le chemin et le nom.

Pour Word vous procédez de même. Quelque chose du genre :
ActiveDocument.SaveAs "Document à envoyer.doc" et c'est ce document dont vous donnez le chemin et le nom dans la procédure EnvoiEmail.

Dans les 3 cas (1 feuille, 1 classeur, un doc Word) je vous conseille d'envoyer une copie du document en utilisant un nom spécial pour l'envoi (avec un .SaveAs) plutôt que d'envoyer le document lui même puis de supprimer la copie avec un Kill (voir l'exemple de code dans le commentaire du 22/11/2007)

Bon courage
Cordialement
Jean
cs_avena Messages postés 1 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 15 février 2010
15 févr. 2010 à 19:00
Bonjour. quelqu'un connait-il une méthode pour faire la même chose mais avec excel VBA 2004 sous Mac avec Entourage comme application email... je trouve rien de rien sur le net... merci d'avance pour le coup de génie!
agnesm3g Messages postés 2 Date d'inscription mardi 2 mars 2010 Statut Membre Dernière intervention 11 mars 2010
3 mars 2010 à 17:20
Bonjour,
Je n'arrive pas à avoir les PJ dans mon envoi mais je suis une grande débutante en macros....
j'ai copié le code dans mon classeur dans un module 1. En module 2, j'ai copié la macro Envoi donnée en premier dans la feuille d'exemple.
J'ai mis dans la ligne PJ mon nom de fichier que je dois aller chercher dans mon réseau.
j'ai aussi essayé avec Dir sans plus de succès
Tout fonctionne parfaitement, Thunderbird s'ouvre bien avec les bonnes adresses et textes, mais aucune PJ ,n'apparait!

Je suis sous XP Sp3, Excel 97, Thunderbird 2.0.0.21
Pas de possibilité de faire autrement c'est pour le boulot!
Avez-vous une idée ou pouvez vous m'écrire le bout de code....
Avec tous mes remerciements,
Agnès
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
3 mars 2010 à 20:53
Bonjour,

voir mon commentaire du le 19/02/2009 18:50:59
dans lequel j'explique comment ouvrir une ou des pièces jointes (sur le même répertoire)
et les envoyer (sur Thunderbird, XP SP3 mais Excel 2003)
Pour Excel97, là je ne sais si les mêmes types de macro peuvent fonctionner.

Bonne suite ...
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
11 mars 2010 à 01:39
Bonjour Agnès

Est-ce que le menu Fichier-Joindre-Fichier s'active au lancement de Thunderbird ? Si la réponse est non, cela signifie que la procédure EnvoiEmail n'exécute pas le code correspondant qui suit
If PJ<>"" Then

Pour vous en assurer, vous pouvez placer un point d'arrêt sur l'instruction If PJ<>"" Then
(clic dans la marge : apparition d'un point rouge) et suivre l'exécution pas à pas (F8)

Si c'est le cas, cela signifie que VB considère que la variable PJ est vide, il vous faut donc vérifier l'appel de la procédure. Si vous avez effectivement fait un copier-coller de la procédure Envoi de la feuille "Quelques exemples", vérifiez que ce qui suit PJ:=
fait bien référence à un texte ou à une cellule non vide et contient bien le chemin complet du fichier à joindre...

Par contre, si le code qui suit If PJ<>"" Then est exécuté, il faut piéger l'envoi de la touche qui ne fonctionne pas (là encore le pas à pas peut être utile. Vous pouvez aussi augmenter le temps d'attente entre 2 touches pour mieux voir :
Attendre 5 au lieu de Attendre 1 par exemple) mais normalement, le code est bien rodé pour Thunderbird.

Vous pouvez aussi m'envoyer (à la main ;-) )votre classeur par mail (mon adresse figure en D2 dans la feuille "Quelques Exemples") que j'y jette un coup d'oeil

PS : Merci à Koloco, toujours vigilant, mais j'ai peur que le code cité dans votre commentaire du 19/02/2009 fasse un peu peur à Agnès qui dit être "une grande débutante" et serait déjà contente s'il elle arrivait à joindre UNE pièce

Cordialement
Jean
agnesm3g Messages postés 2 Date d'inscription mardi 2 mars 2010 Statut Membre Dernière intervention 11 mars 2010
11 mars 2010 à 09:23
Merci de votre réponse,
je m'en suis sortie entre temps, j'ai réalisé que je n'avais pas supprimé la ligne 'Client = Sheets("Envoi Automatique").Range("client") du classeur exemple!
La macro marche très bien, et j'ai tout à fait réussi à l'adapter à mon besoin.
Encore un grand merci
Agnès
deuxmains Messages postés 7 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 7 avril 2010
7 avril 2010 à 15:33
Merci beaucoup pour ce code simple et facilement intégrable
cs_Nospam54 Messages postés 1 Date d'inscription lundi 19 avril 2010 Statut Membre Dernière intervention 19 avril 2010
19 avril 2010 à 10:55
Bonjour Nerim !
Et merci (eh oui, un de plus !) pour ce code bien utile pour moi tous les jours.
Je l'utilise avec le module "EnvoiMail" sous Office 2003 (Excel et Outlook).
Je rencontre un petit problème toutefois.
En effet, pour que le mail soit bien envoyé il est nécessaire qu'Outlook soit ouvert au moment où la procédure d'envoi est actionnée. Si Outlook n'est pas ouvert, tout s'exécute sauf l'envoi lui-même... Ce n'est qu'en redémarrant manuellement à nouveau Outlook que le mail (encore dans la boite d'envoi) est envoyé.
J'ai tout d'abord pensé à un paramètre dans Outlook, mais aucun de mes essais n'a résolu mon souci.
L'application Excel tourne sur des postes de collègues distants et certains n'ouvrent leur messagerie qu'une fois par jour (voire moins). Je reçois donc le mail attendu avec un décalage plus ou moins long...
Peut-être avez-vous la solution ou une piste ?

Merci d'avance.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
5 mai 2010 à 11:12
Bonjour NOSPAM54

Désolé de vous répondre si tardivement.
Je n'ai eu aucun écho concernant un envoi qui resterait dans la boite d'envoi d'Outlook et il me semble que les essais faits personnellement fonctionnaient sans problème.

Je ne peux donc pas vous indiquer de pistes

Ceci dit, je peux vous conseiller d'utiliser plutôt la procédure "EnvoiMailMethodeOLE" indiquée en fin de code (qui ne fonctionne qu'avec Outlook) qui utilise une technique totalement différente et qui fonctionne parfaitement avec l'avantage de la non ouverture de la fenêtre outlook

Je reste cependant à votre disposition pour d'autres infos si besoin

Cordialement
Jean
flodbordo Messages postés 1 Date d'inscription jeudi 6 mai 2010 Statut Membre Dernière intervention 6 mai 2010
6 mai 2010 à 17:01
Bonjour tout le monde,
je n'est toujours pas essayé le code mais j'utilise Windows Live Mail. C'était simplement pour dire que le raccourci des touches pour "envoi" est "Alt+S" et "insérer" est "Alt+I" et ensuite "A".
En espérant avoir était utile à quelques uns...

Cordialement
Flo
gilles72 Messages postés 30 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 2 août 2013
14 juin 2010 à 17:05
Bonjour,
je ne serai pas original: super code
par contre j'ai un petit pb à l'utilisation :
la zone que je copie, comporte des cases à cocher et des cases d'option, et sur le mail envoyé (et reçu par le destinataire), les boites ne sont plus du tout à leur emplacement.
Si je fais une copie/coller comme metafichier windows, ça marche.
mais comment ajouter ce coller/metafichier windows dans le code?
merci, de toutes façons
gilles
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
15 sept. 2010 à 16:01
En réponse à un message privé reçu de la part d'aliberlis:

>Bonjour,
>
>J'ai regardé votre produit qui correspond globalement à ce que je recherchais.
>
>Par contre, ce que je souhaite, c'est pouvoir lancer un publi-mailing à partir d'Excel (2002) et Thunderbird 1.5, avec une PJ personnalisée pour chaque contact.
>
>L'idée serait d'avoir une feuille EXCEL qui contienne différentes données (nom, prénom ...) pour chaque destinataire, ainsi que le nom du fichier spécifique à chacun à mettre en pièce jointe dans le mail.
>
>Il y aurait également un onglet Paramètres dans lequel on mémorise par exemple le chemin d'accès aux fichiers joints.
>
>Le publipostage se lancerait avec un bouton spécifique comme dans votre outil.
>
>Auriez-vous cela ? Sinon, pouvez-vous m'aider dans sa réalisation, sachant que je ne suis pas formé au développement de macros Excel ou VB.
>
>Très cordialement
>
>Thierry
-----------
>Re-bonjour,
>
>J'ai oublié de vous préciser que je ne souhaite pas envoyer la PJ elle-même, mais un lien hypertexte qui ira chercher le fichier à partir du mail reçu par le destinataire.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
15 sept. 2010 à 16:04
Voici une copie de la réponse fournie :

Bonjour,

Si vous n'avez aucune notion de VBA, cela risque de ne pas être facile

Pour la réalisation d'une boucle d'envois de plusieurs messages, vous pouvez vous reporter aux différents messages publiés sur le forum avec les réponses plus ou moins détaillées.

Pour l'envoi d'un hyperlien, le sujet a déjà été traité mais je ne me souviens plus si toutes les réponses aux questions posées ont été données.

En gros, vous devez créer un tableau qui contient les adresses des destinataires (colonne A), les objets (colonne B) et les adresses des liens (Colonne C) etc...
Vous nommez la plage A2:An (où n est la dernière ligne) Destinataires
Vous pouvez alors utiliser un morceau de code du genre suivant :
Dim A, O, C
With Range("A2")
For i=0 to Range("Destinataires").rows.count-1
A=.Offset(i,0) ' Adresse
O=.Offset(i,1) ' Objet
C="Début du corps..." & "%0A" & " Cliquer ici "
EnvoiEmail Adresse:=A, Objet:=O, Corps:=C
Next i
End With

Cordialement
nerim
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
15 sept. 2010 à 16:38
Pour aliberlis (suite)

Voir également une solution plus simple dans mon post du 14/05/2008 (mais là, la pièce jointe est envoyée)
ohlol Messages postés 1 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 6 octobre 2010
6 oct. 2010 à 10:32
Bravo, travail génial
RAMTAON Messages postés 1 Date d'inscription dimanche 17 octobre 2010 Statut Membre Dernière intervention 17 octobre 2010
17 oct. 2010 à 12:48
Bonjour Nerim,
Merci pour ce formidable travail mais j'ai quand même 2 soucis, sachant que j'utilise Microsoft 2003:
1 en mode 'Envoi par touche' l'envoi de %v n'envoit pas le mail généré correctement. (Alors que l'envoi des touches ' v' le fait lorsque je suis dans la messagerie (Outlook2003).

2. J'ai préféré la version d'envoi par OLE qui d'ouvrir le mail et qui elle, fonctionne jusqu'à la commande 'MonMail.send', j'ai ensuite un message d'erreur:
Erreur d'exécution '287':
Erreur définie par l'application ou par l'objet

Auriez vous une idée pour résoudre ce problème?
Merci
Gilbert
Xmehdi06 Messages postés 1 Date d'inscription jeudi 17 septembre 2009 Statut Membre Dernière intervention 4 novembre 2010
4 nov. 2010 à 11:31
Bonjour à tous,

je me permet d'apporter une modification sur la partie Outlook 2007 qui ne fonctionne pas dans code actuel

Sub Office2007OutLook()
' Initialisation des tableaux de touches pour Office Outlook 2007
' Pour une pièce jointe
TouchesPJ(0) = 3 ' Nombre de touches nécessaires
TouchesPJ(1) = "%n" ' Appel du menu Insertion par la touche Alt-n
TouchesPJ(2) = "%a" ' selection du sous-menu Include par la touche Alt-a
TouchesPJ(3) = "%f" ' appel du sous-menu piece jointe par la touche Alt-f

' Pour l'envoi du mail
TouchesEnvoi(0) = 1 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "%s" ' Envoi du message avec Alt-s

End Sub

Cordialement
Niola Messages postés 1 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 15:14
Hello,
J'ai testé avec plaisir et gagné bcp de temps. Merci.
J'utilise la méthode OLE (dernière sub du source).
Lorsque l'on a plusieurs profil dans OUTLOOK ce n'est pas tout à fait automatique.
Je vais essayer de trouver comment fixer le profil.
Niola
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
1 mars 2011 à 16:14
Message privé de ab44 transcrit ici :

Bonjour nerim.

j'ai quelques question au sujèt de ton code sur l'envoi de mail automatique.
la 1ere:
-J'aimerai le corq du message (B3), envoyé un message assez long avec des mises en forme etc. es ce possible de par exemple copier un petit paragraphe sur un document word et de l'envoyer par ton script ?

la 2ieme:
-J'utilise une fonctione "ConcatPlage(F7:F8;"; ") en B5 pour ajouter plusieurs adresses dans la même case séparé de ";". Cela fonctionne. Seulement dès qu'il y a plus de 2 adresses, quand je veux envoyé cela me dit "Argument ou appel de procédure incorrect" et sa ne fonctionne pas.

As tu des idées pour m'aider ?

D'avance Merci.

Antoine
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
1 mars 2011 à 16:16
Bonjour Antoine,

A la première question : difficile !
En effet le corps du message est soit du texte pur soit du format Web (HTML) mais certainement pas du format Word. Par contre, un copier d'un texte Word mis en forme coller dans le corps d'un message est transformé en HTML (dans thunderbird tout au moins). Donc voir la gestion du presse-papier pour automatiser le copier-coller - Lire les lignes 122 à 127 du code qui en parlent. Par contre si le texte à copier vient de Word, il faut piloter Word à partir d'Excel... C'est pas gagné
Une autre solution serait peut-être d'enregistrer le texte du message mis en forme sous la forme d'un document Word et d'envoyer ce dernier en pièce jointe...

A la deuxième question : certainement une erreur dans l'écriture de la fonction CONCATPLAGE qui ajoute peut être un point-virgule à la fin de la liste des adresses. Ou le message est peut-être provoqué par la fonction ConcatPlage elle-même qui n'accepte peut-être pas plus de deux cellules.... Difficile à dire sans avoir le code de la fonction

Cordialement
Jean

PS : je copie votre message et ma réponse dans le forum pour que cela profite à tout le monde
DTARS83 Messages postés 1 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 18:40
Bonjour

je suis nouveau sur ce forum
j'utilise excel 2003 et outlook 2003
je suis trés novice en programmation et en VBA
je rencontre un gors soucis pour envoyer un message avec
plusieurs piéces jointes
j'ai tenté de copier le code de kolocco du 19/02/2009 mais rien n'y fait
j'ai à chaque fois un beug sur excel avec arrêt sur la ligne
" Tab_PJ(ind) = Mid(PJ_Saisie, ideb, i_long)
tous le message se réalise mais aucune pj ne se s'y ajoute

pouvez vous m'aider si je vous transmets mon code en entier ?

merci de votre aide à tous
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
2 mars 2011 à 19:15
Bonjour,

je peux regarder.
Je vous écris un mail perso pour vous donner mon email.

Koloco
UgoBe Messages postés 2 Date d'inscription dimanche 1 mai 2011 Statut Membre Dernière intervention 4 mai 2011
2 mai 2011 à 20:40
Bonjour à Tous,

Merci pour ce code qui m'aide dans l'application que je met en place.

J'utilise la version Olé qui devra marcher par elle même avec un timer pour envoyer des Etat Access par mails tous les mois. Le problème que je rencontre et qui a déjà été soulevé c'est l'apparition de la fenetre de message à mon insu. J'ai essayé de faire des sendkeys avec une temporisation de 6 s supérieure aux 5 secondes pour que le "Oui" de la fenêtre soit active mais rien n'y fait. J'ai égaelement cherhcé pour décocher cette option et là encore pas de solution.

Y-a t'il une solution pour contourner ce problème ?
UgoBe Messages postés 2 Date d'inscription dimanche 1 mai 2011 Statut Membre Dernière intervention 4 mai 2011
4 mai 2011 à 18:30
Problème résolu...

En regardant de plus pret, j'ai vu que j'étais loin d'être le seul à avoir ce problème mais je ne voulais pas utiliser Clickyes car cette routine va se retrouver sur un serveur à l'étranger dans un pays pas trop sûre donc... j'ai opté pour la méthode bricolo que j'assume (je suis ingénieur méca et pas programmateur donc je me suis toujours endormie au cours de VBA ou je regardais quelque chose sur internet).
Donc j'ai activé la fonction "display" et désactiver ".send" et vous l'aurez deviner je fais sendkeys "%v" avec une tempo de 5 s au préalable le temps que mon pdf s'imprime et se place.

Merci encore pour ce code.
46784 Messages postés 1 Date d'inscription dimanche 12 juin 2011 Statut Membre Dernière intervention 12 juin 2011
12 juin 2011 à 18:59
Aucune aide me m'a été donné pour exporter les fichiers joints avec thunderbird. Je n'avais jamais eu ce cas de figure avec les autres boites de messageries.

A l'aide
cs_patoche39 Messages postés 3 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 16 juin 2011
15 juin 2011 à 23:18
Bonjour
Je viens d'installer mon programme sur un nouveau PC avec office
2011 ,ça ne marche plus (outlook)
plus de pièce jointe par exemple
Si vous avez la solution......
Merci d'avance
cs_patoche39 Messages postés 3 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 16 juin 2011
16 juin 2011 à 19:38
Bonjour
Pour info , pour que ça marche avec office 2011
J'ai du utiliser office2007outlook au lieu de outlookEpress qui n'exite
plus sur office 2011
et j'ai remplacé

TouchesEnvoi(1) = "%v" 'Envoi du message avecAlt-v

par TouchesEnvoi(1) = "%n 'Envoi du message avecAlt-n"

et ça marche !!

Cordialement

bravo et grand pour toutes ces aides du forum

Patoche39
cs_patoche39 Messages postés 3 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 16 juin 2011
16 juin 2011 à 19:44
pardon:
bravo et grand "merci" pour toutes ces aides du forum

PS
quand je parle d'office2007outlook et outlookExpress , je fais allusion aux options du code de Jean

Patoche
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
29 juin 2011 à 14:03
Super source ! Merci
J'ai pu modifier cette source pour pouvoir l'incorporer dans mon appli Cependant de temps en temps de rencontre un problème qui sera gênant pour l'utilisateur final de mon appli
J'utilise ici uniquement la messagerie Thunderbird. Celle ci s'ouvre toujours correctement mais des fois la manipulation avec les touches raccourcis pour mettre des pièces jointe ou pour envoyé le mail ne se fait pas dans la fenêtre de Thunderbird mais sous Excel et je ne trouve pas pourquoi.

Si quelqu'un a une réponse a m'apporter ça serait sympa.

Merci
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
21 juil. 2011 à 19:19
Bonjour kyoku59,

2 solutions :
1 - augmenter le temps d'attente entre l'ouverture et la manip des touches raccourcis (mais ce n'est pas sur que cela fonctionne toujours);
2 - toujours démarrer Thunderbird au préalable et là cela fonctionne pratiquement à 99%.

koloco
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
21 juil. 2011 à 19:28
Bonjour,

je viens de passer sous windows7 (mon vieux PC de 7 ans m'ayant laché il y a 3 jours) et là les commandes Sendkeys ne fonctionnent plus (sur certains blog ils appellent cette commande de la "préhistoire").
Ce pb à l'air d'être récurrent depuis Vista et maintenant windows7.

2 questions :
Quelqu'un utilise t'il csenkeys avec Vista et:ou windows 7

Savez-vous ce qu'il faudrait utiliser à la place ?

Merci pourvos réponses et l'aide.

koloco
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
22 juil. 2011 à 17:06
Bonjour,

mon problème au sujet de sendkeys et résolu (voir explications à la suite).

L'utilisation de sendkeys (sous windows seven) posee problème (alors que depuis 4 ans tout était OK sur windows XP.

J'utilisais sous XP et j'utilise sous 7even : office XP (excel 2003)

En fouillant sur internet, il s'avère qu'il suffit de désactiver l'UAC (User Access Control) de rebooter et là cela fonctionne (taper "désactiver UAC" dans la recherche et vous aurez un site qui vous explique comment faire).

Koloco...
kyoku59 Messages postés 54 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 21 septembre 2018
22 juil. 2011 à 17:55
Merci pour la rép je test
yjounot Messages postés 3 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 23 août 2011
23 août 2011 à 13:30
Merci beaucoup Nerim pour ce code.
Néohpite et autodidacte je m'inspire de ton code mais n'arrive pas à modifier ce code pour arriver à mes fins.

Je souhaiterais modifier ton code pour prendre en compte ces colonnes :
Colonne A : nom des personnes
Colonne B : identique à la tienne
Colonne C : identique à la tienne ( à la différence que si chiffre négative je préfèrerais "date dépassée de tant de jours")
Colonne D : mail des personnes.
Je voudrais envoyer simultanément plusieurs mails à des personnes dont la date arrive à échéance jusqu'à la fin du tableau à la condition que "avertissment" est différent de vide

Un mail unique pour chaque ligne.

En clair :

intel arrive à échéance = envoyer mail intel@intel.fr tu arrives à échéance ...blabla
bidul à dépassé = envoyer mail à bidul@bidul.fr avec tu as dépassé la date...blabla
Une copie de rappel me serait adresse en cc

avec 200 personnes le faire à la main prend du temps et je suis certain que cela est possibel mais il faut connairtre les limites de ses compétences.

Je suis preneur de tout aide car je tourne un peu en rond...:)
liolio81 Messages postés 5 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 21 janvier 2013
5 oct. 2011 à 11:35
Bonjour à tous

J'ai le même problème que KOLOCO depuis mon passage à seven.
Part contre la manip de désactiver UAC ne résoud pas pour autant le pb.

Quelqu'un a-t-il eu ce pb?

Sinon bravo à tous pour votre travail sur ce code.
raftom Messages postés 1 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 17 février 2012
17 févr. 2012 à 10:22
Bonjour,

Merci pour le partage, ca marche nickel !

Bravo et à bientot !
dana85 Messages postés 1 Date d'inscription samedi 25 février 2012 Statut Membre Dernière intervention 3 mars 2012
3 mars 2012 à 14:40
Bonjour

votre code marche nickel sur votre exemple mais dés que je copie colle dans mon projet excel(génération de carte d'adhérent en pdf et envoi par mail) que je modifie la variable du client de messagerie te que je lance la macro d'envoi de mail avec piéce jointe outlook s'ouvre les champs (adresse corps,objet) sont remplis mais la piéce jointe ne marche pas et le mail ne part pas et vba me renvois un message d'erreur que l'indice n'appartient pas à la selection.

si quelqu'un peut m'aider

merci par avance
cs_akiwaza Messages postés 1 Date d'inscription jeudi 22 mars 2012 Statut Membre Dernière intervention 23 mars 2012
23 mars 2012 à 10:46
Fonctionne nickel, le code est simple mais fallait y penser. En plus c'est super bien expliqué (et pourtant je ne fait pas de macro souvent, donc je ne m'y connais pas trop!), mais vraiment accessible à toute personne ayant quelques bases en macro.
Kignol Messages postés 10 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 16 avril 2012
16 avril 2012 à 08:51
Merci à Nerim pour ce code et surtout sa précieuse aide et sa sympathie.
usepe Messages postés 2 Date d'inscription dimanche 15 avril 2012 Statut Membre Dernière intervention 17 avril 2012
17 avril 2012 à 17:17
Bonjour,

je ne suis pas un spécialiste de ce type de code, mais j'ai tout de même réussi à faire fonctionner cette macro .Toutefois, je rencontre un problème d'envoi de PJ avec INCREDIMAIL ! le code "^+a" ne déclenche pas l'ouverture de la fenêtre pièce jointe (càd que la fenêtre PJ n'apparait pas sur l'écran 'nouveau message' d'INCREDIMAIL) et après le délai de temporisation,le mail part sans la PJ.
J'ai fait qques test d'appel sur d'autres menu INCREDIMAIL.
- "^+B" ouverture carnet d'adresse => OK (valorisation de la zone de saisie avec le chemin d'accès à mon fichier)
usepe Messages postés 2 Date d'inscription dimanche 15 avril 2012 Statut Membre Dernière intervention 17 avril 2012
17 avril 2012 à 17:25
suite du mail précédent parti trop vite.
- "^+S" signature du mail ==> OK
- "^+Q" ajout message audio ==> non OK (la fenêtre ne s'ouvre pas)
xr73toto Messages postés 2 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 4 mai 2012
24 avril 2012 à 17:06
Bonjour,

je voudrais adapter le fichier excel à lotus notes 8.5, mais à l'ouverture du document, j'ai
"erreur à l'ouverture de la DLL".
Quand je regarde dans les références, j'ai Microsoft Outlook 12.0 object library manquant.
Comment contourner cette erreur ?
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
25 avril 2012 à 21:20
Bonjour usepe,

Si vous êtes sous vista ou seven, l'instruction SendKeys qui gère l'envoi automatique ne fonctionne pas correctement.

Voyez le commentaire de koloco du 21 et 22/07/2011, c'est peut-être une piste...

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
25 avril 2012 à 21:36
Bonjour xr73toto,

Je pense que vous devez utiliser la procédure EnvoiMailMéthodeOLE qui nécessite la présence d'Outlook 2003, 2007 ou 2010 sur votre machine. Vous pouvez ajouter la référence manquante (si outlook 2007 (Outlook 21.0) est installé sur votre machine) mais je doute que cela résolve le problème si vous utilisez Lotus notes.

Je n'ai jamais utilisé lotus notes. Essayez plutôt d'utiliser la procédure standard indiquée dans le code (EnvoiEMAil) et de repérer avant, l'enchaînement des touches à utiliser avec lotus notes pour envoyer le mail et joindre une pièce...

Vous changez le client mail par Client=8 (ligne 135)
Vous ajoutez un
Case 8 (ligne 161)
LotusNote

et créez une procédure (à partir de la ligne 294 par exemple)
Sub LotusNote
... qui contient les codes des touches à utiliser
... en vous inspirant des exemples de clients mail donnés dans le code
End Sub

J'espère que cela peut vous aider

Cordialement
Jean
xr73toto Messages postés 2 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 4 mai 2012
4 mai 2012 à 14:12
Bonjour Nerim,

Non, je n'utilise pas la méthode OLE, mais bien la procédure standard EnvoiEmail.
Outlook n'est pas installé sur l'ordinateur que j'utilise et je ne suis pas administrateur.
L'erreur que j'obtiens est à l'ouverture du fichier Excel. Je ne peux pas changer de client, parce que l'erreur se produit avant ...
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
8 mai 2012 à 03:23
Bonjour xr73toto,

Je pense qu'il faudrait retirer du code VBA la procédure EnvoiMailMéthodeOLE et décocher la librairie Outlook dans les références...

A essayer

Cordialement
Jean
davidfifi Messages postés 3 Date d'inscription vendredi 18 mai 2012 Statut Membre Dernière intervention 21 mai 2012
21 mai 2012 à 11:05
Bonjour à tous,

Tout d'abord un grand merci à toi Nerim qui a pris du temps pour rédiger ce code et qui reste à l’écoute des utilisateurs.

Malheureusement ce code ne marche pas pour moi (j'utilise Excel 2007 et Outlook 2007). Je ne peux pas envoyer de PJ.
J'ai essayé la méthode principale mais aussi la méthode Olé.

Qqun saurait d'où vient mon problème ?

Merci d'avance.

Cordialement
David
noya_m Messages postés 23 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 20 février 2007
12 juil. 2012 à 18:08
Superbe superbe superbe ;-)
J'en revé et tu l'as fait !

Je souhaiterai savoir comment intégrer une liste de contact qui serait sur une autre feuille au lieu de mettre les contacts 1 par 1 avec des ; sur la feuille quelques exemples.

Si quelqu'un avait une solution je suis preneur ;-)

merci encore
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
14 juil. 2012 à 10:58
Bonjour DAVID,

Tout d'abord avec XL2007 et Outlook2007, je vous conseille d'utiliser plutôt la méthode OLE, plus propre et qui évite l'ouverture de la fenêtre d'envoi.

Par contre pour vous dépanner j'aurais besoin de quelques précisions sur la nature du problème rencontré.

Ceci dit, vu la date de votre message, j'espère que vous avez résolu votre problème entre temps. Désolé de la réponse un peu tardive.

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
14 juil. 2012 à 11:57
Bonjour NOYA_M,

Une fonction du genre suivant devrait vous aider:

Nom de la feuille contenant les contacts : contacts
Liste des contacts placés de A1 à An et une cellule vide en An+1

Function Plusieurs()
Dim Destinataires As String
Application.ScreenUpdating = False ' à placer en commentaire pendant la phase de test
ThisWorkbook.Sheets("contacts").Select
Range("A1").Select
Do Until IsEmpty(ActiveCell)
Destinataires = Destinataires & ActiveCell & ";"
ActiveCell.Offset(1, 0).Select
Loop
Destinataires = Left(Destinataires, Len(Destinataires) - 1) ' retirer le dernier point-virgule
Application.ScreenUpdating = True
MsgBox Destinataires ' Pour vérification
Plusieurs = Destinataires
End Function

Utiliser la fonction avec l'appel de la procédure d'envoi :

EnvoiEmail Adresse:=Plusieurs(),Objet:=.......
ou
EnvoiMailMéthodeOLE Adresse:=Plusieurs(),Objet:=.......
suivant la méthode utilisée...

Ce n'est qu'une solution...

Cordialement
Jean
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
21 juil. 2012 à 10:50
Bonjour Noya_M,

juste une précision au commentaire de NERIM.
Le nombre de caractères est limité à 818 (voir le message du 12/11/2008 20:16:53 et les suivants de Nerim)
818 avec l'objet du message, les destinataires et le texte du message.

Koloco
cs_Etienne42 Messages postés 1 Date d'inscription mercredi 5 septembre 2012 Statut Membre Dernière intervention 5 septembre 2012
5 sept. 2012 à 11:38
Bonjour

J'essaye de faire fonctionner le code. je suis sous excel 2003 SP3 et Outlook 2003 SP 3. J'ai un pb qui doit être basique mais je n'arrive pas à le décoincer. Quand je veux lancer la macro EnvoiEmail (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)
)... elle ne se trouve pas dans la liste des macros à lancer. J'ai la macro ThisWorkbook.Office2003OutLook qui est disponible (Sub Office2003OutLook())

donc il ne se passe rien. Merci de votre aide. Etienne
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
15 sept. 2012 à 16:17
Bonjour Etienne42,

Vous ne pouvez pas lancer la macro EnvoiEmail directement depuis le classeur Excel car cette macro (en fait cette procédure) attend au moins 3 arguments (l'adresse, l'objet et le corps) seules les macros sans argument peuvent être lancées de la sorte.

Vous devez écrire une macro qui appelle la procédure EnvoiEmail en lui transmettant les bons arguments (voir les lignes 79 à 86 du code pour des exemples)
Et c'est cette macro que vous pourrez lancer par le menu Outils-Macros...

Cordialement
Jean
Kalagane75 Messages postés 21 Date d'inscription lundi 3 septembre 2012 Statut Membre Dernière intervention 21 février 2013
25 sept. 2012 à 17:44
Bonjour tout le monde,
Excuser moi mais j'ai passé quasi la journée pour essayer de comprendre ce code.
Il y a deux méthodes :
- EnvoiEMail avec les touches et tous ce qui va bien ....
- EnvoiMailMéthodeOLE...

Apparemment le plus intéressant est la seconde méthode qui ne nécessite pas l'utilisation de touches...

Voici ce que j'ai essayé :
Dans un module :
Sub EssaiEnvoi()
EnvoiMailMéthodeOLE Adresse:=Range("A1"), _
Objet:="Test", _
Corps:="essai", _
Pièce:="", _
Bcc:="" 'pour l'instant...
End Sub

Puis plus loin

Sub EnvoiMailMéthodeOLE(Adresse As String, Objet As String, Corps As String, Optional Pièce As String, Optional Cc As String, Optional Bcc As String)
Dim MonAppliOutlook As New Outlook.Application
Dim MonMail As Outlook.MailItem
Dim MaPièce As Outlook.Attachments
Set MonMail = MonAppliOutlook.CreateItem(olMailItem)
With MonMail
'.Display ' retirer le commentaire si vous voulez que le fenêtre Outlook s'affiche
.To = Adresse
If Not IsNull(Cc) Then .Cc = Cc
If Not IsNull(Bcc) Then .Bcc = Bcc
.Subject = Objet
.Body = Corps
If Not IsNull(Pièce) Then
Set MaPièce = .Attachments
MaPièce.Add Pièce, olByValue
End If
.Send
End With

End Sub

Le truc c'est que dés lors qu'il bascule de "EssaiEnvoi()" à "EnvoiMailMéthodeOLE" , il m'ouvre un message avec l'info "Type défini par l'utilisateur non défini"...

Ça en devient désespérant…

Quelqu’un peut il m’aiguiller ?
Merci d’avance
Kalagane75 Messages postés 21 Date d'inscription lundi 3 septembre 2012 Statut Membre Dernière intervention 21 février 2013
25 sept. 2012 à 21:07
Bonjour ou plutôt bonsoir,
J'y suis arrivé, par contre toujours le message d'avertissement d'Outlook...
Voilà ce que j'y ai mis :

Function EnvoiAvecPièceJointe()
'Dim tempoXlApp As New Excel.Application
'Dim temp As Variant

'temp = tempoXlApp.GetOpenFilename()

EnvoiMailMéthodeOLE Adresse:="kamal_2811@hotmail.fr", _
Objet:="Essai", _
Corps:="Concluant", _
Pièce:=CStr(temp), _
Cc:="", _
Bcc:=""

'tempoXlApp.Quit
'Set tempoXlApp = Nothing

End Function
Sub EnvoiMailMéthodeOLE(Adresse As String, Objet As String, Corps As String, Optional Pièce As String, Optional Cc As String, Optional Bcc As String)
Dim MonAppliOutlook As New Outlook.Application
Dim MonMail As Outlook.MailItem
Dim MaPièce As Outlook.Attachments
Set MonMail = MonAppliOutlook.CreateItem(olMailItem)
With MonMail
'.Display '
.To = Adresse
If Not IsNull(Cc) Then .Cc = Cc
If Not IsNull(Bcc) Then .Bcc = Bcc
.Subject = Objet
.Body = Corps
' If Not IsNull(Pièce) Then
' Set MaPièce = .Attachments
' MaPièce.Add Pièce, olByValue
' End If
.Send
End With
End Sub
Mais le hic c'est cette avertissement...
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
26 sept. 2012 à 00:59
Bonjour Kalagne75,

Normalement le message "Type défini par l'utilisateur non défini" provient du fait que la bibliothèque Outlook n'est pas installée. Dans VB, menu Outils-Références chercher Microsoft "Outlook xx.0 Object library" et cocher.

Par ailleurs, quand vous n'utilisez pas un argument optionnel d'une procédure, je pense qu'il est en général préférable de ne pas le citer dans l'appel à la procédure.
Pour être plus clair, il vaut mieux utiliser
EnvoiMailMéthodeOLE Adresse:="xxx@yyy.fr",Objet:="Essai",Corps:="message"
que
EnvoiMailMéthodeOLE Adresse:="x@y.z",Objet:="Essai",Corps:="message",Pièce:="",Cc:="",Bcc:=""

Cordialement
Jean
Kalagane75 Messages postés 21 Date d'inscription lundi 3 septembre 2012 Statut Membre Dernière intervention 21 février 2013
26 sept. 2012 à 12:23
Bonjour, merci pour ta reponse, effectivement, bien que persuadé d'avoir coché la bonne case, ca ne pouvait pas marcher
Maintenant il fonctionne bien mais l'avertissement outlook est toujours de rigueur, je ne passe pas au travers malgreS la methode ole... Pour info jqkai outlook 2003 classique.
Merci d'avance pour votre aide
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
26 sept. 2012 à 17:22
Bonjour Kalagane75,

JE ne vois pas dans vos messages de quel avertissement il s'agit. Je pensais qu'il s'agissait de "type défini..."

S'il s'agit d'un message du type :

Erreur d'exécution : '-123456....'
Erreur automation
Le chemin d'accès spécifié est introuvable

essayez de modifier le code de la procédure EnvoiMailMéthodeOLE en remplaçant
If Not IsNull(Cc) Then par If Cc<>"" Then ...
Not IsNull(Bcc) par Bcc<>""
et NotIsNull(Pièce) par Pièce<>""

Je n'avais ré-essayé cette méthode OLE (qui fonctionnait sans problème) depuis que j'ai changé de version de logiciel
Je ne sais pas si c'est le passage de XP à Seven ou le passage d'Office2003 à Office 2010. Actuellement j'ai Windows 7 32bits / Word-Excel-Pwpt-Access 2010 et Outlook 2007 et le code ne fonctionne pas avec Not IsNull() mais il fonctionne avec <>""...

Donc à voir...
Si cela solutionne votre pb, merci de le signaler dans les commentaires afin d'en faire profiter tout le monde.

Cordialement
Jean
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
26 sept. 2012 à 17:30
Bonjour Kalagane75,

JE ne vois pas dans vos messages de quel avertissement il s'agit. Je pensais qu'il s'agissait de "type défini..."

S'il s'agit d'un message du type :

Erreur d'exécution : '-123456....'
Erreur automation
Le chemin d'accès spécifié est introuvable

essayez de modifier le code de la procédure EnvoiMailMéthodeOLE en remplaçant
If Not IsNull(Cc) Then par If Cc<>"" Then ...
Not IsNull(Bcc) par Bcc<>""
et NotIsNull(Pièce) par Pièce<>""

Je n'avais ré-essayé cette méthode OLE (qui fonctionnait sans problème) depuis que j'ai changé de version de logiciel
Je ne sais pas si c'est le passage de XP à Seven ou le passage d'Office2003 à Office 2010. Actuellement j'ai Windows 7 32bits / Word-Excel-Pwpt-Access 2010 et Outlook 2007 et le code ne fonctionne pas avec Not IsNull() mais il fonctionne avec <>""...

Donc à voir...
Si cela solutionne votre pb, merci de le signaler dans les commentaires afin d'en faire profiter tout le monde.

Cordialement
Jean
liolio81 Messages postés 5 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 21 janvier 2013
21 janv. 2013 à 16:54
Bonjour

une modeste contribution testé avec Thunderbird/3.0.11 pur pièce jointe, image en teêe mail et choix expéditeur

Public Sub MozillaThunderbird()
With ThisWorkbook.Sheets("C")
'PJ
ClefEnvoi(0) = 19
ClefEnvoi(1) = "%F" 'Alt+F
ClefEnvoi(2) = "J"
ClefEnvoi(3) = "F"
ClefEnvoi(4) = .[Q31] 'nom fichier
ClefEnvoi(5) = "%A" 'Alt+A chemin
ClefEnvoi(6) = .[Q30] 'chemin
ClefEnvoi(7) = "{ENTER}"
ClefEnvoi(8) = "%V" 'Alt+V
'image entete de mail
ClefEnvoi(9) = "%I" 'Alt+I
ClefEnvoi(10) = "I"
ClefEnvoi(11) = .[V3] & .[V4] & .[V7] & .[V18] & .[V40] 'chemin et nom fichier
ClefEnvoi(12) = "{ENTER}"
ClefEnvoi(13) = "{ENTER}"
ClefEnvoi(14) = "logo"
ClefEnvoi(15) = "{ENTER}"
ClefEnvoi(16) = "{ENTER}"
ClefEnvoi(17) = "{ENTER}"
'choix adresse mail de l'expéditeur si plusieurs
ClefEnvoi(18) = "%x" 'x en miniscules, en MAJ=pb ??
ClefEnvoi(19) = "O" '1° lettre de l'adresse
End With
End Sub

Je ne comprends pas pourquoi le "Alt+x" ne marche pas avec le "x" en majuscules !
cs_expedite Messages postés 2 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 février 2013
5 févr. 2013 à 13:28
Bonjour, je suis débutant en macro. J'ai pris soin de lire tout le forum en rapport avec cette macro. Seulement comme tout débutant j'ai beau essayer de suivre et de faire des exemples pour comprendre comment cela fonctionne, j'ai bien du mal. J'ai un souci à plusieurs étages : 1 : l'adresse mail d'envoi n'ai pas le compte par défaut ; 2 : envoi de mail à 200 personnes personnalisable ; 3 : ajout de pièces attachées différentes à chacun sachant que le mail ne doit pas dépasser 2 Mo ; 4 : demande d'avis de remise pour établir un rapport d'envoi. Je reconnais cela fait beaucoup.
1 ; peut-on forcer la macro à utiliser une adresse d'expédition qui ne soit pas celle par défaut ? 2 ; sur le forum j'ai vu des procédures pour la sélection des 200 adresses mails. L'objet du mail doit seulement contenir le nom de la personne à qui il est adressé plus quelques informations (cela j'ai vu que c'est aussi réalisable). 3 ; là où je n'ai pu trouver de renseignement c'est comment limiter automatiquement les pièces attachées à 2 Mo, si la somme de ces dernières fait plus, et dans ce cas comment faire pour que la macro fasse autant de mail à cette personne qu'il y a de Mo à envoyer (si 6 Mo = 3 mail par exemple). 4 ; enfin j'aimerai récupérer les avis de remise. Peut-être que cette fonction est prévue mais je ne l'ai pas vu.

J'ai bien conscience de poser beaucoup de question. Mais si vous aviez au moins quelques pistes de réflexion je pourrais m'orienter. Merci à vous de votre travail
cs_expedite Messages postés 2 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 février 2013
5 févr. 2013 à 13:53
Bonjour, je suis débutant en macro. J'ai pris soin de lire tout le forum en rapport avec cette macro. Seulement comme tout débutant j'ai beau essayer de suivre et de faire des exemples pour comprendre comment cela fonctionne, j'ai bien du mal. J'ai un souci à plusieurs étages : 1 : l'adresse mail d'envoi n'ai pas le compte par défaut ; 2 : envoi de mail à 200 personnes personnalisable ; 3 : ajout de pièces attachées différentes à chacun sachant que le mail ne doit pas dépasser 2 Mo ; 4 : demande d'avis de remise pour établir un rapport d'envoi. Je reconnais cela fait beaucoup.
1 ; peut-on forcer la macro à utiliser une adresse d'expédition qui ne soit pas celle par défaut ? 2 ; sur le forum j'ai vu des procédures pour la sélection des 200 adresses mails. L'objet du mail doit seulement contenir le nom de la personne à qui il est adressé plus quelques informations (cela j'ai vu que c'est aussi réalisable). 3 ; là où je n'ai pu trouver de renseignement c'est comment limiter automatiquement les pièces attachées à 2 Mo, si la somme de ces dernières fait plus, et dans ce cas comment faire pour que la macro fasse autant de mail à cette personne qu'il y a de Mo à envoyer (si 6 Mo = 3 mail par exemple). 4 ; enfin j'aimerai récupérer les avis de remise. Peut-être que cette fonction est prévue mais je ne l'ai pas vu.

J'ai bien conscience de poser beaucoup de question. Mais si vous aviez au moins quelques pistes de réflexion je pourrais m'orienter. Merci à vous de votre travail
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
14 févr. 2013 à 21:12
Bonjour,

voila un bout de code pour le point 1 et 3 (pour thunderbird)

Question 1 : Ayant eu le même problème, j'ai renommer les comptes d'envoi mail avec la 1ère lettre différente à chaque fois (lettre ou chiffre).
Pour mon cas, j'utilise (hors comptes perso) des chiffres de 0 à 9.
Exemple : 0 - Danse
1 - Musique
2 - Peinture
3 - ...
Par contre, je n'ai pas tester s'il fait pour une lettre donnée une différence entre majuscule et minuscule.
Donc Let_Cpte n'est que de UN caractère.

Question 3 : il suffit de tester la taille des pièces à joindre (filelen(mapiècejointe)) est de faire une boucle avec ebvoi successifs au('x) mêm(s) destinataire(s)

Question 2 : N destinataires (200 ... je ne sais pas comment c'est possible, car la le "strind" limite à 818 caractère) - voir commentaires de nerim et moi-même sur la question - rechercher la chaine 817 ou 818 sur cette page web et vous trouverez nos commentaires la dessus) - voir un de mes commentaires avec bout de programme "Commentaire de Koloco le 12/11/2008 20:16:53".
Si vous trouvez comment en envoyer 200, je suis preneur car 2 fois par mois j'envoie à 450 destinaires (environ 15 à 20 envoies les uns à la suite des autres, mais comme c'est automatique c'est pas gênant).

Question 4 : avis de remise , ne me servant jamais de cette fonction je ne peux vous répondre (et en plus je ne sais comment on fait cela sous thunderbird ???).

Bon courage pour votre code (je n'ai très peu de mérite sur ce programme, car le gros travail fut fait par Nerim)

Sub MozillaThunderbird(Let_Cpte As String)
'Initialisation des tableaux de touches pour Mozilla Thunderbird
' Choix de l'Expéditeur
TouchesExpéditeur(0) = 1 ' Nombre de touches nécessaires
TouchesExpéditeur(1) = "%x" & Let_Cpte
' Se positionne dans la fenêtre expéditeur (Alt-x) + sur le
' compte de messagerie par défaut commençant par la lettre choisie
' Pour insérer une pièce jointe
TouchesPJ(0) = 3 ' Nombre de touches nécessaires
TouchesPJ(1) = "%f" ' Appel du menu Fichier par la touche Alt-f
TouchesPJ(2) = "j" ' appel du sous-menu Joindre par la touche j
TouchesPJ(3) = "f" ' sous-sous-menu Fichier par la touche f
' Pour l'envoi du mail
TouchesEnvoi(0) = 2 ' Nombre de touches nécessaires
TouchesEnvoi(1) = "^{ENTER}" ' Envoi du message avec Ctrl-Entrée
TouchesEnvoi(2) = "{ENTER}" ' confirmation par Entrée
End Sub
grancaba Messages postés 1 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 11 mars 2013
11 mars 2013 à 08:10
bonjour
Je voudrais faire fonctionner la macro avec G Mail mais je ne sais pas comment faire quelqu'un pourrait-il m'aider s'il vous plaît
Car je désire envoyer des e-mails ou les adresses se trouvant dans des cellules différentes dans un classeur excel
Merci
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
18 mars 2013 à 11:52
Bonjour Grancaba

Le code fourni ne fonctionne qu'avec un client messagerie (outlook, thunderbird...) et non en Web-Mail. Vous devez donc paramétrer votre client messagerie pour envoyer et recevoir des mails GMail.(cela ne vous empêchera pas de continuer à utiliser GMail en Web-Mail à condition de bien définir l'option "Ne pas supprimer les messages téléchargés du serveur" quand vous définissez votre compte sur Outlook ou Thunderbird)

Voir un article qui traite de ce sujet en suivant ce lien :

http://office.microsoft.com/fr-fr/outlook-help/utiliser-outlook-avec-google-gmail-HA001148898.aspx

Attention le paramétrage pour GMail n'est pas "classique" (port POP3 995, authentification SMTP...) donc bien lire l'article...
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
20 mars 2013 à 14:50
Bonjour Grandcaba,

Le code proposé ne fonctionne qu'avec un client de messagerie tel qu'Outlook, Thunderbird ou autres. Si vous utilisez Gmail (qui est un Web Mail - accès direct à votre messagerie depuis un site).
Par contre, vous pouvez paramétrer votre client messagerie (Outlook....) pour lui permettre de d'envoyer et recevoir des mail à partir d'un compte GMail.
Attention, la configuration d'un compte n'est pas standard (port Pop3 : 995, authentification SMTP...). Pour plus de précision consulter l'article suivant :

http://office.microsoft.com/fr-fr/outlook-help/utiliser-outlook-avec-google-gmail-HA001148898.aspx

A votre service pour d'autres renseignements
Nerim
cs_inthes Messages postés 4 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 avril 2013
15 avril 2013 à 15:25
Bonjour,
avec Sub envoiEmail()
je suis sous Excel 2007, en cliquant sur envoie auto j'ai (nom@domin.xy?--le sujet du message--)
puis rien d'autre je suis intéressé par le 2 ème méthode, mais ne sais pas comment m'y prendre.
Merci d'Avance.
cs_inthes Messages postés 4 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 avril 2013
15 avril 2013 à 16:28
Re-bonjour,
concernant l'@ mail et le sujet tout va bien. Pour l'accasion je vous précise que j'utilise Outlook Web Access comme messagerie. En me connectant avec mon compte j'ai accès à au moins une trentaine de mails-admin Expéditeur et plusieurs autres mails destinataires,tout ces @ mail se trouvent dans un fichier Excel .xls, est-il possible d'indiquer l'expéditeur? de garder/rafrechir la connexion jusqu'à la fermeture l'application ?. Faire l'envoie en arrière plan, tout ceci doit se faire à partir de l'interface VB Excel. Je suis débutant.
Merci de vos conseils.
Koloco Messages postés 35 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 15 avril 2013
15 avril 2013 à 21:25
Bonjour,

pour indiquer l'expéditeur voir mon message du 14/02/2013 21:12:42.
Cela se fait par le choix du premier et uniquement du premier caractère de l'expéditeur ...

Bon courage pour la suite...
cs_inthes Messages postés 4 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 avril 2013
16 avril 2013 à 11:07
Bonjour,
merci pour votre soutien.
Comme j'ai indiqué plus haut le 2ème méthode EnvoiMailMéthodeOLE(...) est la plus adapté pour mon projet. Mais à l'exécution celui-ci bloque sur la ligne:
Set MonMail = MonAppliOutlook.CreateItem(olMailItem) "erreur d'exécution '70': permission réfusé"
pour le premier envoiAuto() l'application ouvre Outlook Web app, remplie les champs destinataire et objet c'est tout, mais n'envoie pas le mail.

A votre écoute.
cs_inthes Messages postés 4 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 avril 2013
17 avril 2013 à 16:23
Bonjour,
J'ai très peu de temps pour treminer mon stage de fin d'année, je n'ai pas de tuteur. L'entreprise utilise Office Excel 2007 et Outlook Web App (pas installer en dur) et rien d'autre donc pas d'alternative. grâce à ce forum j'ai pu envoyer un mail. Mais il faut que je sois connecté et que je laisse le navigateur ouvert.
sauf qu'il n'y a que le destinateur et l'Objet du message pour l'envoie, pas de coprs ni pièce jointe.En plus j'aimerais qu'on ai pas besoin d'ouvrir le navigateur vu qu'on doit envoyer plusieurs mails à la suite vers plusieurs destinataires différents.
je pense que la méthode OLE ne marche pas car Outlook n'est pas installé, comment contourner ce problème.Si vous avez une solution même pour la première je suis preneur.
en attente de votre aide, merci d'avance.
cs_nerim Messages postés 82 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 14 avril 2012
23 avril 2013 à 08:44
Bonjour INTHES,

Comme indiqué à Grancaba le 20/03, ce code n'est pas prévu pour fonctionner avec du WebMail (gestion du courrier à partir d'un navigateur) comme Gmail ou Outlook Web. Il nécessite l'utilisation d'un client de messagerie tel qu'Outlook, Thundebird...

De plus je crois qu'Outlook Web App est utilisé pour accéder à des comptes Exchange Server.

Je ne connais pas suffisamment Exchange pour savoir si ses comptes peuvent être gérés par un client tel que Thunderbird

Désolé de ne pas pouvoir vous aider
Nerim
Bonjour, et merci pour ce code !

Petite question : est-il possible, plutôt que de créer un nouveau mail (pose pb chez moi du fait de la taille tu texte), de sélectionner un mail préalablement enregistré dans le dossier Modèles de Thunderbird, d'y joindre la PJ et d'y renseigner les destinataires (principaux et copies) ?

Par ailleurs, j'utilise ce code sur un command_button dans excel :
EnvoiEmail Adresse:=Range("F12").Value, _
Objet:="Mon sujet", _
Corps:="Test", _
PJ:=ThisWorkbook.Path & "\SAUVEGARDE\Un fichier.xls", _
Cc:=Range("G12").Value & ";" & Range("G13").Value

Pb, ma première adresse en copie se trouve affublée de " juste avant le @...
Mais aussi, le mail est prêt à partir, mais n'est pas envoyé...

Encore merci !
Genial ....!!!!!!! Vous etes des DIEUX......ca fait une semaine que je cherche le moyen de passer a la ligne suivante dans un client de messagerie DE VBA VERS Thunderbird...CE "%0A" m'a fait suer !!!!!
BRAVO !!!!
office et excel 2013 thunderbird 31.5.0
tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 1
16 févr. 2016 à 13:51
Bonjour, à l'ouverture un message indique que le projet ou la bibliothèque est introuvable. Que dois-je activer comme bibliothèque sachant que j'utilise Thunderbird 38.6, soit la dernière version?
Hiro_ Messages postés 1 Date d'inscription mercredi 3 août 2016 Statut Membre Dernière intervention 3 août 2016
3 août 2016 à 22:28
Bonjour,

Ce code est très intéressant. Mais j'ai le même problème qu'agraeth. J'utilise Thunderbird et j'aimerais que le message s'envoi tout seul sans intervention de l'utilisateur, est-ce possible et comment faire ? Merci
Rejoignez-nous