Olmail à différentes personnes en meme temps

j'obtiens ceci, est-ce que c'est ce que tu veux ?

fichier       :             FH (Acronym)-P2-Frédéric Nom1 (PP)-vierge.xlsm
destinataires :             Frédéric.Nom1@mail.fr;

fichier       :             FH (Acronym)-P2-Rosa Nom2 (PP)-vierge.xlsm
destinataires :             Frédéric.Nom1@mail.fr;Rosa.Nom2@mail.fr;

sinon je me demandes s'il ne faut pas ajouter destinataires="" dans la boucle

un conseil : améliore l'indentation, tu étais bien parti mais parfois ce n'est pas carré

j'ai intégré vos correctifs, merci mais j'ai désormais une erreur pour la 2 ème personne : l'indice n'appartient pas à la sélection...

euh non ce que je souhaite c'set tout dans un même mail

fichier : FH (Acronym)-P2-Rosa Nom2 (PP)-vierge.xlsm

FH (Acronym)-P2-Frédéric Nom1 (PP)-vierge.xlsm

desinataires: Frédéric.Nom1@mail.fr;Rosa.Nom2@mail.fr;

Donc les erreurs d'indice et de syntaxe étant corrigées, il faut revoir la position des boucles !

j'ai intégré vos correctifs, merci mais j'ai désormais une erreur pour la 2 ème personne : l'indice n'appartient pas à la sélection...

voici mon fichier, mais avec neutralisation de outlook avec lequel je ne travaille plus

faire Ctrl+G dans l'éditeur de macro pour observer le résultat

5test.xlsm (23.88 Ko)

je vais regarder maintenant le dernier point

Le code est un peu confus

Regarde si ceci te donne le résultat que tu souhaites

Sub Grant_Reminders()

Dim spS As Worksheet
Dim spP As Range
Dim la As Range
Dim tblReport() As Variant
Dim project_ID As Variant
Dim period_ID As Variant
Dim acronym_Row As Variant
Dim acronym As Variant
Dim prem As String
Dim i As Long
Dim n As Long

' ajout
Dim destinataires As String, result, destination, fichier
' fin ajout

' ====erreur ici ========
'ReDim mailing(1 To 1)               'Déclaration d'un tableau dynamique (donc redimensionnable)
Dim mailing()
' fin ===================

Const decalage As Integer = 7       '(de A à H)
Const tableName$ = "T_Reports"
Dim nb_persons As Integer

Dim Ol As New Outlook.Application
Dim Olmail As MailItem
Set Ol = New Outlook.Application
Set Olmail = Ol.CreateItem(olMailItem)
Dim CurrFile As String

  tblReport = Worksheets("Reporting").Range("A1").CurrentRegion.Value

  For i = 2 To UBound(tblReport) ' on ne prend pas les en-têtes
    If tblReport(i, 7) > Now And tblReport(i, 7) <= Now + 55 And tblReport(i, 10) = "N" Then

' ajout
      n = 0
' fin ajout

      project_ID = tblReport(i, 1)
      period_ID = tblReport(i, 2)
      acronym_Row = Application.Match(project_ID, Worksheets("Projects").Range("A:A"), 0)
      If Not IsError(acronym_Row) Then
        acronym = Worksheets("Projects").Cells(acronym_Row, 3).Value
        Set spS = ThisWorkbook.Worksheets("Staff")
        Set spP = spS.Range("A1:A" & spS.Range("A" & Rows.Count).End(xlUp).Row)
        With spP
          Set la = .Find(project_ID, LookIn:=xlValues)
          If Not la Is Nothing Then
            prem = la.Address
            Do
              If la.Offset(0, decalage) = period_ID Then
                n = n + 1
                ReDim Preserve mailing(1 To n)   'Redimentionnement du tableau (ne pas typer)
                mailing(n) = spS.Cells(la.Row, 4).Value & "/" & spS.Cells(la.Row, 3).Value & "/" & acronym & "/" & period_ID
              End If
              Set la = .FindNext(la)
            Loop While la.Address <> prem
          End If
        End With
      End If
    End If
  Next i

  If n = 0 Then
    MsgBox "mailing est vide"
  Else

    destinataires = ""
    For i = 1 To UBound(mailing)
      result = Split(mailing(i), "/")
      destinataires = destinataires & result(0) & "." & result(1) & "@mail.fr;"
    Next

    With Olmail
      .To = destinataires
      .Subject = "Grant Office Reminders"
      .body = "Projet: " & result(2) & vbCrLf & vbCrLf & "Fin de période: " & fin_periode & vbCrLf & vbCrLf & "Période concernée: " & result(3) & vbCrLf & vbCrLf & "Ceci est un mail automatique de mon fichier de suivi."
      For i = 1 To UBound(mailing)
        result = Split(mailing(i), "/")
        destination = ThisWorkbook.Path & "\Projects_Library\" & result(2) & "-" & project_ID & "\Reporting\"
        fichier = "FH (" & result(2) & ")-P" & result(3) & "-" & result(0) & " " & result(1) & " (PP)-vierge.xlsm"
        .Attachments.Add (destination & fichier)
      Next
      .DeleteAfterSubmit = True
      .Send
      .display
    End With

  End If

End Sub

regarde comment les fichiers multiples ont été ajoutés

Bonjour Steelson,

merci pour le temps passer sur mon soucis et l'aide apportée

En effet, cela me génère bien le mail avec les pièces jointes requises.

je vais désormais devoir éplucher cela pour comprendre les modifications

Je trouve que tu t'attaques trop directement quand tu écris un code. Même moi j'y vais encore pas à pas avec des debug.print pour bien comprendre ce qui se passe ...

Bon courage pour la suite !

merci.

pour etre honnete je n'ai jamais employé cela mais j'ai pris conscience que cela pourrait être utile pour suivre étapes par étapes

faut-il avoir cela pendant le codage ou également le conserver en cas de débogage nécessaire plus tard pour information et selon votre expérience?

je fais des debug.print au moment du codage, ensuite je les enlève ou je les mets en commentaire car cela ralentit beaucoup la macro

je ne sais pas comment font les autres mais il doit y avoir d'autres méthodes plus performantes

ok merci à toi. pour ton retour

bonne journée

Bonjour Steelson

Désolé de vous re-déranger pour ce sujet pourtant clôturé

le script est 100% fonctionnel mais rencontre un soucis .

En effet en ce moment j'ai deux projets pour lesquels un mail doit être envoyé

La première partie du script voit bien les deux projets mais le code est fait pour ne générer qu'un seul mail (normal en dehors d'une boucle)

Aussi comment procéder afin que plusieurs mails puissent être générés?

on sait que n>0 et que mailing contient bien les infos

c'est juste que je ne vois pas comment mettre Olmail dans une boucle (sachant que staff est pour lister le personnel dans le contenu de l'email

si je tente de mettre next apres le end with ca ne génère pas pour autant de deuxième mail

  If n = 0 Then
    MsgBox "mailing est vide"
  Else

    destinataires = ""
    For i = 1 To UBound(mailing)
      result = Split(mailing(i), "/")
      destinataires = destinataires & result(0) & "." & result(1) & "@mail.fr;"
      Staff = Staff & "- " & result(0) & " " & result(1) & "<br>"
 Next

    With Olmail
      .To = destinataires
      .Subject = "Grant Reminders"

      .HTMLBody = "mon contenu de mail"

        destination = ThisWorkbook.Path & "\Projects_Library\" & result(2) & "-" & Project_ID & "\Reporting\"
        fichier = "FH (" & result(2) & ")-P" & result(3) & "-" & result(0) & " " & result(1) & " (PP)-vierge.xlsm"
        .Attachments.Add (destination & fichier)

      .DeleteAfterSubmit = True
      '.Send
      .display
    End With

      End If

merci par avance pour votre soutien.

Bonne journée

As-tu un fichier plus conséquent que le premier avec plusieurs cas ?

non mais je vais essayer d'en faire un si besoin

Voici le fichier test avec 2 projets exemple

on voit bien que 2 projets sont bien reconnus mais qu'un seul mail pour l'1 des projets est généré

merci par avance pour ton aide

7test.xlsm (24.09 Ko)

Essaie comme ceci (pas essayé car je ne travaille plus avec outlook)

J'ai déplace le next i et remplacé i par j pour le mailing

8test.xlsm (18.77 Ko)

merci pour ton retour mais toutefois cela ne fonctionne pas. :(

Tout d'abord il y a un msgbox mailing vide

puis après ca génère un mail que pour le 2ème projet et le 1er est oublié

je vais triturer le code pour le tester chez moi en occultant tout ce qui est outlook

merci par avance

j'ai par ailleurs une dernière demande complémentaire

je récupère en complément les Work-packages et délivrables des projets

j'ai pris des id différents pour m'assurer d'avoir des données

'on récupère la liste des Work-packages du projet
With Worksheets("WorkPackages").ListObjects(1)
Project_ID = 25
    Tbl = .ListColumns("Id_Project").Range

        Set d = .ListColumns("Id_Project").Range.Find(what:=Project_ID, LookIn:=xlValues, LookAt:=xlWhole)
        If Not d Is Nothing Then
            nbr = Application.Count(Application.Match(Tbl, Array(Project_ID), 0))
            Set WP_Array = d.Resize(nbr, 3)
End If
End With

'on récupère la liste des Deliverables du projet
With Worksheets("Deliverables").ListObjects(1)
Project_ID = 32
    Tbl = .ListColumns("Id_Project").Range

        Set d = .ListColumns("Id_Project").Range.Find(what:=Project_ID, LookIn:=xlValues, LookAt:=xlWhole)
        If Not d Is Nothing Then
            nbr = Application.Count(Application.Match(Tbl, Array(Project_ID), 0))
            Set Del_Array = d.Resize(nbr, 3)
End If
End With

ma question est désormais de savoir comment procéder afin de les afficher dans mon mail

sachant que j'arrive à récupérer les contenus en dehors du mail mais je ne vois pas comment les insérer dedans

exemple

Count_del = Application.Count(Del_Array)

For x = 1 To Count_del
If (x <= Count_del) Then
MsgBox ("Del " & Del_Array.Cells(x, 3))
End If
Next

de sorte a avoir

titre du WP te deliverables en dessous... a terme

mais comment les insérer dans HTMLBody?

.HTMLBody = "Bonjour, ." & _

"<br><br><b>Liste des WP:</b><br><br> "

merci si tu peux aussi m'éclairer là dessus

Rechercher des sujets similaires à "olmail differentes personnes meme temps"