Création d'un filtre dans une macro sur un tableau

Bonjour,
J'ai créé une macro permettant d'envoyer un tableau par mail. J'ai tout fait par internet mais là je bloque.
Je souhaiterais créer un filtre sur ce tableau pour les valeurs vides ou étant égal à "En attente" dans la colonne G (commençant en G7).
Ainsi, le tableau qui serait envoyé n'aurait que ces valeurs filtrées.

Merci d'avance pour votre aide.

Sub Envoyer_un_tabeau_V2()

'
'Déclaration de la variable

Dim MaFeuille As Worksheet
Dim NbLigne As Integer

'Affectation des variables
Set MaFeuille = ThisWorkbook.Sheets("Réunion de perf")

'Desactivation du raffaichissement de l'écran
Application.ScreenUpdating = False

'On calcule le nombre de ligne à prendre
NbLigne = MaFeuille.Range("C" & Application.Rows.Count).End(xlUp).Row

'On selectionne la plage à copier
MaFeuille.Range("C1:H" & NbLigne).Select

'Avec l'object Mail
ActiveWorkbook.EnvelopeVisible = True
With Selection.Parent.MailEnvelope
With .Item
.To = MaFeuille.Range("D2").Value
.CC = MaFeuille.Range("D3").Value
.Subject = MaFeuille.Range("C5").Value
.Send

End With
End With

MsgBox "Votre Email a bien été envoyé.", vbInformation + vbOKOnly, "CONFIRMATION ENVOI SUJETS SOUHAITANT ÊTRE ABORDÉS"

Application.ScreenUpdating = True

Range("A1").Select

End Sub

Bonjour,

Je n'ai pas réussi a reprendre ta methode sans avoir un message d'erreur qui empeche l'envoi du mail car "lignes masquées".
Donc une autre solution avec l'outil de Bruno [Fichier - Envoi de mail]

Tu peux avoir un truc comme ça : (nom du tableau defini ici => "Tab_Donnee")

Option Explicit

' Codes collectés et modifiés par BrunoM45
' https://forum.excel-pratique.com/membre/15789
' https://www.excel-pratique.com/fr/telechargements/utilitaires/pdf-email-vba-excel-no508

' Constante type d'élément Outlook (pour le late binding)
Const olMailItem As Integer = 0
' Constantes Formats de l'email
Const olFormatHTML As Integer = 2

Sub Envoyer_un_tabeau_V2()

RangeInBodyMail

MsgBox "Votre Email a bien été envoyé.", vbInformation + vbOKOnly, "CONFIRMATION ENVOI SUJETS SOUHAITANT ÊTRE ABORDÉS"
Range("A1").Select

End Sub

' Ce code permet d'intégrer une plage donnée dans le corps d'un mail
Sub RangeInBodyMail()
  Dim Rng As Range
  Dim OutApp As Object, OutMail As Object
  Dim StrHTML As String, StrSignature As String
  Dim MaFeuille As Worksheet
  Dim NbLigne As Integer
  ' Définir la plage des cellules uniquement visibles
  On Error Resume Next
    Set MaFeuille = ThisWorkbook.Sheets("Réunion de perf")
    'On calcule le nombre de ligne à prendre
    NbLigne = MaFeuille.Range("C" & Application.Rows.Count).End(xlUp).Row
    'On supprime les tri et filtre par "En attente" et ""
    MaFeuille.ListObjects("Tab_Donnee").Range.AutoFilter Field:=7
    MaFeuille.ListObjects("Tab_Donnee").Range.AutoFilter Field:=7, Criteria1:="En attente", Operator:=xlOr, Criteria2:=""
    'On selectionne la plage à copier
    Set Rng = MaFeuille.Range("C1:H" & NbLigne).SpecialCells(xlCellTypeVisible)

  On Error GoTo 0
  If Rng Is Nothing Then
    MsgBox "Il ya eu un problème lors de la définition de la plage"
    Exit Sub
  End If
  ' Avec l'application
  With Application
    .EnableEvents = False ' Désactiver les évènements
    .ScreenUpdating = False ' Désactiver le rafraichissement
  End With
  ' Créer une instance Outllok et Mail
  Set OutApp = CreateObject("Outlook.Application")
  Set OutMail = OutApp.CreateItem(olMailItem)
  With OutMail
    .BodyFormat = olFormatHTML  ' Format HTML
    .Display  ' Afficher le mail pour la signature (si insertion auto)
    ' Mémoriser le code HTML avec la signature
    StrSignature = .HTMLBody
    .To = MaFeuille.Range("D2").Value '"LeDestinataire@fai.fr"
    .CC = MaFeuille.Range("D3").Value '"LaCopie@fai.fr"
'    .BCC = "LaCopieCachee@fai.fr"
    .Subject = MaFeuille.Range("C5").Value '"Plage de la feuille"
'    StrHTML = "Bonjour, <br>" _
      & "Vous trouverez ci-joint l'état de ce jour"
    .HTMLBody = StrHTML & RangetoHTML(Rng) & StrSignature
    .Display '.Send   'or use .Display
  End With
  With Application
    .EnableEvents = True
    .ScreenUpdating = True
  End With
  ' Effacer les variables objet
  Set OutMail = Nothing: Set OutApp = Nothing
End Sub

Function RangetoHTML(Rng As Range)
  Dim Fso As Object, Ts As Object
  Dim TempFile As String
  Dim TempWb As Workbook
  ' Créer le nom du fichier
  TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
  ' Copier la plage et créer un classeur pour coller les données dedans
  Rng.Copy
  Set TempWb = Workbooks.Add(1)
  With TempWb.Sheets(1)
    .Cells(1).PasteSpecial Paste:=8
    .Cells(1).PasteSpecial xlPasteValues, , False, False
    .Cells(1).PasteSpecial xlPasteFormats, , False, False
    .Cells(1).Select
    Application.CutCopyMode = False
    On Error Resume Next
    .DrawingObjects.Visible = True
    .DrawingObjects.Delete
    On Error GoTo 0
  End With
  ' Publier la feuille dans un fichier HTML
  With TempWb.PublishObjects.Add(SourceType:=xlSourceRange, _
    Filename:=TempFile, Sheet:=TempWb.Sheets(1).Name, _
    Source:=TempWb.Sheets(1).UsedRange.Address, _
    HtmlType:=xlHtmlStatic)
    .Publish (True)
  End With
  ' Lire les données du fichier
  Set Fso = CreateObject("Scripting.FileSystemObject")
  Set Ts = Fso.GetFile(TempFile).OpenAsTextStream(1, -2)
  RangetoHTML = Ts.readall
  Ts.Close
  RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
    "align=left x:publishsource=")
  ' Fermer le classeur sans sauvegarde
  TempWb.Close SaveChanges:=False
  ' Supprimer le fichier HTML
  Kill TempFile
  ' Effacer les variables objet
  Set Ts = Nothing: Set Fso = Nothing: Set TempWb = Nothing
End Function

A+

Bonjour,

Merci beaucoup pour ta réponse!
La macro fonctionne presque au détail que la colonne qui est filtrée et la colonne C (celle avec les dates). Et donc tout est faussé, je n'arrive pas à comprendre.
Est-ce que tu aurais une idée de cette raison?
J'ai tenté d'ajouter une nouvelle variable mais rien à faire ça filtre toujours la mauvaise colonne

Peut-etre en changeant "Field:=7" ?

(Supprime sur la premiere ligne de code pour supprimer tout filtre et pas seulement celui sur le 7eme colonne et change le 7 sur le deuxieme ligne pour l'adapter a ton tableau)

7 étant la colonne G si tu as un tableau qui commence en colonne A

    'On supprime les tri et filtre par "En attente" et ""
    MaFeuille.ListObjects("Tab_Donnee").Range.AutoFilter
    MaFeuille.ListObjects("Tab_Donnee").Range.AutoFilter Field:=7, Criteria1:="En attente", Operator:=xlOr, Criteria2:=""

Sans fichier difficile de repondre

J'ai finis par trouver tout seul!
Mercie encore pour ton aide passe une bonne journée :)

Rechercher des sujets similaires à "creation filtre macro tableau"