XL 2016 Envoi d'un mail : destinataires selon valeur d'une colonne

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Maya6508

XLDnaute Nouveau
Bonjour,

J'ai eu beau chercher dans les forums, tutos... je n'arrive pas à trouver la solution finale à mon projet qui me sert à faire des relances à des groupes de personnes par mail.

Autant je connais très bien Excel, autant je ne suis pas très forte avec le VBA.

Je souhaite envoyer un mail en sélectionnant une plage dans Excel qui vient se positionner dans le corps du message. Ca, pas de problème. Depuis ma feuille 1 "Tâches", j'effectue des filtres dans la colonne D (nom des groupes), je sélectionne ma plage à afficher dans le corps du message en incluant les entêtes de colonnes, puis exécute la macro pour l'envoi. Jusque là, ça marche.

Là où je coince :
J'ai une liste de destinataires dans un deuxième onglet "Destinataires" où il y a :
- en colonne A : le nom des groupes, (que l'on retrouve dans la feuille "Tâches", dans la colonne D, faisant partie de ma plage sélectionnée)
- en colonne G les adresses mail.

Je ne sais pas comment faire pour demander à Excel d'aller chercher, dans l'onglet "Destinataires", les adresses mail correspondantes au groupe filtré dans la feuille "Tâches" et de les mettre en destinataires. Le nombre de destinataires est variable.

Je mets un fichier exemple à toutes fins utiles.

Si une âme charitable pouvais m'aider, je lui en serais très reconnaissante.
 

Pièces jointes

Bonjour,
A tester :
VB:
Option Explicit
Sub Test()
    MsgBox Replace(listeMails, ";", vbLf)
End Sub

Function listeMails() As String
    Dim Id0     As Integer
    Dim Id1     As Integer
    Dim M       As Variant
    Dim T0      As ListObject: Set T0 = [Résultatdexportduneliste3].ListObject ' Table feuille Taches
    Dim T1      As ListObject: Set T1 = [Résultatdexportduneliste].ListObject  ' Table feuille Destinataire
   
    On Error Resume Next
    Id0 = T0.ListColumns("Affectée à").Index                ' Index de la colonne "Affectée à"
    Id1 = T1.ListColumns("Code").Index                      ' Index de la colonne "Code"
    M = T1.ListColumns("Adresse de messagerie").Index      ' Index de la colonne des E-Mails
   
    If T0.AutoFilter.Filters(Id0).On Then                   ' Filtre en amont
        Select Case T0.AutoFilter.Filters(Id0).Count        ' On filtre
            Case 1
                T1.Range.AutoFilter Field:=Id1, _
                    Criteria1:=T0.AutoFilter.Filters(Id0).Criteria1
            Case 2
                T1.Range.AutoFilter Field:=Id1, _
                    Criteria1:=T0.AutoFilter.Filters(Id0).Criteria1, _
                    Criteria2:=T0.AutoFilter.Filters(Id0).Criteria2, _
                    Operator:=T0.AutoFilter.Filters(Id0).Operator
            Case Else
                T1.Range.AutoFilter Field:=Id1, _
                    Criteria1:=T0.AutoFilter.Filters(Id0).Criteria1, _
                    Operator:=T0.AutoFilter.Filters(Id0).Operator
        End Select
    End If
   
    M = WorksheetFunction.Transpose(T1.DataBodyRange.Columns(M).SpecialCells(xlCellTypeVisible).Value)
   
    Select Case True
        Case Err <> 0:                                          ' Pas de lignes filtrées
        Case VarType(M) = vbString: listeMails = M              ' une seule ligne
        Case Else:                  listeMails = Join(M, ";")   ' plusieurs lignes
    End Select
   
    T1.Range.AutoFilter Field:=Id1                           ' on enleve le filtre
         
End Function
 
Dernière édition:
Bonjour franch55,

Merci pour votre aide.
Cela marche bien dans le fichier exemple, mais quand j'ai voulu importer toutes mes données, ça ne marche plus.
Je pense que j'ai oublié de dire que le nombre de lignes est variable pour les deux onglets.
Actuellement, j'ai 320 lignes pour les tâches et 350 lignes pour les destinataires que j'ai pourtant collées dans les plages nommées.
Pensez-vous pouvoir faire quelque chose ?
Merci par avance.
 
Bonjour Maya,
le nombre de lignes des deux feuilles est sans incidence sur la macro .
(J'ai dupliqué les lignes du fichier fourni --> 300 lignes pour chaque table --> ok )

Quand vous dites que cela ne marche pas,
c'est la liste des destinataires qui n'est pas conforme
ou y-a-t-il un plantage et en ce cas quel est le message ?
 
Bonsoir Fanch55,

Tout marche à merveille.
Il y une image en bas de ma signature qui n'apparaît pas "nous ne pouvons pas afficher l'image", mais ce n'est pas grave.

Encore merci. Ce que vous avez fait, c'est vraiment super de votre part.

Je suis sûre que cela servira pour plein d'autres personnes.

Encore bravo !

Une très bonne soirée.
 
Bonjour Franch55,

Je reviens sur notre échange car j'ai un petit souci.

Tout marchait parfaitement jusqu'à maintenant. Ca me sert énormément tous les jours.

Par contre, maintenant, lorsque je filtre des groupes qui ne se suivent pas, il ne va chercher que les mails des groupes qui se suivent. Je m'explique : si je filtre les groupes 1, 2 et 4, il va chercher dans la liste des destinataires les personnes faisant partie des groupes 1 et 2 (la liste dans le corps du mail est correcte), et ma signature (qui finalement s'affichait) ne s'affiche plus.

Mon entreprise a installé sur mon poste le merveilleux "Microsoft 365". C'est depuis ce jour-là que ça ne marche plus. Cela a-t-il une incidence sur le code ?

Je te remercie pour ton retour et le temps que tu pourras m'accorder, ce document m'étant super utile.

Bonne journée.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
355
  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
817
Réponses
2
Affichages
809
Réponses
1
Affichages
385
Compte Supprimé 979
C
Retour