Filtration valeur et Envoi email
Bonjour à tous,
Je me permets de vous demandez votre aide concernant un code VBA pour mon fichier que je n'arrive pas à trouver 😢
J'ai un fichier Excel de suivi journalière d'activité qui s'agrandit tout les jours contenant une colonne n°sem (colonne A) et du détails.
| N°sem | Date | Projet | Détails | Temps |
| 1 | 01/01/24 | Aaa | Ccc | 1 |
| 2 | 08/01/24 | Aaa | Ttt | 2 |
| 2 | 09/01/24 | Rrr | Yyy | 5 |
| 3 | 16/01/24 | Aaaa | Iii | 1 |
| 3 | 16/01/24 | rrr | Ooo | 3 |
| Etc.. |
Mon besoin est suite à une saisie de valeur dans une Inputbox (exemple : 2), la valeur de la ligne "1"(titre) et la liste des données contenant la valeur saisie dans la première colonne .
Exemple Résultats souhaités :
| N°sem | Date | Projet | Détails | Temps |
| 2 | 08/01/24 | Aaa | Ttt | 2 |
| 2 | 09/01/24 | Rrr | Yyy | 5 |
Et envoyer ce résultat par mail.
Pouvez vous m'aider pour la création du code?
Je vous remercie
Bonjour,
Voici une proposition de solution
J'espère que ça répond à la question
Bonne journée,
Bonjour Boshupp,
Merci pour ce retour.
Mon besoin ( désolé je viens de remarquer que je l'avais pas indiquer) et d’insérer le résultat dans le corps de l'email.
Bonjour à tous,
En reprenant le code de @Boshupp et une fonction trouvée ici : Convert Excel Range Into HTML Table Through VBA 2024
Le fichier ci-joint devrait fonctionner. Pour envoyer automatiquement le mail, dans le code VBA retirer le commentaire sur .Send.
Ci-après le code complet du module et le fichier.
Sub filtrage()
Dim ws As Worksheet
Dim valeur As String
Dim plage As Range
Dim colonne As Long
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim CheminFichier As String
' D�finir la feuille de travail
Set ws = ThisWorkbook.Sheets("Feuil1")
' Sp�cifiez la valeur � rechercher
valeur = ws.Range("J4")
' Sp�cifiez la colonne � filtrer
colonne = 1
' D�finir la plage � filtrer (ici de la ligne 2 � la ligne 100)
Set plage = ws.Range("A1:E100")
' Appliquer le filtre
ws.AutoFilterMode = False ' D�sactiver les filtres existants
plage.AutoFilter Field:=colonne, Criteria1:=valeur ' Filtrer en fonction de la valeur
If ws.Range("J4") = "" Then
ws.AutoFilterMode = False
End If
' Cr�er une instance de l'application Outlook
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0) ' 0 correspond � un email
' Créer l'email
With OutlookMail
.To = "example@email.com" ' L'adresse email du destinataire
.Subject = "Objet de votre email"
.HTMLBody = "<body> <p>Voici la feuille Excel demandée.</p>" ' Corps du message
.HTMLBody = .HTMLBody & RngToHTMLTable(Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)) ' tableau
.HTMLBody = .HTMLBody & "</body>" ' fin
.Display ' afficher l'email avant envoi
'.Send ' Envoyer l'email
End With
' Lib�rer les objets
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
'Following function converts Excel range to HTML table
'https://www.excelsirji.com/vba-code-to-convert-excel-range-into-html-table/
Private Function RngToHTMLTable(rInput As Range) As String
'Declare variables
Dim rRow As Range
Dim rCell As Range
Dim strReturn As String
'Define table format and font
strReturn = "<Table border='1' cellspacing='0' cellpadding='7' style='border-collapse:collapse;border:none'> "
'Loop through each row in the range
For Each rRow In rInput.Rows
'Start new html row
strReturn = strReturn & " <tr align='Center'; style='height:10.00pt'> "
For Each rCell In rRow.Cells
'If it is row 1 then it is header row that need to be bold
If rCell.Row = 1 Then
strReturn = strReturn & "<td valign='Center' style='border:solid " _
& "windowtext 1.0pt; padding:0cm 5.4pt 0cm 5.4pt;height:1.05pt'><b>" & rCell.Text & "</b></td>"
Else
strReturn = strReturn & "<td valign='Center' style='border:solid " _
& "windowtext 1.0pt; padding:0cm 5.4pt 0cm 5.4pt;height:1.05pt'>" & rCell.Text & "</td>"
End If
Next rCell
'End a row
strReturn = strReturn & "</tr>"
Next rRow
'Close the font tag
strReturn = strReturn & "</font></table>"
'Return html format
RngToHTMLTable = strReturn
End FunctionOh TOP!!! 👌
Merci Beaucoup
Merci pour votre retour. Bonne journée.