Macro masquer lignes selon date

Résolu
Sebast16 Messages postés 6 Statut Membre -  
Sebast16 Messages postés 6 Statut Membre -
Bonjour à tous,

Malgré plusieurs recherches sur le forum, je n'arrive pas à résoudre ma problématique.
J'ai une feuille excel sur laquelle j'ai une zone d'en-tête de 7 lignes.
A partir de la 8eme ligne commence ma base de données qui contient environ 1500 lignes. Dans cette base de données la colonne 1 calcule automatiquement la semaine de la donnée présente sur chaque ligne.
Dans l'en tête en cellule C2, j'ai le calcul automatique de la semaine en cours .
Je souhaiterais créer une macro pour permettre de masquer toutes les lignes pour ne voir que les données de la semaine en cours + semaine S+1 + semaine S+2 (pour avoir une meilleure visibilité sur la base de données).

Merci pour votre aide

11 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bojour,

    sans voir le classeur et sans boule de cristal...

    <code>Mettre le classeur sans données confidentielles en pièce jointe sur « mon-partage.fr »
    et faire un clic droit-coller le raccourci dans votre message
    Dans l’attente

    0
  2. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Bien que je partage l'avis de michel_m (que je salue), j'ai sorti ma boule de cristal et j'ai créé un fichier de test avec la macro suivante :
    Private Sub Workbook_Open()
    Dim Semaine As Integer
    Dim DerLig As Long
    Dim Cel As Range
    Semaine = CInt(Format(Date, "ww", vbMonday, vbFirstFourDays))
    With Worksheets("Feuil1")
    .Cells.EntireRow.Hidden = False
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    For Each Cel In .Range("A8:A" & DerLig)
    If Cel.Value < Semaine Or Cel.Value > Semaine + 2 Then
    Cel.EntireRow.Hidden = True
    End If
    Next Cel
    End With
    End Sub


    Le code est à placer dans le module ThisWorkbook.

    A+
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      bof!

      déjà écrire en début de macro
      application.screenupdating=false

      ensuite
      Dans cette base de données la colonne 1 calcule automatiquement la semaine de la donnée présente sur chaque ligne.
      alors pourquoi
      Semaine = CInt(Format(Date, "ww", vbMonday, vbFirstFourDays))

      donc, attendre le classeur parait + sage
      0
  3. Sebast16 Messages postés 6 Statut Membre
     
    Bonjour à tous les 2,
    Merci pour votre retour. J'ai adapté la macro de Gyrus, cela fonctionne mais malheureusement, le screening se fait ligne par ligne quand je l'active, ce qui fait qu'avec 1500 lignes environ, l'action met beaucoup de temps à s'effectuer....
    Je vous ai envoyé en privé le fichier pour une meilleure compréhension (les cellules sont vides pour le moment), la colonne 1 se calcule toute seule, la colonne W et Y sont des dates, le reste du texte

    Merci pour votre aide.
    A+
    0
  4. Gyrus Messages postés 3360 Statut Membre 526
     
    Tu peux déjà prendre en compte la critique positive de michel_m qui est de rajouter la ligne d'instruction suivante en début de procédure :

    Application.ScreenUpdating = False

    L'actualisation de l'écran sera ainsi désactivée et accélérera l'exécution de la procédure.

    En retour, dis-nous si cette adaptation est suffisante.

    A+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sebast16 Messages postés 6 Statut Membre
     
    Ca me semble beaucoup mieux en effet !
    Je vais essayer de remplir ma base de données et voir si avec la quantité le temps de masquage reste le même.
    Je vous tiens au courant

    Merci pour votre aide précieuse,

    Bonne journée
    0
  7. Sebast16 Messages postés 6 Statut Membre
     
    Salut Gyrus,

    je viens de m'apercevoir de quelquechose : la macro masque toutes les lignes dont la semaine est inférieure à celle en cours y compris celles dont la semaine est vide (c'est à dire encore sans data). Peut on le modifier légèrement pour que les lignes vides ne soient pas masquées ?

    Merci encore !
    0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Re,
    je viens de rentrer: je m'y mets demain matin...
    0
  9. Gyrus Messages postés 3360 Statut Membre 526
     
    Voici la macro modifiée :
    Private Sub Workbook_Open()
    Dim Semaine As Integer
    Dim DerLig As Long
    Dim Cel As Range
    Application.ScreenUpdating = False
    Semaine = CInt(Format(Date, "ww", vbMonday, vbFirstFourDays))
    With Worksheets("Feuil1")
    .Cells.EntireRow.Hidden = False
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    For Each Cel In .Range("A8:A" & DerLig)
    If (Cel.Value < Semaine Or Cel.Value > Semaine + 2) And Cel.Value <> "" Then
    Cel.EntireRow.Hidden = True
    End If
    Next Cel
    End With
    End Sub

    A+
    0
  10. Sebast16 Messages postés 6 Statut Membre
     
    Salut Gyrus,

    T'es trop fort !! merci pour votre aide et surtout pour la rapidité de réponse !

    Bonne soirée
    0
  11. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Excusez moi d'avoir dérangé
    0
  12. Sebast16 Messages postés 6 Statut Membre
     
    Mais tu n'as pas dérangé Michel :)
    Toutes les aides sont les bienvenues pour des novices comme moi :)
    0