Bonjour à tous,
J'ai un soucis avec mon code VBA. Enfin plutôt avec mon fichier Excel.
Mon fichier Excel comprend plusieurs onglets, il y'a déjà 2 modules qui contiennent des codes, et je créer un 3eme module avec le code suivant :
Sub ExporterParDate()
Dim wsSource As Worksheet
Dim wsNew As Worksheet
Dim rngSource As Range
Dim cell As Range
Dim startDate As Date
Dim endDate As Date
Dim OutApp As Object
Dim OutMail As Object
Dim TempFileName As String
Dim lastRow As Long
' Spécifiez la feuille de données source
Set wsSource = ThisWorkbook.Sheets("Feuil1")
' Récupérer les dates de début et de fin depuis les cellules spécifiées
startDate = CDate(wsSource.Range("A1").Value)
endDate = CDate(wsSource.Range("B1").Value)
' Spécifiez la plage de données à filtrer (à partir de la ligne S2)
lastRow = wsSource.Cells(wsSource.Rows.Count, "S").End(xlUp).Row
Set rngSource = wsSource.Range("S2:S" & lastRow)
' Créer une nouvelle feuille pour les données filtrées
Set wsNew = Sheets.Add(After:=Sheets(Sheets.Count))
wsNew.Name = "Matrice d'entree"
' Filtrer les données entre les deux dates
rngSource.AutoFilter Field:=1, Criteria1:=">=" & CLng(startDate), Operator:=xlAnd, Criteria2:="<=" & CLng(endDate)
rngSource.SpecialCells(xlCellTypeVisible).EntireRow.Copy Destination:=wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Offset(1, 0)
' Supprimer le filtre
wsSource.AutoFilterMode = False
' Enregistrez la feuille filtrée dans un fichier temporaire
TempFileName = Environ$("temp") & "\" & "Matrice_d_entree.xlsx"
wsNew.Copy
ActiveWorkbook.SaveAs TempFileName
ActiveWorkbook.Close SaveChanges:=False
' Envoyer le fichier par e-mail
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "votre@email.com" ' Remplacez par votre adresse e-mail
.Subject = "Données filtrées entre deux dates"
.Body = "Veuillez trouver les données filtrées en pièce jointe."
.Attachments.Add TempFileName
.Display ' Ouvre le client de messagerie Outlook avec le message
End With
' Supprimer le fichier temporaire
Kill TempFileName
' Supprimer la feuille temporaire
Application.DisplayAlerts = False
wsNew.Delete
Application.DisplayAlerts = True
End Sub
J'ai fait un test sur un fichier vierge (en pièce jointe), j'y ai ajouté mes données à l'état brut et tester le code qui fonctionne !
Sauf que, lorsque j'utilise ce même code, dans mon fichier avec plusieurs onglets et déjà 2 modules, le code de ne fonctionne pas..
Je ne comprends pas pourquoi il fonctionne dans un fichier "vierge" et pas dans un fichier avec déjà des codes
Merci par avance pour votre aide
Bonne journée à vous !
J'ai un soucis avec mon code VBA. Enfin plutôt avec mon fichier Excel.
Mon fichier Excel comprend plusieurs onglets, il y'a déjà 2 modules qui contiennent des codes, et je créer un 3eme module avec le code suivant :
Sub ExporterParDate()
Dim wsSource As Worksheet
Dim wsNew As Worksheet
Dim rngSource As Range
Dim cell As Range
Dim startDate As Date
Dim endDate As Date
Dim OutApp As Object
Dim OutMail As Object
Dim TempFileName As String
Dim lastRow As Long
' Spécifiez la feuille de données source
Set wsSource = ThisWorkbook.Sheets("Feuil1")
' Récupérer les dates de début et de fin depuis les cellules spécifiées
startDate = CDate(wsSource.Range("A1").Value)
endDate = CDate(wsSource.Range("B1").Value)
' Spécifiez la plage de données à filtrer (à partir de la ligne S2)
lastRow = wsSource.Cells(wsSource.Rows.Count, "S").End(xlUp).Row
Set rngSource = wsSource.Range("S2:S" & lastRow)
' Créer une nouvelle feuille pour les données filtrées
Set wsNew = Sheets.Add(After:=Sheets(Sheets.Count))
wsNew.Name = "Matrice d'entree"
' Filtrer les données entre les deux dates
rngSource.AutoFilter Field:=1, Criteria1:=">=" & CLng(startDate), Operator:=xlAnd, Criteria2:="<=" & CLng(endDate)
rngSource.SpecialCells(xlCellTypeVisible).EntireRow.Copy Destination:=wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Offset(1, 0)
' Supprimer le filtre
wsSource.AutoFilterMode = False
' Enregistrez la feuille filtrée dans un fichier temporaire
TempFileName = Environ$("temp") & "\" & "Matrice_d_entree.xlsx"
wsNew.Copy
ActiveWorkbook.SaveAs TempFileName
ActiveWorkbook.Close SaveChanges:=False
' Envoyer le fichier par e-mail
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "votre@email.com" ' Remplacez par votre adresse e-mail
.Subject = "Données filtrées entre deux dates"
.Body = "Veuillez trouver les données filtrées en pièce jointe."
.Attachments.Add TempFileName
.Display ' Ouvre le client de messagerie Outlook avec le message
End With
' Supprimer le fichier temporaire
Kill TempFileName
' Supprimer la feuille temporaire
Application.DisplayAlerts = False
wsNew.Delete
Application.DisplayAlerts = True
End Sub
J'ai fait un test sur un fichier vierge (en pièce jointe), j'y ai ajouté mes données à l'état brut et tester le code qui fonctionne !
Sauf que, lorsque j'utilise ce même code, dans mon fichier avec plusieurs onglets et déjà 2 modules, le code de ne fonctionne pas..
Je ne comprends pas pourquoi il fonctionne dans un fichier "vierge" et pas dans un fichier avec déjà des codes
Merci par avance pour votre aide
Bonne journée à vous !