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

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

  • RELANCE_CIRCUITS.xlsm
    31.8 KB · Affichages: 16

fanch55

XLDnaute Barbatruc
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:

Maya6508

XLDnaute Nouveau
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.
 

fanch55

XLDnaute Barbatruc
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 ?
 

Maya6508

XLDnaute Nouveau
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.
 

Maya6508

XLDnaute Nouveau
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.
 

Discussions similaires

Réponses
7
Affichages
538
Réponses
2
Affichages
586

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 106
dernier inscrit
pop ioana