Masquer les lignes vides

bonsoir

j'ai dans la colonne A ("A8:1500") des dates

j'aimerais arriver à masquer les lignes dont les colonnes B à G sont vide

mais uniquement pour le dates vieilles de plus d'un mois (30 jours)

merci pour votre aide

je vous mets en pièces jointes le fichier d'une autre question puisque c'est pour le même classeur de travail

34recherche-date.zip (8.85 Ko)

Bonjour,

Une feuille avec quelque date, un UserForm avec 2 texBox et un bouton, aucun code VBA..

Comment veux-tu que l'ont devine ce que tu veux faire.

Pour la feuille avec les dates, tu aurais mis quelque données en plus (fictives ça n'a pas d'importance) ça aurait aider,

Pour cacher les lignes suivant ce que tu explique.

Sub CacheLigne()
Dim DerLig As Long, Lig As Long
Dim DateTest As Date
    DateTest = DateSerial(Year(Date), Month(Date), Day(Date) - 30)
    DerLig = [A65536].End(xlUp).Row
    For Lig = 1 To DerLig
        If Cells(Lig, 1) < DateTest Then
            If WorksheetFunction.CountIf(Range(Cells(Lig, 2), Cells(Lig, 7)), "") = 6 Then
                Rows(Lig).Hidden = True
            Else
                Exit Sub
            End If
        End If
    Next Lig
End Sub

Et les remettre

Sub RemetLigne()
    Rows("1:10000").Hidden = False
End Sub

A+

bonjour

juste en faisant un premier essai ça n'a pas fonctionné

je regarde de plus pret ce soir

Bonjour,

Essais en modifiant le code proposé par ceci :

Sub CacheLigne()
Dim DerLig As Long, Lig As Long
Dim DateTest As Date
    DateTest = DateSerial(Year(Date), Month(Date), Day(Date) - 30)
    DerLig = [A65536].End(xlUp).Row
    For Lig = 1 To DerLig
        If Cells(Lig, 1) < DateTest Then
            If WorksheetFunction.CountIf(Range(Cells(Lig, 2), Cells(Lig, 7)), "") = 6 Then
                Rows(Lig).Hidden = True
            End If
        End If
    Next Lig
End Sub

Je pense que c'est le

Else
                Exit Sub

qui fait que cela ne marchait peut-être pas comme il faut, car à la 1ère ligne où les 6 cellules ne sont pas vides, on sort de la procédure.

Cordialement,

Bonjour,

Edit Dan

Bonjour tou(te)s

mais uniquement pour le dates vieilles de plus d'un mois (30 jours)

Salut Dan, ?

En regardant la feui1 du classeur je constate que toutes les dates sont indexées de 1 jour vers le bas j'ai donc mis un else pour éviter de parcourir tout le classeur .

J'ai tester avant de poster le code et ça fonctionne.

A moins que le classeur de travail soit différent du classeur test ça dois fonctionner.

A+

Re,

Lhermite, dans ton dernier fichier ne pas placer des codes SUB dans une feuille mais plutôt les mettre dans un module dans le sens une macro SUb est de type Public et non private.

Amicalement

Re,

Dan ->

Une sub n'est pas forcément Public.

Je met toujours une sub dont l'objet n'est pas spécifier DANS l'objet. note que dans ce cas je devrais la déclarer Private.

Si je met cette sub dans un Module et que c'est la feuil2 qui est active ?

Par contre, une sub dont l'objet est définit se trouve dans un module ce qui permet de l'activer de n'importe où.

Mais bon, à chacun sa façon de concevoir sont code, comme par exemple

      Plage = Range(Cells(L1, C1), Cells(L2, C2))
    'ou bien
    Plage = Range("A" & L1 & ":A" & L2)

du moment que ça fonctionne

Amicalement

Lermite

bonsoir

j'essayerai demain vos propositions

re,

Une sub n'est pas forcément Public.

Ben si. Tu ne m’as pas compris. SUB = PUBLIC SUB. Une SUB est en principe toujours public mais en la plaçant dans ta feuille, elle ne devient accessible que depuis ta feuille (ton objet)

Toutefois, ce que tu as fait dans le code de ta feuille n’a pas de réellement de sens

Private Sub CommandButton2_Click()
CacheLigne
End Sub

Puis, ton code

SUB CACHELIGNE()
......…
END SUB

Là soit tu mets ton code SUB CACHELIGNE dans un module et tu l'appelles comme tu l'as fait depuis le bouton 2, soit mieux tu fais ceci :

Private Sub CommandButton2_Click()
Dim DerLig As Long, Lig As Long, Col As Integer
Dim DateTest As Date
    DateTest = DateSerial(Year(Date), Month(Date), Day(Date) - 30)
    DerLig = [A65536].End(xlUp).Row
    For Lig = 1 To DerLig
        If Cells(Lig, 1) < DateTest Then
            If WorksheetFunction.CountIf(Range(Cells(Lig, 2), Cells(Lig, 7)), "") = 6 Then
                Rows(Lig).Hidden = True
            Else
                Exit Sub
            End If
        End If
    Next Lig
End Sub

Je met toujours une sub dont l'objet n'est pas spécifier DANS l'objet. note que dans ce cas je devrais la déclarer Private

C'est justement l'erreur qui est bien souvent faite dans les codes.

En principe tu devrais toujours déclarer ton objet. C'est un peu "puriste" mais bon cela évite les erreurs quand tu commences à avoir pleins de codes dans ton fichier.

Un peu de lecture à ce sujet si tu veux mais c’est en Anglais http://msdn.microsoft.com/en-us/library/wx059ey1(v=vs.71).aspx

Voili voilou

Rechercher des sujets similaires à "masquer lignes vides"