Envoi mail automatiquement

Bonjour,

J'ai le code suivant pour envoyer des mails a des personnes pour les notifier sur la fin de validité de quelques pièces qui les concerne, l'adresse mail de chaque personne se trouve dans les feuilles Excel range("C2") de chaque personne.

Dim Desti As String, Objet As String, Corps As String, olApp As Object
'Code permet d'afficher la fin de validté des formations 2 mois avant la fin et envoyer des
'mails aux responsable et aux personnes concernées
Sub AlertesDatesPE() 'Fin Validité des PE
Dim Sh As Worksheet, Chaine As String, Lig As Integer, Alerte
Lig = 44              ' car les dates de validité se trouvent en ligne 14
Set olApp = CreateObject("Outlook.application")
For Each Sh In ActiveWorkbook.Sheets
    If Sh.Range("A40") = "PE" Then  'ligne concernée
        Col = 2         ' car la première date de validité en en colonne B
        While Sh.Cells(Lig - 4, Col) <> ""  ' on regarde toutes les formations
            If Sh.Cells(Lig, Col) <> "" And Sh.Cells(Lig, Col) < Date + 60 Then  ' si formation et date
                ' on enrichit la chaine avec nom-date-formation
                Chaine = Chaine & Sh.Name & vbTab & "    Date: " & Sh.Cells(Lig, Col) & "   " & Sh.Cells(Lig - 1, Col) & vbCrLf

            End If
            Col = Col + 1
        Wend
        If Chaine <> "" Then Chaine = Chaine & vbCrLf
    End If
Next Sh

If Chaine <> "" Then
'MsgBox(Chaine, , "Alertes sur les dates de validit?formations.")
'  Alerte = MsgBox(Chaine, , "Alertes sur les dates de validitéformations.")
MsgBox Chaine, , "Alertes sur les dates de validité formations réglementaires."
End If
If Weekday(Now, 2) = 1 Then 'Envoi mail chaque Lundi

  Desti = "yyy"
  Objet = "Alertes sur les dates de validité des PE"
  Corps = "Bonjour, ce message est un mail automatique, il vous informe sur la fin de valdité des PE, Merci "
  EnvoiMail Desti, Objet, Corps
End If
End Sub
Sub EnvoiMail(Desti As String, Objet As String, Corps As String)
  Dim M As Object
  Set M = olApp.CreateItem(olMailItem)
  Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
Set Desti2 = Sh.Range("C2").Value 'adresse mail de la personne concernéé
  With M
    .to Desti2
    .Subject = Objet
    .Body = Corps
    .Recipients.Add Desti
    .cc = "xxx"
    .send
  End With
Next
End Sub

l'erreur est dans

Set Desti2 = Sh.Range("C2").Value 'adresse mail de la personne concernéé

il me dit incompatibilité de type donc le mail ne s'envoi pas

Que dois je modifier ?

Merci

Bonjour,

Desti2 = Sh.Range("C2").Value indique que Desti2 est une variable de type String.
Pas besoin de l'instruction Set pour y placer une valeur.

Donc, remplacez :

Set Desti2 = Sh.Range("C2").Value 'adresse mail de la personne concernéé

par :

Desti2 = Sh.Range("C2").Value 'adresse mail de la personne concernéé

J'ai fait les modifications il me dit:

Cette objet ne prend pas en charge cette méthode:

.to Desti2

Bonjour,

.to = desti2

erreur: Impossible de reconnaître un ou plusieurs personnes

est ce que c'est le faite que j'ai pas mis des adresse dans toutes les feuilles dans la cellule C2 que ca pose pb ?

Car dans chaque feuille j'ai le profil d'une personne avec l'adresse mail dans C, mais j'ai d'autre feuilles differentes ( c des listes de formations, de marchandises...)

est ce que c'est le faite que j'ai pas mis des adresse dans toutes les feuilles dans la cellule C2 que ca pose pb ?

ben ouais...

Regarde les commentaires du code suivant :

For Each Sh In ActiveWorkbook.Sheets 'dans TOUTES les feuilles du classeur
  Desti2 = Sh.Range("C2").Value 'C2 = adresse mail
  With M
    .to = Desti2 'ET BIM, j'envoie à l'adresse mail située en C2 de TOUTES les feuilles...

S'il te faut exclure des feuilles, tu peux le faire ainsi :

For Each Sh In ActiveWorkbook.Sheets 'dans TOUTES les feuilles du classeur
  If Sh.Name = "Feuil1" Or Sh.Name = "Feuil2" Or Sh.Name = "Truc" Then 'ne va agir que sur les feuilles Feuil1, Feuil2 et Truc
    Desti2 = Sh.Range("C2").Value 'C2 = adresse mail

ou alors, en excluant des feuilles :

For Each Sh In ActiveWorkbook.Sheets 'dans TOUTES les feuilles du classeur
  If Sh.Name <> "Picsou" And Sh.Name <> "Donald" Then 'ne va PAS agir sur les feuilles Picsou et Donald
    Desti2 = Sh.Range("C2").Value 'C2 = adresse mail

Ou encore, avec un Select Case, plus abordable pour un débutant :

For Each Sh In ActiveWorkbook.Sheets 'dans TOUTES les feuilles du classeur
    Select Case Sh.Name
        'ICI, les noms des feuilles, entre guillemets, qui contiennent une adresse mail en C2
        Case "Feuil1", "Picsou", "Truc", "Tomate"
            Desti2 = Sh.Range("C2").Value 'C2 = adresse mail
            With M
                .to = Desti2
                .Subject = Objet
                .Body = Corps
                .Recipients.Add Desti
                .cc = "xxx"
                .send
          End With
        Case Else
            MsgBox "La feuille : " & Sh.Name & " ne contient pas de mail en C2"
    End Select
Next

C'est bien expliqué merci, j'ai essayé celui avec select case ca fonctionne, mais moi je veux que le mail s'envoi aux personnes qui ont leur date de valdité de formation qui expire dans 2 mois et que c'a se fait automatiquement.

Mon 1er code pemet d'afficher un msg d'alerte et envoyer un mail au responsable (Desti)

 Sub AlertesDatesPE() 'Fin Validité des PE
Dim Sh As Worksheet, Chaine As String, Lig As Integer, Alerte
Lig = 44 ' car les dates de validité se trouvent en ligne 14
Set olApp = CreateObject("Outlook.application")
For Each Sh In ActiveWorkbook.Sheets
If Sh.Range("A40") = "PE" Then 'ligne concernée
Col = 2 ' car la première date de validité en en colonne B
While Sh.Cells(Lig - 4, Col) <> "" ' on regarde toutes les formations
If Sh.Cells(Lig, Col) <> "" And Sh.Cells(Lig, Col) < Date + 60 Then ' si formation et date
' on enrichit la chaine avec nom-date-formation
Chaine = Chaine & Sh.Name & vbTab & " Date: " & Sh.Cells(Lig, Col) & " " & Sh.Cells(Lig - 1, Col) & vbCrLf

End If
Col = Col + 1
Wend
If Chaine <> "" Then Chaine = Chaine & vbCrLf
End If
Next Sh

If Chaine <> "" Then
'MsgBox(Chaine, , "Alertes sur les dates de validit?formations.")
' Alerte = MsgBox(Chaine, , "Alertes sur les dates de validitéformations.")
MsgBox Chaine, , "Alertes sur les dates de validité formations réglementaires."
End If
If Weekday(Now, 2) = 1 Then 'Envoi mail chaque Lundi

Desti = "ddd"
Objet = "Alertes sur les dates de validité des PE"
Corps = "Bonjour, ce message est un mail automatique, il vous informe sur la fin de valdité des PE, Merci "
EnvoiMail Desti, Objet, Corps
End If
End Sub

Mon 2eme code: permettra d'envoyer un mail aux personnes concernées automatiquement

Sub EnvoiMail(Desti As String, Objet As String, Corps As String)
  Dim M As Object
  Set M = olApp.CreateItem(olMailItem)
  Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
Set Desti2 = Sh.Range("C2").Value 'adresse mail de la personne concernéé
  With M
    .to Desti2
    .Subject = Objet
    .Body = Corps
    .Recipients.Add Desti
    .cc = "xxx"
    .send
  End With
Next
End Sub

La je sais pas comment procéder :/ l'erreur est tjr au niveau de :

Desti2

Toujours pas de signe = après .To...

Remplacer :

.to Desti2

par :

.to = Desti2

Je l'ai modifie mais ca marche pas :/

Bonjour,

Ne reste plus qu'à nous passer un fichier anonymisé...

Voila mon fichier :

Le code est dans module 9

19test-a.zip (1.21 Mo)

Ouais...
Bon...
ça sert à quoi qu'on s'évertue "JoyeuxNoel" et moi à te répondre si tu ne fais AUCUNE des modifications que l'on te donne.

Dernier essai en ce qui me concerne, ensuite je te laisse...

Remplace ta Sub EnvoiMail, située dans ton module9 par ceci :

Sub EnvoiMail(Desti As String, Objet As String, Corps As String)
  Dim M As Object
  Set M = olApp.CreateItem(olMailItem)
  Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets
Desti2 = Sh.Range("C2").Value 'COMME DIT : ICI PAS DE Set
  With M
    .To = Desti2 'COMME DIT : ICI signe = entre To et Desti2
    .Subject = Objet
    .Body = Corps
    .Recipients.Add Desti
    .cc = "xxx"
    .display
  End With
Next
End Sub

Bonjour,

C'est gentil à toi de m'intégrer là-dedans, mais je n'ai fait qu'écrire 5 mots. Je crois que tu t'es évertué tout seul sur ce coup

Mais sache que j'admire la patience dont tu fais preuve sur chaque post que je vois. Vraiment. Chapeau !

Bonjour,

Je t'y ai mis, la-dedans, parce que tu t'y es mis seul avec tes 5 mots !

On ne refera pas le monde avec un peu de vba...

@ pijaku merci bcp pour tes efforts j'ai 2 fichiers dans mon PC je t'ai envoyer la version non modifiée, j'ai testé tout vos propositions si juste que j'ai pas joint le bon fichier...
j'ai copié ton code mais ca ne fonctionne pas je l'ai déjà teste hier, toujours le meme pb avec Desti2

toujours le meme pb avec Desti2

...
Quel est le problème?

Y a t'il un message d'erreur?

Que veux-tu à la fin?

Personnellement, j'ai ouvert ton fichier (qui a mis la pagaille dans ma config Excel au passage...), fais les 2 modifications, et ça fonctionne, je vois bien apparaître le mail si je le .Display.

Re,

J'ai ferme le fichier et je l'ai relancé bizarrement ca fonctionne maintenant

Merciiiiii bcp pour ton aide c'est très gentil de votre part, j’étais bloquée sur ca toute la journée hier Merci encore

Rechercher des sujets similaires à "envoi mail automatiquement"