' C'est parti :
If Not Error Then
MonMessage.Send
End If
Pour utiliser se code il faut avoir enregistré le classeur excel que tu ve envoyé. oubli pas de rajouter la référence outlook dans ta fenetre de vba outils/références/Microsoft Outlook x.0 Object library (x correspondant à la verion de ton outlook, expl 9 pour office 2000).
Voilà si tu as besoin d'info....
Jordinette
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 21 mars 2006 à 09:32
Bonjour Jordinette,
Je te remercie d'abord pour ton code qui m'a beaucoup aidé. Il me reste 2 ou 3 petits problèmes :
- une fenêtre Outlook me prévient que mon ordinateur va envoyer un mail et me demande de valider or j'aimerais ne pas avoir à valider
- je ne sais pas comment gérer les retours à la ligne, police et mise en forme du texte dans le corps du message
- j'aimerais pouvoir attacher au message toutes les pièces jointe qui commence par une séquence de lettre (plutôt qu'une seule pièce jointe)
Si tu avais des idées sur la façon de résoudre ces points je t'en serai super reconnaissant !
cs_jordinette
Messages postés134Date d'inscriptionmercredi 2 mars 2005StatutMembreDernière intervention 5 avril 2007 21 mars 2006 à 10:27
Bonjour
Concernant la fenêtre outlook qui te prévient pour l'envoi du mail et l'obligation de validé pour que cela soit fait, c'est une sécurité d'outlook je ne crois pas que tu puisses faire une validation par le code ou encore que cette fenetre ne s'affiche pas.
Si tu veux faire de la mise en page de ton mail autre que changer de ligne, je te suggère de crée un nouveau mail directement dans outlook avec la mise en forme que tu souhaites et enregistrer se mail en "modèle outlook" et d'y faire appel dans ton code au lieu de créer un mail par le code. Car par le code tu peux seulement faire des retour à la ligne (vbcrlf) ou sauter une ligne (vbcrlf & vbcrlf).
Pour joindre tes élements en fonction du début de leur nom, je dois dire que ton information est un peu vague, et pour ce que j'ai compris je ne suis pas sure que cela soit possible.
J'espère que cela t'as aidé. Je peux te donner un exemple de code d'appel de modèle de mail si tu as besoin.
bonne journée
Jordinette
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 21 mars 2006 à 16:34
Bonjour Jordinette,
Et merci pour la rapidité de ta réponse. Pour la sécu. d'Outlook, tant pis ... Pour le mail à créer en "modèle" c'est parfait car je ne savais pas comment faire, mais depuis le début c'était en fait mon objectif plus souple que le corps du message dans une cellule Excel, notamment en terme de signature. Mais je ne sais ni comment enrg. le mail en "modèle Outlook" (mais ça je devrais pouvoir trouver avec l'aide) ni comment l'appeler depuis Excel (ta proposition de code d'appel de mail est donc bienvenue !). Au sujet de mes pièces jointes multiples, voici un peu plus d'explication :
Dans ton code tu proposais d'identifier le fichier et son chemin et cela marche très bien. Maintenant j'ai un nombre variable de pièces jointes qui commence toutes, pour un même destinataire, par son nom. Je voudrais pouvoir insérer dans le code un moyen de faire attacher au mail toutes les pièces jointes qui commence par exemple par "michel". J'ai essayée de prendre le nom (commun à toutes les pièces jointes) et de faire une commande du type : chemin\michel.*.xls en espérant que comme dans une recherche l'étoile prendrait tout, mais ça marche pas ... tes suggestions sont les bienvenues.
Merci encore
Olivier
cs_jordinette
Messages postés134Date d'inscriptionmercredi 2 mars 2005StatutMembreDernière intervention 5 avril 2007 22 mars 2006 à 08:49
Bonjour,
pour créer un mail modèle dans outlook, c'est simple tu créer un mail avec le bouton Nouveau, tu rédige ton mail et au lieux d'envoyer tu choisir Ficher/Enregistrer Sous, tu lui donne un nom, tu choisis le type de ficher "Modèle outlook", puis le répertoir où tu veux le sauvegarder. Attention si tu choisis le répertoire avant le type de fichier il te remettra le répertoire "Modèle" par défaut.
'Appel du mail modèle
'envoie du mail
'Initialisation:
Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.CreateItemFromTemplate(chemin & "\mail.oft")
Set attach = MonMessage.Attachments
MonMessage.Subject = "Objet du mail"
fichier = ' là je sais pas encore comment joindre tous les fichiers qui commencent pareil mais je cherche
MonMessage.Attachments.Add fichier
' enregistrement dans Brouillon, mettre Monmessage.send pour un envoi direct (moi je préfère un envoi grouper et pouvoir vérifier depuis la boite brouillon d'outlook)
MonMessage.Save
'Fermeture de la session Outlook :
Set MonOutlook = Nothing
'effacer le contenu
MsgBox " Le mail a été généré dans le dossier Brouillons d'Outlook ! ", vbInformation
Voilà pour l'exemple, si j'ai 5 minute je vais essayé de trouver comment joindre une plage de fichier commencant par les mm lettres.
Bon courage
Jordinette
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 22 mars 2006 à 09:51
Bonjour et merci encore ...
J'avais fini par trouver pour le modèle dans Outlook, mais pas pour le code d'appel du modèle dans Excel !
En ce qui concerne mon problème de plage de pièces jointes, j'ai un début de piste un peu compliqué mais qui bugue à un endroit :
code :
For Each C In Selection
'J'ai "ROBERT" en Cellule c et mon chemin en (0,4)
MyPath = Range(C.Offset(0, 4).Address)
'je fais copier en cellule (0,5) la premières pièce jointe qui commence par "PC ROBERT"
Range(C.Offset(0, 5).Address) = Dir(Range(C.Offset(0, 4).Address) & "PC " & Range(C.Address) & "*")
'je fais une boucle pour que soient copiés successivement tous les fichiers commençant par "PC ROBERT"
'dans les 15 cellules adjacentes
For i = 6 To 15
Range(C.Offset(0, i).Address) = Dir
Next i
'ça marche, mais le problème c'est que le nbre de pièces jointes est variable et que s'il est inférieur
'à 15, Excel se met en débogage, or j'ai du code derrière à exécuter ...
Next C
Saurais-tu comment introduire un élément dans la boucle pour dire à excel que s'il ne trouve plus de pièces jointes commençant par "PC ROBERT", il arrête la boucle et passe au reste du code ?
Evidemment si tu as une solution plus simple pour gérer le groupe de pièces jointes tu es bienvenue !
Si je peux me permettre d'abuser de ton temps, j'ai une autre question : quand sous vba je convertis des doc excel en pdf en passant par l'impression sur acrobat distiller, je dois systématiquement valider l'enregistrement du fichier sous Adobe en cliquant sur oui, saurais-tu comment automatiser cette valisation ?
cs_jordinette
Messages postés134Date d'inscriptionmercredi 2 mars 2005StatutMembreDernière intervention 5 avril 2007 22 mars 2006 à 11:36
Re,
J'ai trouvé plus simple, je planche dessus pour l'adapter au morceau de code que je t'ai donné précédement... Tu sais dans quels dossiers tes fichiers a joindre se trouvent? où tu veux qu'il cherche sur tout les disque durs? et tout type de fichier? ou seulement .xls?
j'espère te donner la soluce dans l'après midi ;o)
Jordinette
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 22 mars 2006 à 11:48
Bravo ! car je progresse mais il me reste juste cet obstacle ...
Pour te répondre, je sais dans quel dossier sont les fichiers, et je cherche tout type de fichier car j'ai du .xls., du .pdf et éventuellement du .doc
Merci beaucoup !
Olivier (et je guette ta réponse ;-))
cs_jordinette
Messages postés134Date d'inscriptionmercredi 2 mars 2005StatutMembreDernière intervention 5 avril 2007 22 mars 2006 à 13:48
Ayé j'y arrive!
Parcontre pour cà:
"Si je peux me permettre d'abuser de ton temps, j'ai une autre question : quand sous vba je convertis des doc excel en pdf en passant par l'impression sur acrobat distiller, je dois systématiquement valider l'enregistrement du fichier sous Adobe en cliquant sur oui, saurais-tu comment automatiser cette valisation ?" Je ne sais pas du tout, mais je dirai que c'est du même ordre que pour la sécurité outlook précédement évoqué. ou tu as peut etre une solution du genre Monapp.Mondocument.save. Car sur Excel si tu veux évité qu'il te demande de sauvegarder ton classeur quand tu le fermes, si tu mets dans ton code juste avant le MonExcel.close une ligne MonExcel.activeworkbook.save la confirmation de sauvegarde n'est pas demandé.
Pour la solution voici le code dont je me suis servi:
Private Sub CommandButton1_Click()
chemin = "C:\Documents and Settings\user\Mes documents" 'chemin du dossier contenant le modèle de mail
'Appel du mail modèle
'envoie du mail
'Initialisation:
Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.CreateItemFromTemplate(chemin & "\mail.oft")
Set attach = MonMessage.Attachments
MonMessage.Subject = "Objet du mail"
CheminEtNomDuFichierTrouver = ""
'trouve tous les fichiers commencant par "test"
With Application.FileSearch
.NewSearch
.LookIn = "C:" 'séparer par des ; si plusieurs répertoires
.Filename = "test*.*" 'séparer par des ; si plusieurs références de recherche
.FileType = msoFileTypeAllFiles
.LastModified = msoLastModifiedAnyTime
.SearchSubFolders = True
'C'est parti :
.Execute
If .FoundFiles.Count <> 0 Then 'boucle qui permet si il y a un ou plusieurs fichier de les ajouter au mail
For Ctr = 1 To .FoundFiles.Count
CheminEtNomDuFichierTrouver = .FoundFiles(Ctr)
MonMessage.Attachments.Add CheminEtNomDuFichierTrouver 'ajout du fichier trouvé
Next
Else
'mettre un appel vers la procédure suivante ou un exit sub
End If
End With
' enregistrement dans Brouillon, mettre Monmessage.send pour un envoi direct (moi je préfère un envoi grouper et
'pouvoir vérifier depuis la boite brouillon d'outlook)
MonMessage.Save
'Fermeture de la session Outlook :
Set MonOutlook = Nothing
'effacer le contenu
MsgBox " Le mail a été généré dans le dossier Brouillons d'Outlook ! ", vbInformation
End Sub
Attention: si tu demande au programme de chercher dans tout C:/, ça va mouliner un max, donc il se peut qi tu a beaucoup de fichiers qu'il mette jusqu'à 5 min ou plus pour te généré le mail et y coller les pièches jointes!
voilà bon courage et hésite pas à redemander si les choses ne sont pas assez claire ;o)
Jordinette
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 22 mars 2006 à 14:13
Génial !!
Merci encore pour tout le temps passé et la rapidité de tes réponses, ça va me permettre de bien rationnaliser les choses car je dois régulièrement faire ce type d'envoi pour une centaine de personnes, or à la main c'était vraiment fastidieux !
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 22 mars 2006 à 18:52
Bonsoir Jordinette,
J'ai un dernier petit souci ... en effet tu as vu que j'avais fait un "For each c in selection" pour pouvoir faire une boucle. Or tout fonctionne impeccable sauf que dans mes brouillons, au lieu de mettre tous les mails les uns après les autres, il les écrase. Quand je sélectionne plusieurs c, je n'ai donc en brouillon que le dernier (mais j'ai pu voir défiler tous les autres en me mettant sur Outlook pendant la macro.
Saurais-tu comment faire pour éviter l'écrasement ? et que j'ai bien mes 10 mails plutôt que seulement le dernier quand je sélectionne 10 personnes ?
A tout hasard je te mets mon code complet pour que tu aies une vue d'ensemble :
Sub Envoi
Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.CreateItemFromTemplate("P:\1-Gestion\Modèles mails" & Range("C1"))
Set attach = MonMessage.Attachments
For Each c In Selection
MonMessage.To = Range(c.Offset(0, 1).Address)
'TROUVE LES FICHIERS COMMENCANT PAR LA MEME SERIE DE LETTRES
CheminEtNomDuFichierTrouver = ""
With Application.FileSearch
.NewSearch
.LookIn = (Range("C2"))
.Filename = "PC " & Range(c.Address) & "*" '"test*.*" 'séparer par des ; si plusieurs références de recherche
.FileType = msoFileTypeAllFiles
.LastModified = msoLastModifiedAnyTime
.SearchSubFolders = True
.Execute
If .FoundFiles.Count <> 0 Then 'boucle qui permet si il y a un ou plusieurs fichier de les ajouter au mail
For Ctr = 1 To .FoundFiles.Count
CheminEtNomDuFichierTrouver = .FoundFiles(Ctr)
MonMessage.Attachments.Add CheminEtNomDuFichierTrouver 'ajout du fichier trouvé
Next
Else
MsgBox " Il n'y a pas de pièce jointe correspondant à cet auditeur ! ", vbInformation
Exit Sub
End If
End With
MonMessage.Save
'Monmessage.send pour un envoi direct
'Fermeture de la session Outlook :
Set MonOutlook = Nothing
'effacer le contenu
'MsgBox " Le mail a été généré dans le dossier Brouillons d'Outlook ! ", vbInformation
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 23 mars 2006 à 08:10
Bonjour Jordinette,
Je viens de m'apercevoir que mon problème était juste liée à la position du "For each c in selection", ne tiens donc pas compte de mon message précédent.
marinolive
Messages postés13Date d'inscriptionmardi 21 mars 2006StatutMembreDernière intervention 3 janvier 2011 27 avril 2006 à 18:34
Bonsoir Jordinette,
N'ayant pas trouvé la solution sur internet, je me tourne une nouvelle fois vers toi ! Voici mon problème :
J'ai un fichier excel dont le nombre d'onglet est variable. Et je souhaite sélectionner plusieurs onglets : du 7° au dernier. Or soit je peux utiliser un sheets(array(... mais il faut fournir la liste exacte des onglets (que je n'ai aps puisqu'elle varie) soit je fais un sheets.select mais il me les sélectionne tous ...