IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

filtrer une colonne par date en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2012
    Messages : 20
    Par défaut filtrer une colonne par date en VBA
    Bonjour les développeurs,

    Je voudrais savoir comment puis-je filtrer une colonne par date?
    Il s'agit d'une colonne contenant des dates de format texte (dd/mm/AAAA) et je veux afficher les dates antérieures à une certaine date en utilisant un filtre.

    Toute aide serait bien apprécié.

    Merci pour l'ame charitable qui pourrait m'aider

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 30
    Par défaut
    Bonjour PierreTark,

    J'ai réalisé ce bout de code, qui me permet de sélectionner toute une plage de valeur entre deux dates.

    Il marche sur Excel 2003,
    à toi de le modifier, en retirant la partie qui ne te convient pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub Total()
    
    DateCherchée = InputBox("Date cherchée ! Format jj/mm/aaaa hh:mm:ss", "", Range("B2"))
    If DateCherchée = "" Then Exit Sub
    Ligne = 2
    ColonneRecherche = 2
    'DAteCellule = Cells
    'On décompose "DateCherchée" qui est sous forme de texte, afin de le re concaténer sous la forme d'une vrai date
    DD = Day(DateCherchée)
    MM = Month(DateCherchée)
    YYYY = Year(DateCherchée)
    HH = Hour(DateCherchée)
    MIM = Minute(DateCherchée)
    SS = Second(DateCherchée)
    
    Date_ = DateValue(DD & "/" & MM & "/" & YYYY)
    Heure_ = TimeValue(HH & ":" & MIM & ":" & SS)
    DateCherchée = Date_ + Heure_
    
    Nb_Lignes_max = Range("B2").End(xlDown).Row         'Où "B2" est la colonne sur laquelle sont indiquées les dates
    
    'Boucle sur les dates avec passage à la ligne suivante...
    While DateCherchée <> Cells(Ligne, ColonneRecherche) _
        And Ligne <= Nb_Lignes_max
        Ligne = Ligne + 1
    Wend
    
    If Ligne > Nb_Lignes_max Then       'Message d'alerte si dépassement de la plage de date
        MsgBox ("Valeur non trouvée !")
    Else
        MsgBox (Ligne)      'Numéro de la ligne où a été trouvé le résultat
    End If
    
    PremiereLigne = Ligne
    
    ''''''''''''''''''''''''''''''''
    
    DateCherchée = InputBox("Date cherchée ! Format jj/mm/aaaa hh:mm:ss", "", Range("B2"))
    If DateCherchée = "" Then Exit Sub
    Ligne = PremiereLigne       'La ligne de départ est la ligne où est marquée
                    '"DateCherchée" du Sub précédent
    ColonneRecherche = 2
    
    
    DD = Day(DateCherchée)
    MM = Month(DateCherchée)
    YYYY = Year(DateCherchée)
    HH = Hour(DateCherchée)
    MIM = Minute(DateCherchée)
    SS = Second(DateCherchée)
    
    Date_ = DateValue(DD & "/" & MM & "/" & YYYY)
    Heure_ = TimeValue(HH & ":" & MIM & ":" & SS)
    DateCherchée = Date_ + Heure_
    
    Nb_Lignes_max = Range("B2").End(xlDown).Row
    
    While DateCherchée <> Cells(Ligne, ColonneRecherche) _
        And Ligne <= Nb_Lignes_max
        Ligne = Ligne + 1
    Wend
    
    If Ligne > Nb_Lignes_max Then
        MsgBox ("Valeur non trouvée !")
    Else
        MsgBox (Ligne)
    End If
    
    DerniereLigne = Ligne
    
    '''''''''''''''''''''''''''''''''''
    'On cache les lignes Antérieures à la Date de Début
    
        Ligne_Départ = 2
        Ligne_Fin = PremiereLigne - 1        'Correspond au numéro de ligne renvoyé par la MsgBox1
        Cellules = Ligne_Départ & ":" & Ligne_Fin
        Rows(Cellules).Hidden = True    
     'On cache les lignes Postérieures à la Date de Fin
     
        Ligne_Départ = DerniereLigne          'Correspond au numéro de ligne renvoyé par la MsgBox2
        Ligne_Fin = Range("B2").End(xlDown).Row
        Cellules = Ligne_Départ & ":" & Ligne_Fin
        Rows(Cellules).Hidden = True
    End Sub
    J'ai mis en roue les parties qui me semblent être moins intéréssante pour ton cas, mais j'ai mis le code entier au cas où ça aiderait quelqu'un.

    Bonne continuation

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Macro1()
    Dim DateRepere As Date
     
    DateRepere = DateSerial(2011, 7, 12)              '12/07/2011
    Worksheets("Feuil1").Range("A:A").AutoFilter Field:=1, Criteria1:="<" & CLng(DateRepere)
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    sub macro()
     
    dim i as Integer
    dim c as Long
    dim madate as Date
     
    For i = ... To ... 
     
    madate = FormatDateTime(Cells(i, "...").Value)
     
    If madate >= DateValue("../../....") And madate <= DateValue("../../....") Then
    c = c + 1 'compteur
    range("...:..." &c).select
    end if
     
    next i
     
    end sub
    Jeune codeur vba je te propose modestement ce petit bout de code ^^ tu ajoutes juste une condition qd le test est faux et une réinitialisation de ton compteur et ça doit le faire!

    A toi de l'adapter à tes besoins

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/10/2008, 18h08
  2. trier et filtrer une colonne d'un sur VBA-EXCEL
    Par la_rebelle dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/06/2008, 15h50
  3. trier une colonne par date
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/06/2008, 08h30
  4. Réponses: 4
    Dernier message: 23/12/2006, 16h55
  5. Trier une colonne par date
    Par foobar42 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/07/2006, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo