Macro Excel : Filtrage de tableau

Fermé
bicpryde Messages postés 31 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 24 mars 2014 - Modifié par bicpryde le 21/03/2014 à 00:07
bicpryde Messages postés 31 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 24 mars 2014 - 24 mars 2014 à 16:12
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
A voir également:

2 réponses

bicpryde Messages postés 31 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 24 mars 2014 184
21 mars 2014 à 18:10
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
0
bicpryde Messages postés 31 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 24 mars 2014 184
24 mars 2014 à 16:12
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
0