Filtre entre deux dates en vba

cs_evangelista Messages postés 10 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 juin 2008 - 25 juin 2007 à 19:53
cs_evangelista Messages postés 10 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 juin 2008 - 26 juin 2007 à 19:08
Bonjour, je galère depuis quelques jours sur ce problème, et je n'ai rien trouver sur les forums.



http://www.vbfrance.com/auteurdetail.aspx?ID=0 Lorsque je fait un filtre automatique sur une colonne contenant des dates (filtrer entre date) cela marche très bien. Lorsque j'enregistre un macro pour éxécuter ce travail automatiquement, la macro ne fonctionne pas (la méthode range à échouée). Je ne parviens pas à trouver la solution
Votre aide serait la bienvenue.

Sylvie 

4 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
25 juin 2007 à 20:16
Salut
Bah oui, c'est bien dommage, mais que veux-tu qu'on te réponde ?
On ne sais pas ce que tu as mis dans ta macro !
Tu veux filtrer quoi ? une colonne entière entre deux dates ?
Chez moi, je n'ai pas trouvé de filtre automatique qui permette ça.
Dis nous ce que tu appelles un filtre automatique. Comment tu l'as fait par les menus, ce sera un début.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
25 juin 2007 à 20:57
Les dates, c'est assez complexe dans les divers programmes...

Sous Excel, je te conseillerais de te servir d'une colonne qui n'est pas utilisée et d'y transférer tes dates sous le format AAAAMMJJ en utilisant les fonctions Excel (Jour, Mois et Année) ou encore en utilisant la fonction Texte
=TEXTE(A1;"aaaammjj")

À partir de là, tu peux te servir du filtre sur cette colonne et ça devrait mieux fonctionner.

MPi
0
cs_evangelista Messages postés 10 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 juin 2008
25 juin 2007 à 22:11
Merci de votre intéret, voici ma macro, je fais le filtrage en deux temps (seule solution trouvée) mais je voudrais le faire en une seule fois pour pouvoir les supprimer dans le meme temps.
Voici ma macro :
'Declaration des variables'
Dim NomFeuille As Variant
Dim DateDebut As Variant
Dim DateFin As Variant
NomFeuille = TextBox3.Value
DateDebut = TextBox1.Value
DateFin = TextBox2.Value
'Vérification de case vide pour le nom de la feuille de résultats du choix
  If NomFeuille = "" Then
    Mess = "Donnez un nom à la nouvelle feuille"
    MsgBox (Mess), , "ATTENTION"
    Exit Sub
   End If
         
    Set NewSheet = Sheets.Add(Type:=xlWorksheet)
    NewSheet.Name = "1erTri"
    Sheets("CDE").Select
    Range("A1").Select
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Range("A4:R4").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
    Range("L2").Select
    ActiveCell.FormulaR1C1 = ">" & DateDebut
    Sheets("1erTri").Select
    Range("A1").Select
    Sheets("CDE").Range("A4:R500").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("CDE").Range("A1:R2"), CopyToRange:=Sheets("1erTri").Range("A1"), _
        Unique:=False
    Columns("F:F").ColumnWidth = 14.14
    Columns("Q:Q").ColumnWidth = 13.71
    Sheets("CDE").Select
    Range("A1:A3").Select
    Selection.EntireRow.Delete
   
    Set NewSheet = Sheets.Add(Type:=xlWorksheet)
    NewSheet.Name = NomFeuille
    Sheets("1erTri").Select
    Range("A1").Select
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Range("A4:R4").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
    Range("L2").Select
    ActiveCell.FormulaR1C1 = "<" & DateFin
    Range("K4").Select
    Sheets(NomFeuille).Select
    Sheets("1erTri").Range("A4:R500").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("1erTri").Range("A1:R2"), CopyToRange:=Sheets(NomFeuille).Range("A1"), _
        Unique:=False
    Sheets("1erTri").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    Columns("Q:Q").ColumnWidth = 16.14
    Columns("F:F").ColumnWidth = 13.14
    Application.Run "CDE"
    ActiveWorkbook.Save
    Application.Quit
    Exit Sub
End Sub

Merci d'avance   Sylvie
0
cs_evangelista Messages postés 10 Date d'inscription dimanche 27 février 2005 Statut Membre Dernière intervention 22 juin 2008
26 juin 2007 à 19:08
Merci de votre interet,
C'est un classeur contenant des commandes avec colonne avec dates de factures, je dois extraire toutes les cdes facturées entre le 30/09 d'une année et le 1/10 de l'année suivante. J'aimerais faire cette opération en une fois pour pouvoir dans la foulée, les effacer de la liste totale.

Je fonctionne avec Userforme et TextBox.
voici ma macro vite fait avec l'enregistrement excel , je fais le filtrage en deux temps (seule solution trouvée) mais je voudrais le faire en une seule fois pour pouvoir les supprimer dans le meme temps.
Voici ma macro :
'Declaration des variables'
Dim NomFeuille As Variant
Dim DateDebut As Variant
Dim DateFin As Variant
NomFeuille = TextBox3.Value
DateDebut = TextBox1.Value
DateFin = TextBox2.Value
'Vérification de case vide pour le nom de la feuille de résultats du choix
  If NomFeuille = "" Then
    Mess = "Donnez un nom à la nouvelle feuille"
    MsgBox (Mess), , "ATTENTION"
    Exit Sub
   End If
         
    Set NewSheet = Sheets.Add(Type:=xlWorksheet)
    NewSheet.Name = "1erTri"
    Sheets("CDE").Select
    Range("A1").Select
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Range("A4:R4").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
    Range("L2").Select
    ActiveCell.FormulaR1C1 = ">" & DateDebut
    Sheets("1erTri").Select
    Range("A1").Select
    Sheets("CDE").Range("A4:R500").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("CDE").Range("A1:R2"), CopyToRange:=Sheets("1erTri").Range("A1"), _
        Unique:=False
    Columns("F:F").ColumnWidth = 14.14
    Columns("Q:Q").ColumnWidth = 13.71
    Sheets("CDE").Select
    Range("A1:A3").Select
    Selection.EntireRow.Delete
   
    Set NewSheet = Sheets.Add(Type:=xlWorksheet)
    NewSheet.Name = NomFeuille
    Sheets("1erTri").Select
    Range("A1").Select
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Range("A4:R4").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
    Range("L2").Select
    ActiveCell.FormulaR1C1 = "<" & DateFin
    Range("K4").Select
    Sheets(NomFeuille).Select
    Sheets("1erTri").Range("A4:R500").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("1erTri").Range("A1:R2"), CopyToRange:=Sheets(NomFeuille).Range("A1"), _
        Unique:=False
    Sheets("1erTri").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    Columns("Q:Q").ColumnWidth = 16.14
    Columns("F:F").ColumnWidth = 13.14
    Application.Run "CDE"
    ActiveWorkbook.Save
    Application.Quit
    Exit Sub
End Sub

J'ai essayé beaucoup de choses telles que ceci pour transformer les dates:
 
Dim a As Single
Dim b As Single

a = CDate(TextBox1)
b = CDate(TextBox2)

Selection.AutoFilter Field:=1, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b

Rien n'y fait !!

Je peux t'envoyer mon classeur, si seulement tu pouvais me sortir de ce mauvais pas, 

Merci d'avance   Sylvie
0