Macro Excel : Filtrage de tableau
bicpryde
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
bicpryde Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
bicpryde Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je débute en vba et en programmation de façon générale. Je me heurte à une difficulté en VBA Excel sous Excel 2007.
Voici mon problème. J' ai un tableau excel contenant 2 colonnes A et B. La colonne A contient des numéros de commande et dans la colonne B la date d' envoi prévue.
(Evidemment sur la première ligne j'ai la désignation de mes colonnes).
Je cherche à créer une macro qui filtre automatiquement le tableau en fonction de la date du jour.
Par exemple, au lancement de la macro, je veux qu' elle filtre automatiquement le tableau pour n' afficher que les commandes dont la date est à J-7 par à la date d' envoie prévu.
Vous me direz autant le faire manuellement où faire une base de données, mais j' ai la contrainte d' utiliser Excel.
Pour ce qui est de l' intérêt de la macro, l' idée à terme de la macro est de faire en sorte que la macro récupère la date du jour et passe en revue le tableau afin de récupérer et filtrer la tableau afin de n' afficher que la liste des commandes qui devront être envoyer à J+7.
Une fois ce trie effectuer, le tableau filtré doit être envoyé par mail.
Voici mon code :
Sub Filtrer()
'
' Filtrer Macro
'
Dim DateDuJour As Date
Dim Selection As Date
Dim n As Integer
DateDuJour = Date
For n = 2 To 20 Step 1
ActiveSheet.Range("A2:A20").AutoFilter Field:=7, Criteria1:=Array("Range($B & n)" < "DateDuJour")
Next n
End Sub
Pour information la macro s' exécute sans erreurs, et l' action de filtrage s' effectue bien mais je me retrouve uniquement avec la désignation de mes commandes.
Merci d'avance,
bicpryde
je débute en vba et en programmation de façon générale. Je me heurte à une difficulté en VBA Excel sous Excel 2007.
Voici mon problème. J' ai un tableau excel contenant 2 colonnes A et B. La colonne A contient des numéros de commande et dans la colonne B la date d' envoi prévue.
(Evidemment sur la première ligne j'ai la désignation de mes colonnes).
Je cherche à créer une macro qui filtre automatiquement le tableau en fonction de la date du jour.
Par exemple, au lancement de la macro, je veux qu' elle filtre automatiquement le tableau pour n' afficher que les commandes dont la date est à J-7 par à la date d' envoie prévu.
Vous me direz autant le faire manuellement où faire une base de données, mais j' ai la contrainte d' utiliser Excel.
Pour ce qui est de l' intérêt de la macro, l' idée à terme de la macro est de faire en sorte que la macro récupère la date du jour et passe en revue le tableau afin de récupérer et filtrer la tableau afin de n' afficher que la liste des commandes qui devront être envoyer à J+7.
Une fois ce trie effectuer, le tableau filtré doit être envoyé par mail.
Voici mon code :
Sub Filtrer()
'
' Filtrer Macro
'
Dim DateDuJour As Date
Dim Selection As Date
Dim n As Integer
DateDuJour = Date
For n = 2 To 20 Step 1
ActiveSheet.Range("A2:A20").AutoFilter Field:=7, Criteria1:=Array("Range($B & n)" < "DateDuJour")
Next n
End Sub
Pour information la macro s' exécute sans erreurs, et l' action de filtrage s' effectue bien mais je me retrouve uniquement avec la désignation de mes commandes.
Merci d'avance,
bicpryde
A voir également:
- Macro Excel : Filtrage de tableau
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
2 réponses
Bonjour,
petit up, je suis parvenu à avancer ma macro. en fait le plus simple visiblement serai de copier le tableau filtrer dans un nouvel onglet.
Seul problème avec le code ci-dessous c'est qu'il ne fonctionne pas très bien.
Mon tableau à trier ce trouve dans l' onglet Plannig a la taille suivante A1:L11. Le résultat obtenu par ma macro est de ne copier que la ligne 1 de mon tableau en ligne 12 de la feuille de destination appeller Export
Sub Filtrer()
Dim Derlig As Long, Lig As Long
Dim LigCopie As Long
Dim DateDuJour As Date
Dim Selection As Date
DateDuJour = Date
'Set Condition = .Cells(Lig, 1) < DateDuJour
If DateDuJour < Range("G2").Value Then
With Sheets("Planning")
For Lig = 0 To 200 'pour pas avoir la ligne des titres
.Columns("A:L").AutoFilter
Derlig = .Range("A65536").End(xlUp).Row
LigCopie = Sheets("Planning").Range("A65536").End(xlUp).Row + 1
.Range("$A$1:$L$1").AutoFilter Field:=1, Criteria1:=Condition, Operator:=xlAnd
.Range("A1:L" & Derlig).Copy Sheets("Export").Range("A" & LigCopie)
Next Lig
End With
End If
End Sub
petit up, je suis parvenu à avancer ma macro. en fait le plus simple visiblement serai de copier le tableau filtrer dans un nouvel onglet.
Seul problème avec le code ci-dessous c'est qu'il ne fonctionne pas très bien.
Mon tableau à trier ce trouve dans l' onglet Plannig a la taille suivante A1:L11. Le résultat obtenu par ma macro est de ne copier que la ligne 1 de mon tableau en ligne 12 de la feuille de destination appeller Export
Sub Filtrer()
Dim Derlig As Long, Lig As Long
Dim LigCopie As Long
Dim DateDuJour As Date
Dim Selection As Date
DateDuJour = Date
'Set Condition = .Cells(Lig, 1) < DateDuJour
If DateDuJour < Range("G2").Value Then
With Sheets("Planning")
For Lig = 0 To 200 'pour pas avoir la ligne des titres
.Columns("A:L").AutoFilter
Derlig = .Range("A65536").End(xlUp).Row
LigCopie = Sheets("Planning").Range("A65536").End(xlUp).Row + 1
.Range("$A$1:$L$1").AutoFilter Field:=1, Criteria1:=Condition, Operator:=xlAnd
.Range("A1:L" & Derlig).Copy Sheets("Export").Range("A" & LigCopie)
Next Lig
End With
End If
End Sub
Petit Up, j' ai encore avancé. Finalement j'ai choisi la copie de ligne plutôt que le filtrage. J'ai encore quelques erreurs dans le code ci-dessous.
Le code fonctionne quand j' envoie le résultat dans une feuille de mon classeur puis que j' envoie cette feuille via la création automatique d'un classeur temporaire.
Mais ce que j' essaie de faire maintenant c'est de coller le résultat directement dans un classeur temporaire. Si vous avez des idées je suis preneur.
Sub SuiviPilotage2()
Dim DateDuJour As Date
Dim IndexLigne As Integer
Dim NouveauTableau As Excel.Workbook
Dim NouvelleFeuille As Excel.Worksheet
'COPIE DU TABLEAU FILTRE
DateDuJour = Date
IndexLigne = 2
Sheets("Planning").Rows(1).Copy Sheets("Export").Cells(IndexLigne - 1, 1)
Do While Sheets("Planning").Cells(IndexLigne, 1).Value <> ""
If Sheets("Planning").Cells(IndexLigne, 7).Value < DateDuJour Then
NouveauTableau = Workbook.Add
NouvelleFeuille = NouveauTableau.Worksheets(1)
Sheets("Planning").Rows(IndexLigne).Copy NouvelleFeuille
End If
IndexLigne = IndexLigne + 1
Loop
'ENVOIE DU MAIL
NouveauTableau.SendMail "damien.delhaye@orange.com", "Export Bacara"
NouveauTableau.Quit
End Sub
Le code fonctionne quand j' envoie le résultat dans une feuille de mon classeur puis que j' envoie cette feuille via la création automatique d'un classeur temporaire.
Mais ce que j' essaie de faire maintenant c'est de coller le résultat directement dans un classeur temporaire. Si vous avez des idées je suis preneur.
Sub SuiviPilotage2()
Dim DateDuJour As Date
Dim IndexLigne As Integer
Dim NouveauTableau As Excel.Workbook
Dim NouvelleFeuille As Excel.Worksheet
'COPIE DU TABLEAU FILTRE
DateDuJour = Date
IndexLigne = 2
Sheets("Planning").Rows(1).Copy Sheets("Export").Cells(IndexLigne - 1, 1)
Do While Sheets("Planning").Cells(IndexLigne, 1).Value <> ""
If Sheets("Planning").Cells(IndexLigne, 7).Value < DateDuJour Then
NouveauTableau = Workbook.Add
NouvelleFeuille = NouveauTableau.Worksheets(1)
Sheets("Planning").Rows(IndexLigne).Copy NouvelleFeuille
End If
IndexLigne = IndexLigne + 1
Loop
'ENVOIE DU MAIL
NouveauTableau.SendMail "damien.delhaye@orange.com", "Export Bacara"
NouveauTableau.Quit
End Sub