Envoyer un résumé d'une partie d'un TCD par email sous forme d'un tableau

Bonjour au forum,

Je fais encore appelle à vous pour un problème de taille...

Dans un fichier qui me permet de faire un suivi de stock quotidien par importation d'une liste de données via un fichier .txt convertit par macro en .xlsx, j'aurais besoin d'en envoyer un résumé de l'état du stock du jour par email à plusieurs destinataires.

Dans le fichier .xlsm joint, en cliquant sur le bouton "Import de données", on sélectionne le fichier en .txt à convertir (joint également si besoin) en .xlsx, puis une fois la conversion terminée, on sélectionne le fichier .xlsx nouvellement crée pour que l'import se fasse.

On visualise les résultats sur les onglets TCD et/ou GCD.

Jusque là, tout va bien.

J'aimerais maintenant créer une procédure me permettant d'envoyer un résumé de ce stock par email, selon cet exemple :

GroupeDépôt 1Dépôt 2...etc.
A RhD+nombre d'itération selon le nombre de prélèvementnombre d'itération selon le nombre de prélèvementnombre d'itération selon le nombre de prélèvement
A RhD-nombre d'itération selon le nombre de prélèvementnombre d'itération selon le nombre de prélèvementnombre d'itération selon le nombre de prélèvement
...etc.nombre d'itération selon le nombre de prélèvementnombre d'itération selon le nombre de prélèvementnombre d'itération selon le nombre de prélèvement

Difficulté supplémentaire, le nombre d'itération doit être calculé uniquement concernant les codes produit = E3846V00

Pour résumer, avoir le résultat comme présenté dans l'onglet "TCD" du fichier mais uniquement pour la date du jour, et sous forme d'un tableau.

Merci d'avance pour l'aide que vous pourriez m'apporter

15stock-fof.zip (309.01 Ko)
10fof-220920.zip (13.17 Ko)

Re,

petit up pour les motivés...

Bonjour

Tu travailles avec 2007 ou 2016 ?

Tu travailles avec des paramètres régionaux anglo-saxons ?

Si 2016 tu pourrais directement importer le txt via PowerQuery et construire TCD/GCD directement sur la requête au lieu de toutes ces transformations et copie

Pour le tableau à envoyer tu peux soit le faire par PowerQuery, soit par un second TCD

Comme la date du jour n'existe pas dans le fichier, je n'ai pu appliquer le filtre

en vert PowerQuery, en bleu TCD

rhesus

Bonjour 78chris,

Merci pour ta réponse.

Tu travailles avec 2007 ou 2016 ?

Avec 2013 concernant ce fichier.

Tu travailles avec des paramètres régionaux anglo-saxons ?

Franco-suisse, si tu parles bien des paramètres de windows ?

Si 2016 tu pourrais directement importer le txt via PowerQuery et construire TCD/GCD directement sur la requête au lieu de toutes ces transformations et copie

Mon rêve.... Nous n'avons malheureusement pas PowerQuery dans l'institution, je pourrais peut-être demander à l'IT si c'est envisageable mais je suis très sceptique.

Donc pour le TCD à envoyer, tu suggères de le génèrer au moment de l'envoi du mail, ou d'avoir un autre onglet permanant reprenant les données du jour ?

RE

PowerQuery est disponible en add on sur 2013 (c'est gratuit et à télécharger chez Microsoft)

Tes dates Excel ne ont pas considérées comme des dates quand j'ouvre le fichier. D'où ma question

Le second TCD peut être permanent. Il faudra juste ajouter un bout de code pour le filtre

Merci pour ta réponse.

Option Explicit

Private Sub email()

Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem

   Set olApp = CreateObject("outlook.application")
   Set olMail = olApp.CreateItem(olMailItem)
         With olMail
            .Subject = "Suivi de Stock quotidien"
            .To = "adresse@mail.com"
            '.CC = Range("L" & Ligne) 'ou .BCC pour Cci
            .Body = "Chers collègues," & vbCrLf & vbCrLf & "Veuillez trouver ci-dessous l'état des stocks du jour, le " _
            & maDate & "." & vbCrLf & vbCrLf & Stock & vbCrLf & vbCrLf & "Bonne fin de journée !"
            .Send '.Display
         End With
End Sub

Donc si je génère un second TCD à partir de la même source (dans un onglet que j'appellerai "Résumé" par exemple), comment pourrais-je l'intégrer dans ce code pour l'envoi de l'email (dans l'hypothèse où celui-ci fonctionne) ?

PowerQuery est disponible en add on sur 2013 (c'est gratuit et à télécharger chez Microsoft)

Je contacterai l'IT demain pour savoir si c'est envisageable de l'installer.

RE

Dans ton code que je n'ai pas testé sur outlook, avec le TCD tel que sur l'image qui commence en colonne I avec les noms de dépôts en ligne 5 de Feuil2, une solution avec des tabulations

Option Explicit

Private Sub email()

Dim Ligne2 As Integer, colonne As Integer, yy As Integer, xx As Integer, DataN As Long
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Dim Messag
Dim c As Long
Dim ws As Worksheet, Tabl As String

'Verification si données pour la date du jour
DataN = WorksheetFunction.CountIfs([Data].ListObject.ListColumns("Date").DataBodyRange, ">=" & Date, [Data].ListObject.ListColumns("Date").DataBodyRange, "<" & 1 * (Date + 1))
If DataN = 0 Then Exit Sub

Set ws = Worksheets("Feuil2")
    ws.PivotTables("Tableau croisé dynamique1").PivotFields("Date").CurrentPage = Date
    yy = ws.Range("J" & Rows.Count).End(xlUp).Row
    xx = WorksheetFunction.CountA(ws.Range("K5:Q5"))
    If yy > 6 And xx >= 1 Then

   Set olApp = CreateObject("outlook.application")
   Set olMail = olApp.CreateItem(olMailItem)

    With olMail
       .Subject = "Suivi de Stock quotidien"
       .To = "adresse@mail.com"
       '.CC = Range("L" & Ligne) 'ou .BCC pour Cci

       For Ligne2 = 5 To yy
           For colonne = 9 To xx + 11
           Tabl = Tabl & ws.Cells(Ligne2, colonne).Value & IIf(colonne < xx + 11, Chr(9), Chr(10))
           Next colonne
       Next Ligne2
       .Body = "Chers collègues," & vbCrLf & vbCrLf & "Veuillez trouver ci-dessous l'état des stocks du jour, le " _
       & Date & "." & vbCrLf & vbCrLf & Tabl & vbCrLf & vbCrLf & "Bonne fin de journée !"

       .Send '.Display
    End With
      End If
End Sub

Edit : finalement j'ai retrouvé le mail dans outlook

Les tabulations nécessitent une police à pas fixe et les libellés du champ rhésus champs en étiquettes de ligne est long donc il faudrait plus de tabulations

ll y a peut-être moyen de faire un tableau mais je ne sais pas faire

Bonjour Nrev74, bonjour Chris

On pourrait aussi adopter une présentation en html sus forme de tableau

Dans ce cas, utilise

.htmlbody = "______tout_le_texte_________" & .htmlbody

pour avoir aussi ta signature en fin de mail

et transforme ta plage de données que tu veux passer en table html

Function tableauhtml(plage As Range) As String
Dim cel As Range
Set cel = plage.Cells(1, 1)
    tableauhtml = "<table>"
    For i = 1 To plage.Rows.Count
        tableauhtml = tableauhtml & "<tr>"
        For j = 1 To plage.Columns.Count
            tableauhtml = tableauhtml & "<td>" & texthtml(cel.Offset(i - 1, j - 1).Value) & "</td>"
        Next
        tableauhtml = tableauhtml & "</tr>"
    Next
    tableauhtml = tableauhtml & "</table>"
End Function

Function texthtml(texte As String)
    texthtml = ""
    For i = 1 To Len(texte)
        Select Case Asc(Mid(texte, i, 1))
        Case Is = 10
            texthtml = texthtml & "<br/>"
        Case Is = 39
            texthtml = texthtml & "&#" & Application.Trim(Str(Asc(Mid(texte, i, 1)))) & ";"
        Case Is > 127
            texthtml = texthtml & "&#" & Application.Trim(Str(Asc(Mid(texte, i, 1)))) & ";"
        Case Else
            texthtml = texthtml & Mid(texte, i, 1)
        End Select
    Next
End Function

Bonjour 78chris, Steelson,

Un tout grand merci à vous pour vos réponses. et pour le temps que vous me consacrez.

J'essaie depuis quelques jours d'avancer mais j'avoue ne pas être encore assez à l'aise avec VBA pour me débrouiller avec vos propositions

Je vais encore essayer de négocier avec mon IT pour installer Power Query, ce sera peut-être plus simple pour moi (dans l'hypothèse où son utilisation l'est, ne connaissant pas ).

Merci encore à vous

Rechercher des sujets similaires à "envoyer resume partie tcd email forme tableau"