Trier données Tableau + Envoie Email

Bonjour à tous,

Je me lance dans un nouveau projet VBA et avant de commencer (ou plutôt continuer) à écrire des lignes et des lignes de codes, j’aimerais votre avis sur la structure vers laquelle je devrais m’orienter pour ce que je cherche à réaliser.

Chaque semaine je mets à jour 3 tableaux créés à partir de PowerQuery (dans la feuille « Results »).

Je dois ensuite envoyer les résultats de ces 3 tableaux aux différents groupes de personnes pouvant être concernées, sachant qu’il y a maximum 8 groupes (listés dans la feuille « Contact »), donc 8 emails différents à créer maximum.

(Les groupes concernés sont listés dans chaque première colonne des tableaux).

Question : Comment devrais-je structurer ma macro selon vous ?

Les options auxquelles j’ai pensé :

Option 1 :

Copier les données dans une feuille « Email Report » avec pour critère le premier groupe.

Une fois les 3 tableaux créés, copier ces trois tableaux dans un email pour le groupe concerné.

Envoyer l’email, effacer les données créées dans la feuille « Email Report ».

Passer au groupe suivant.

C’est ce que j’ai commencé à coder (et que vous pouvez-voir dans l’Excel attaché).

L’avantage ici c’est que ce soit entièrement automatisé, mais j’ai peur que la macro soit vraiment longue à faire tourner au final.

Option 2:

Idée similaire, mais copier directement les données dans 8 feuilles Excel différentes afin de n'avoir "que" 3 loops, une pour chaque tableau.

Option 3 :

Ajouter des étapes manuelles.

Une liste déroulante pour appliquer un même filtre aux trois tableaux, une macro lié à un bouton pour envoyer l’email avec ce qui s’affiche après que le filtre ait été appliqué.

En Option : afficher quels sont les groupes concernés par les rapports.

Je précise que les emails envoyés seront au format html (un exemple est ajouté à l’email).

Bien entendu, je suis ouverte à toutes les autres méthodes auxquelles vous penseriez.

Merci d’avance pour vos avis .

Bonne après-midi et bon weekend,

Laetitia.

Bonjour Laetitia,

Nous avons toujours avantage à réduire au minimum les lignes de code. Sur ce principe, je te propose quelque chose du genre :

Sub SendAllEmails_GVS()
    Dim oRangeContacts As Range
    Dim oContact As Range

    'Au préalable, il faut avoir donné un nom à la plage contenant les eMail/CSGroup: ici "Contacts"
    Set oRangeContacts = ThisWorkbook.Names("Contacts").RefersToRange

    'On parcourt toutes les lignes de contacts
    For Each oContact In oRangeContacts.Rows
        'On copie les tableaux pour le contact
        CreateOutlookReport_GVS oContact.Cells(1, 2)
    Next
End Sub
Sub CreateOutlookReport_GVS(zCSGroup As String)
    Dim ReportSheet As Worksheet
    Dim oListObjects As ListObjects
    Dim oListObject As ListObject
    Dim oRangeToCopy As Range

    Set ReportSheet = ThisWorkbook.Worksheets("Results")
    Set oListObjects = ReportSheet.ListObjects

    'On parcourt tous les objets de la feuille
    For Each oListObject In oListObjects
        'On applique le filtre en prenant la valeur passée dans le paramètre zCSGroup
        oListObject.Range.AutoFilter Field:=1, Criteria1:=zCSGroup
        'On copie les lignes sélectionnées du tableau
        Set oRangeToCopy = oListObject.Range.SpecialCells(xlCellTypeVisible)
        oRangeToCopy.Copy
        '.....
    Next
End Sub

Dans ce code il manque toutes les séquences de mise en forme et d'envoi des mails HTML. Pour t'aider dans cette tâche je te suggère le site incontournable de Ruin de Bruin : www.rondebruin.nl

Bien à toi,

Gérard

Super ! Merci beaucoup pour ta réponse!

Je vais suivre tes instructions pour construire la macro !

J'essaie de faire quelque chose de fonctionnel et je reposterai le résultat final ici avant de fermer le topic.

Encore Merci !

Bonjour à tous,

Comme promis je reviens avec la version finale de ma macro.

Encore merci infiniment pour le code de départ que tu m'as donné Gérard.

Cela m'a bcp donné et il en va de même pour le lien vers le site rondebruin qui m'a également été très utile.

J'ai essayé d'être le plus explicite possible avec les commentaires dans la macro mais si quelque chose n'est pas clair, n'hésitez pas.

Pour information, le but de cette macro était de :

Extraire de 3 tableaux distinct la liste des personnes (groupe de travail) concernées par les résultats dans les tableaux (les groupes ayant tous été identifiés dans la première colonne des trois tableaux).

Une fois cette liste identifiée, envoyer à chaque personne les lignes des tableaux les concernant uniquement, et envoyer ces 3 tableaux nouvellement créés par email.

Pour plus de simplicité j'ai réuni ces 3 tableux nouvellement créés dans une feuille temporaire que j'envoie en pièce jointe de mon email.

Evidemment si vous voyez des points d'amélioration dans la macro je suis preneuse. J'en apprends tous les jours

Pour information, normalement on est sensé pouvoir insérer la signature automatique avec les trois lignes de codes suivantes mais j'obtiens de mon côté un object error qui je pense est lié à mon set up interne :

Dim MailBody As String Set MailBody = "Dear CS," & _ "<br><br>Please see attached today's report regarding discrepancies between NOG and AV system for your actions." & _ "<br><br>Thank you and kind regards,<br>" . HTMLBody = MailBody & "<br>" & .HTMLBody

La Macro finale est vraaaaaiment longue donc je ne la colle pas dans la conversation mais elle est disponible via le fichier en pièce jointe.

Encore merci Gérard pour ton aide !!

Très bonne continuation à toi et à toutes les personnes sur ce Forum !

Laetitia.

Rechercher des sujets similaires à "trier donnees tableau envoie email"