Trier des lignes en fonction d'une date

guilau24 -  
guillaume gdco Messages postés 75 Statut Membre -
Bonjour,
je suis novice en VBA. je travail à partir d'un tableau en .csv

j'exécute une première macro qui me mets en page ce tableau et tout marche bien, mais je souhaiterai inclure dans le même code une suppression des lignes contenant une date au delà de 28 jours par rapport à la date du jour où j'exporte le fichier et exécute la macro.

j'espère avoir été asse précis, si besoin je peux apporter plus d'infos et le fichier code

merci à tous

Configuration: Windows / Internet Explorer 11.0

6 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    apporter plus d'infos et le fichier code
    Faudrait le fichier avec le tableau, modifiez le si infos confidentielles
    site de partage:
    https://mon-partage.fr/
    0
  2. guillaume gdco Messages postés 75 Statut Membre
     


    voila un export du jour ( simplifié ), je souhaiterai supprimer les lignes qui ont plus de 28 jour ( 4 semaines ) par rapport à la date du jour.
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      La date du jour est aujourd'hui si je fais le trsf aujourd'hui pas une autre date??
      0
  3. guillaume gdco Messages postés 75 Statut Membre
     
    c'est ça, j'exporte un fichier une fois par semaine et j'ai besoin de supprimer toutes les lignes de plus de 28 jours
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Ok, je regarde la chose
      0
  4. guillaume gdco Messages postés 75 Statut Membre
     
    merci
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Une facon de faire:
      Sub sup_28_jour()
          Dim Date_Min As Date
          
          Date_Min = Date - 28        'date mini a 28 jours
          
          With Worksheets("Feuil2")       'adaptez nom de feuille
              .Range("A1:H1").AutoFilter  'filtre en place
              With .UsedRange     'plage de cellules utilisees
                  .AutoFilter Field:=5, Criteria1:="<" & CDbl(Date_Min)   'filtre date a 29 jours
                  Set Plage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                  Plage_ST.EntireRow.Delete       'suppression ligne filtrees
              End With
              .Range("A1:H1").AutoFilter      'enleve filtre
          End With
      End Sub
      
      0
    2. guillaume gdco Messages postés 75 Statut Membre
       
      J'ai modifié ainsi:

      Dim Date_Min As Date

      Date_Min = Date - 28 'date mini a 28 jours

      With Worksheets("Export") 'adaptez nom de feuille
      .Range("A1:H1").AutoFilter 'filtre en place
      With .UsedRange 'plage de cellules utilisees
      .AutoFilter Field:=8, Criteria1:="<" & CDbl(Date_Min) 'filtre date a 29 jours
      Set Plage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
      Plage_ST.EntireRow.Delete 'suppression ligne filtrees
      End With
      .Range("A1:H1").AutoFilter 'enleve filtre
      End With


      j'ai modifié .AutoFilter Field:=5 en 8 , le chiffre correspond bien à la colonne?

      par contre quand j'exécute la macro, il m'indique que la variable Plage_ST n'est pas définie.

      je suppose donc que je dois déclarer la variable avec Dim...
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Oui, si vous avez un Option Exlicit, mais si pas de lignes filtrées il y a erreur (ce que j'ai oublie)

      Sub test()
          Dim Date_Min As Date
          Dim PLage_ST As Range
          
          Date_Min = Date - 28 'date mini a 28 jours
      
          With Worksheets("Export") 'adaptez nom de feuille
              .Range("A1:H1").AutoFilter    'filtre en place
              With .UsedRange 'plage de cellules utilisees
                  .AutoFilter Field:=8, Criteria1:="<" & CDbl(Date_Min)    'filtre date a 29 jours
                  If Range("H2") <> "" Then           'si au moins une lgne filtree
                      Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                      PLage_ST.EntireRow.Delete 'suppression ligne filtrees
                  End If
              End With
              .Range("A1:H1").AutoFilter    'enleve filtre
          End With
      End Sub
      0
    4. guillaume gdco Messages postés 75 Statut Membre
       
      Merci f894009, une fois de plus ça marche parfaitement et me permet d'avancer dans la compréhension du codage
      0
    5. guillaume gdco Messages postés 75 Statut Membre
       
      donnée que je n'avais pas, dans la colonne où sont les dates ( colonne D), j'ai des lignes avec le texte "dès réception".
      je souhaite que c'est lignes ne soient pas exclus comme c'est le cas avec le code actuel qui filtres en fonction de la date

          Dim Date_Min As Date
          Dim PLage_ST As Range
          
          Date_Min = Date - 28 'date mini a 28 jours
      
          With Worksheets("Export") 'adaptez nom de feuille
              .Range("A1:E1").AutoFilter    'filtre en place
              With .UsedRange 'plage de cellules utilisees
                  .AutoFilter Field:=4, Criteria1:="<" & CDbl(Date_Min)    'filtre date a 29 jours
                  If Range("E2") <> "" Then           'si au moins une lgne filtree
                      Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                      PLage_ST.EntireRow.Delete 'suppression ligne filtrees
                  End If
              End With
              .Range("A1:E1").AutoFilter    'enleve filtre
          End With
      
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. guillaume gdco Messages postés 75 Statut Membre
     
    les lignes "dès réception" se trouve dans la même colonne comportant des dates, la colonne D, j'ai donc inséré comme tu m'avais indiqué, mais ça ne me garde que ligne "dès réception et me supprime les autres

    Adaptez les colonnes a filtrer:
    Sub test()
        Dim PLage_ST As Range
        
        Date_Min = Date - 28 'date mini a 28 jours
    
        With Worksheets("Export") 'adaptez nom de feuille
            .Range("A1:E1").AutoFilter    'filtre en place
            With .UsedRange 'plage de cellules utilisees
                .AutoFilter Field:=4, Criteria1:="<" & CDbl(Date_Min)         'filtre date a 29 jours Colonne D
                .AutoFilter Field:=4, Criteria1:="<>*r?ception*"             'garde les lignes dès réception colonne D           
                     If Range("D2") <> "" Then           'si au moins une lgne filtree
                    Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                    PLage_ST.EntireRow.Delete 'suppression ligne filtrees
                End If
            End With
            .Range("A1:E1").AutoFilter    'enleve filtre
        End With
    End Sub
    
    0
  7. guillaume gdco Messages postés 75 Statut Membre
     
    c'est bon c'est réglé

    Dim PLage_ST As Range
        
        Date_Min = Date - 28 'date mini a 28 jours
    
        With Worksheets("Export") 'adaptez nom de feuille
            .Range("A1:E1").AutoFilter    'filtre en place
            With .UsedRange 'plage de cellules utilisees
                .AutoFilter Field:=4, Criteria1:="<" & CDbl(Date_Min), Criteria1:="<>*r?ception*"                    'filtre date a 29 jours Colonne D     
                     If Range("D2") <> "" Then           'si au moins une lgne filtree
                    Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                    PLage_ST.EntireRow.Delete 'suppression ligne filtrees
                End If
            End With
            .Range("A1:E1").AutoFilter    'enleve filtre
        End With
    
    0