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 :

extraire ligne ou cellule est comprise entre deux dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut extraire ligne ou cellule est comprise entre deux dates
    bonjour les amis j'ai un peu parcouru le forum en long en large et en travers mais j'ai pas trouver mon bonheur.

    en fait je souhaiterai extraire les lignes de mon tableau de données vers un autre classeur lorsque la cellule de la colone g est comprise entre la date d'aujourd'hui+27jours et aujourdhui+35jours et ce sur simple clic d'un bouton.
    la je galère avec mes filtres chaque semaine ça me saoule.
    merci à ceux qui m'aideront

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 913
    Points
    55 913
    Billets dans le blog
    131
    Par défaut
    Salut.

    Voici une première approche, à peaufiner. Il faut que la plage (a1:a6 dans le code proposé) soit pourvue du filtre automatique.

    C'est donc plus une approche de la démarche qu'un code fonctionnel "clé sur porte".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test()
      Dim Plage As Range
      Dim Classeur As Workbook
      Dim Feuille As Worksheet
     
      Set Feuille = ActiveSheet
      Set Classeur = Workbooks.Add()
      ThisWorkbook.Activate
      Feuille.Activate
      Set Plage = Range("a1:a13")
      Plage.AutoFilter field:=1, Criteria1:=">=" & Date * 1 + 27, Operator:=xlAnd, Criteria2:="<=" & Date * 1 + 35
      Plage.SpecialCells(xlCellTypeVisible).Copy Destination:=Classeur.Worksheets(1).Range("a1")
     
    End Sub
    On peut envisager une approche plus itérative (moins Excel et plus VBA)
    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
    Sub Test1()
      ' approche itérative
     
      Dim Cellule As Range
      Dim BorneInferieure As Date, BorneSuperieure As Date
      Dim Classeur As Workbook
      Dim CelluleCible As Range
      Dim Feuille As Worksheet
     
      BorneInferieure = Date + 27
      BorneSuperieure = Date + 35
     
      Set Feuille = ActiveSheet
      Set Classeur = Workbooks.Add()
      Set CelluleCible = Classeur.Worksheets(1).Range("a1")
      Feuille.Activate
      For Each Cellule In Feuil3.Range("a2:a" & Feuil3.Cells(Feuil3.Rows.Count, 1).End(xlUp).Row)
        If Cellule.Value >= BorneInferieure And Cellule.Value <= BorneSuperieure Then
          Cellule.EntireRow.Copy Destination:=CelluleCible
          Set CelluleCible = CelluleCible(2)
        End If
      Next Cellule
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    merci pour cette réponse rapide et ô combien pertinente. Malheureusement je n'arrive qu'à obtenir des classeurs vides j'ai bidouillé un peu tout mais rien à faire.est ce qu'il serait possible pour vous de m'aider un peu plus encore par exemple je peux héberger le fichier pour que vous y jetiez un oeil?

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 913
    Points
    55 913
    Billets dans le blog
    131
    Par défaut
    Et si tu mettais ton code avec les messages éventuels d'erreur?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut
    Bonsoir, bon c'est plus agréable d'écrire sur pc que sur mon téléphone portable

    Alors!

    Voilà ce que j'ai mis

    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
    Sub Bouton1_QuandClic()
     
    Dim Cellule As Range
    Dim BorneInferieure As Date, BorneSuperieure As Date
    Dim Classeur As Workbook
    Dim Feuille As Worksheet
    Dim CelluleCible As Range
    BorneSuperieure = Date + 35
    BorneInferieure = Date + 27
     
    Set Feuille = ActiveSheet
    Set Classeur = Workbooks.Add()
    Set CelluleCible = Classeur.Worksheets(1).Range("a1")
    Feuille.Activate
    For Each Cellule In Feuille.Range("a2:a" & Feuille.Cells(Feuille.Rows.Count, 7).End(xlUp).Row)
            If Cellule.Value >= BorneInferieure And Cellule.Value <= BorneSuperieure Then
        Cellule.EntireRow.Copy Destination:=CelluleCible
        Set CelluleCible = CelluleCible(2)
            End If
    Next Cellule
    End
     
     
    End Sub
    J'ai juste changé cette ligne là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cellule In Feuille.Range("a2:a" & Feuille.Cells(Feuille.Rows.Count, 7).End(xlUp).Row)
    Ca me crée bien une feuille mais elle est vierge.

  6. #6
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Ci-joint proposition complète commentée (proposée par Pierre Fauconnier) utilisant un filtre automatique et sans rien activer.
    L'extraction est établie dans un nouveau classeur sauvegardé dans le même répertoire.
    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
    Sub Test()
    Dim Classeur As Workbook
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets("Feuil7")  '!!!! à adapter au nom de ta feuille
        'On enlève l'éventuel filtre automatique
        .AutoFilterMode = False
        'N° de ligne de la dernière cellule remplie de la colonne A
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        If LastLig > 1 Then
            'On ajoute un nouveau classeur avec une seule feuille
            Set Classeur = Workbooks.Add(1)
            With .Range("A1:X" & LastLig)
                'On filtre la colonne A entre les 2 dates
                .AutoFilter Field:=1, Criteria1:=">=" & CLng(Date) + 27, Operator:=xlAnd, Criteria2:="<=" & CLng(Date) + 35
                'On copie les colonnes A à X visibles vers le classeur qu'on vient de créer
                .SpecialCells(xlCellTypeVisible).Copy Classeur.Worksheets(1).Range("A1")
            End With
            'On enlève le filtre automatique
            .AutoFilterMode = False
        End If
    End With
    'On sauvegarde notre classeur et on le ferme
    Classeur.SaveAs ThisWorkbook.Path & "\Extract_" & Format(Now, "ddmmyyyyhhnns"), xlNormal
    Classeur.Close
    Set Classeur = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/02/2015, 16h05
  2. Vérifier qu'une date est comprise entre deux autres
    Par bpdelavega dans le forum Zend Framework
    Réponses: 3
    Dernier message: 03/09/2011, 21h17
  3. Savoir qu'une date est comprise entre deux autres
    Par NicoD. dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2011, 10h16
  4. Réponses: 4
    Dernier message: 26/08/2008, 17h11
  5. chercher toutes les entrées comprise entre deux dates
    Par kabool dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/03/2006, 10h12

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