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 des dates inférieures à la date du jour


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut Filtrer des dates inférieures à la date du jour
    Bonjour,

    J'ai un souci concernant le filtre automatique, je pense que vous allez trouver cela d'une simplicité enfantine mais je souhaiterais utiliser comme critère de sélection tout ce qui est avant la date du jour (et non pas que la date-1) en fait je souhaiterais que les deux lignes grisées soient supprimées de l'onglet "bd" mais rajouté dans l'onglet "Archives"
    Pour info, je vous transmets le code que j'ai mis sur mon fichier excel ci-joint, je trouve qu'il ne fonctionne pas toujours de façon très fiable, est ce normal ou est il truffé d'erreur ?
    Merci d'avance de votre intérêt.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    pour ajouter des intervalles a une date, tu peux utiliser l'instruction DateAdd

    dans ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("bd").Range("a1").AutoFilter Field:=7, Criteria1:=DateAdd("d", -1, Date)

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut
    Je suis désolé mais je ne capte pas vraiment la fonction DateAdd, je recherche simplement le critère à mettre pour effectuer un filtre personnalisé de toutes les dates infèrieures à la date du jour.

    Merci beaucoup...

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Essai comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("bd").Range("a1").AutoFilter Field:=7, Criteria1:= "<"  & Date
    evidemment, il faut que la colonne 7 soit sous un format date reconnu

  5. #5
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut, (salut jfontaine)
    Au vu de ce que tu veux finalement faire je pense que ce code doit te convenir...

    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 Historisation()
     
    Dim DerLigS As Long, DerLigC 'Variable pour récupérer la dernière ligne remplie, S pour Source et C pour Cible
    Dim r As Long 'Variable pour la boucle
    Dim LaDate As Date 'Variable pour déterminé la cale haute des dates à "transférer"
     
    LaDate = Date - 1 'Défini la cale haute (date du jour -1)
    DerLigS = Sheets("Bd").Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
    DerLigC = Sheets("archives").Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
     
    'Boucle pour vérifier chaque cellule de la colonne G (à l'envers car suppression de ligne)
    For r = DerLigS To 2 Step -1 'Jusque 2 car titre, step-1 car si ordre normal et suppression on "oublie" des lignes
        If Sheets("bd").Cells(r, 7) < LaDate Then 'Vérifie si le contenu de la cellule est < que la date du jour-1 (via variable LaDate)
            DerLigC = DerLigC + 1 'On incrémente la ligne Cible, donc premier Paste sur ligne 2
            Sheets("bd").Rows(r).Copy Destination:=Sheets("archives").Cells(DerLigC, 1) 'On copie l'ensemble de la ligne
            Sheets("bd").Rows(r).Delete 'On supprime la ligne copiée
        End If
    Next r 'Passe à la ligne suivante
    End Sub
    A+

  6. #6
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut
    Pour jfontaine, je crois que tu as raison ce doit être une histoire de format reconnu donc si je reste sur cette solution je ferais les recherches adéquates, et encore un grand merci...

    Un grand merci à toi également Fvandermeulen pour ce qui est des dates c'est parfait par contre pour mon projet c'est un peu plus compliqué car il implique d'autres sélections à savoir lorsque la colonne "I" contient quelque chose mais que la colonne "L" ne contient rien je ne dois pas archiver mais par contre lorsque la colonne"I" et la colonne "L" contiennent quelque chose je dois archiver et également lorsque les deux colonnes "I" et "L" ne contiennent rien je dois également archiver, le tout bien sur avec la date -1 en colonne "G". Et vu le code que tu m'as envoyé je vais avoir un mal de tête avant de pouvoir l'adapter...

  7. #7
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Ce forum existe justement pour éviter des maux de tête

    Voici le code avec le controle sur colonne I et L
    C'est pas le plus "propore" mais je crois que tu comprendra aisément.

    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
    Sub Historisation()
     
    Dim DerLigS As Long, DerLigC 'Variable pour récupérer la dernière ligne remplie, S pour Source et C pour Cible
    Dim r As Long 'Variable pour la boucle
    Dim LaDate As Date 'Variable pour déterminé la cale haute des dates à "transférer"
    Dim TagControl As Byte
     
    LaDate = Date - 1 'Défini la cale haute (date du jour -1)
    DerLigS = Sheets("Bd").Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
    DerLigC = Sheets("archives").Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
     
    'Boucle pour vérifier chaque cellule de la colonne G (à l'envers car suppression de ligne)
    For r = DerLigS To 2 Step -1 'Jusque 2 car titre, step-1 car si ordre normal et suppression on "oublie" des lignes
        If Sheets("bd").Cells(r, 9) = "" And Sheets("bd").Cells(r, 12) <> "" Or Sheets("bd").Cells(r, 9) <> "" And Sheets("bd").Cells(r, 12) = "" Then TagControl = 1
            If Sheets("bd").Cells(r, 7) < LaDate And TagControl = 0 Then 'Vérifie si le contenu de la cellule est < que la date du jour-1 (via variable LaDate)
                DerLigC = DerLigC + 1 'On incrémente la ligne Cible, donc premier Paste sur ligne 2
                Sheets("bd").Rows(r).Copy Destination:=Sheets("archives").Cells(DerLigC, 1) 'On copie l'ensemble de la ligne
                Sheets("bd").Rows(r).Delete 'On supprime la ligne copiée
                TagControl = 0 'réinitialise le controle de "remplissage"
            End If
    Next r 'Passe à la ligne suivante
    End Sub
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] MFC sur colonne avec date inférieure à la date du jour
    Par jopont dans le forum Excel
    Réponses: 6
    Dernier message: 16/03/2015, 08h39
  2. totaliser des mouvements inférieurs à une date
    Par antalata dans le forum Oracle
    Réponses: 9
    Dernier message: 04/03/2011, 14h44
  3. [PowerShell] Comment filtrer des fichiers sur leur date de création
    Par Gusss dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 04/01/2010, 10h39
  4. Afficher une date inférieure à la date dans SQL
    Par sandddy dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/11/2007, 15h49
  5. [MySQL] Recherche sur Date inférieure à la date saisie
    Par gpanpan dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 03/10/2007, 09h22

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