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 :

Archivage de données selon date [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Archivage de données selon date
    Bonjour à tous,

    Débutant en VBA, j'aimerais solliciter votre aide pour résoudre un petit problème de programmation.

    J'ai un fichier Excel avec un onglet appelé "Onglet0" et dans lequel il y a un tableau se présentant de la sorte :

    |A:PROJET| |B|..........|E:Date de sortie|
    XXXXX                   ##/##/####
    YYYYY                   ##/##/####
    ZZZZZ                   ##/##/####
    Dans la colonne E il y a soit des dates soit des vides.

    En colonne E, lorsqu'il y a une date de sortie, j'aimerais la comparer avec une date que je pourrais saisir manuellement et copier la ligne entière dans l'onglet "Onglet1" SI la date indiquée est égale ou postérieure à la date saisie.

    S'il n'y a pas de date de sortie ou qu'elle est antérieure à la date saisie, la macro devrait copier la ligne entière et la copier dans dans un onglet appelé "Onglet2".

    Dans l'onglet "Onglet 0", la colonne E étant en saisie libre, je pense qu'il serait judicieux de placer une regex afin de vérifier que les données sont bien des dates.

    Je suis débutant, j'aimerais bien ne pas utiliser de filtre excel et passer par des boucles for, if,... afin de pouvoir comprendre leur architecture.

    Pourriez vous m'aider s'il vous plait?

    En vous remerciant d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    Comme la solution la plus efficace est un filtre ou mieux un filtre avancé …
    Tout est dans le tutoriel Les filtres avancés ou élaborés dans Excel !

    Quant aux structures de boucle et de test conditionnel, tout est déjà dans l'aide VBA intégrée
    agrémentée d'exemples, suffit de la lire ! Niveau grand débutant sans souci …
    Sans oublier la FAQ, les tutoriels du site et les nombreuses discussions relatives de ce forum, une p'tite recherche …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    regarde la pièce jointe!
    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
     
    Sub test()
    Dim D
    Dim wb As Workbook
    Dim sh As Worksheet
    Dim DerL As Long
    D = Calendard.Chargement
    If D = False Then MsgBox "Pas de date": Exit Sub
    Set wb = Workbooks.Add
    Set sh = wb.Sheets(1)
    sh.Range("A1") = "Date de sortie"
    sh.Range("A2") = ">" & D
    sh.Range("B1") = "Date de sortie"
    sh.Range("B2") = "<>"
    DerL = ThisWorkbook.Sheets("Onglet 1").Cells(ThisWorkbook.Sheets("Onglet 1").Cells.Rows.Count, 1).End(xlUp).Row + 1
    FiltreActif ThisWorkbook.Sheets("Onglet 0").Range("A1").CurrentRegion, sh.UsedRange, ThisWorkbook.Sheets("Onglet 1").Cells(DerL, 1), False
    ThisWorkbook.Sheets("Onglet 1").Cells(DerL, 1).EntireRow.Delete
    wb.Close False
    End Sub
     
    Function FiltreActif(RangeSource As Range, CriterRange As Range, CopyRange As Range, Optional Unique As Boolean = True) As Boolean
    FiltreActif = False
    On Error Resume Next
    Debug.Print CriterRange(2, 1)
     RangeSource.AdvancedFilter Action:= _
            xlFilterCopy, CriteriaRange:=CriterRange _
            , CopyToRange:=CopyRange, Unique:=Unique
            DoEvents
            If Err = 0 Then FiltreActif = True
            'MsgBox Err.Description
            On Error GoTo 0
    End Function
    Fichiers attachés Fichiers attachés

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci, ton code fonctionne très bien !

    Le code serait-il similaire pour que dans l'onglet 2 soient copiées les lignes dont les date de sorties seraient soit vide soit antérieures à la date saisie ?

    Merci d'avance.

  5. #5
    Invité
    Invité(e)
    Par défaut
    oui il ne te reste qu'a définir l'ago qui bascule d'une feuille a l'autre!

    sur les ligne d'une même colonne c'est un OU (OR) l'entête est le champ filtré (A1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sh.Range("A1") = "Date de sortie"
    sh.Range("A2") = "<=" & D
    sh.Range("A3") = "="
    sur les colonnes d'une même ligne c'est un ET (AND) les entêtes sont les champs filtrés (A1;B1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sh.Range("A1") = "Date de sortie"
    sh.Range("A2") = ">" & D
    sh.Range("B1") = "Date de sortie"
    sh.Range("B2") = "<>"
    Dernière modification par Invité ; 23/10/2014 à 14h50.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci !

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

Discussions similaires

  1. [XL-2007] Filtre de données selon date/heure
    Par chouchou60 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/06/2012, 11h32
  2. Archivage base selon date ?
    Par Moostiq dans le forum Administration
    Réponses: 2
    Dernier message: 06/12/2011, 10h03
  3. Réponses: 2
    Dernier message: 09/12/2009, 17h51
  4. Requête d'archivage de courrier à une date donnée
    Par cinefever dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 22/09/2008, 08h51
  5. Grouper des données selon une date
    Par gids01 dans le forum iReport
    Réponses: 2
    Dernier message: 30/07/2007, 16h03

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