Cacher des lignes si aucun contenu dedans

Bonjour,

Je souhaiterai cacher des lignes si il n y a aucun contenu dans celles-ci mais je voudrais qu'il y ait un comptage de ligne vide.

Par exemple si il n y a pas de contenu sur 5 lignes d'affilés (condition) alors cacher les cellules suivante jusqu'à ce qu'il y ait de nouveau du contenu dans une ligne.

Actuellement je sais cacher les lignes que je veux (EntireRow.Hidden) avec leur numéro mais je n'arrive pas à mettre en place ce comptage de lignes vides.

Exemple :

- Contenu dans n'importe quelle colonne de la ligne 1 > passage a la ligne suivante

- Pas de contenu dans n'importe quelle colonne de la ligne 2 > passage a la ligne suivante et incrément de 1 dans un compteur (1 ligne vide)

- Pas de contenu dans n'importe quelle colonne de la ligne 3, 4, 5 et 6 > cacher toutes les lignes (compteur=5 car 5 lignes vides d'affilé donc condition OK) jusqu'à la prochaine ligne ayant du contenu dans une colonne

Je n'ai pas de proposition VBA pour ça car je n'ai aucune idée de comment faire

J'espère que le sujet est clair

D'avance merci,

Paul

Bonjour,

Vu que nous ne disposons d'aucun support, montrez au moins le code que vous avez déjà écrit, nous n'aurons plus qu'à le modifier pour qu'il réponde à vos attentes.

Cdlt

Actuellement, en fonction d'une valeur dans une cellule je cache toutes les lignes du tableur et n'affiche que celle qui m'intéresse. Par exemple pour les valeurs suivante en C8 et C9, j'affiche les lignes 11 à 160 puis 193 à 220 :

If Range("C8").Value = "MOULAGE" And Range("C9").Value = "" Then

Rows("11:160").EntireRow.Hidden = False

Rows("193:220").EntireRowHidden= False

Cependant cette méthode ne me permet de remplir des cellules du tableur en dessous de la ligne 160 sans modifier le code VBA (et changer ce "160") pour les afficher aussi.

J'aimerai donc mettre en place le comptage évoqué dans le premier message afin qu'il vérifie automatiquement si des lignes en dessous ont du contenu ou non et qu'au bout d'un certain nombre de ligne vide d'affilé (5), ça les cachent jusqu'à la prochaine ligne ayant du contenu.

Franchement pas clair du tout:

Actuellement, en fonction d'une valeur dans une cellule je cache toutes les lignes du tableur et n'affiche que celle qui m'intéresse. Par exemple pour les valeurs suivante en C8 et C9, j'affiche les lignes 11 à 160 puis 193 à 220 :

et dans le code, vous les masquez

Rows("11:160").EntireRow.Hidden = False
Rows("193:220").EntireRowHidden= False

Alors on masque ou on affiche?

Vos explications et vos lignes de codes ne permettent pas de comprendre, un fichier joint (sans données confidentielles) avec le résultat attendu s'avère nécessaire, sinon on va tourner en rond encore longtemps et, les réponses proposées risquent de ne pas être satisfaisantes.

Boujour,

Je n'ai pas tout compris également, ce que j'en retient c'est que si 5 lignes vide s'enchainent tu souhaites les masquer.
Voici un exemple de ce que tu peux faire.

Sub MasqueGroupeVide()
Dim Ref As Integer
Dim derRef As Integer
Dim EnsVide As Long
Dim NbVide As Integer

derRef = Cells(Rows.Count, 2).End(xlUp).Row

For Ref = 3 To derRef
    'EnsVide => Ligne qui correspond a la derniere du "groupe"
    EnsVide = Cells(Ref, 3).End(xlDown).Row - 1
    'Ne pas prendre en compte les ligne a l'extérieur du tableau
    If EnsVide >= derRef Then EnsVide = derRef
    'Compte le nombre de cellule vide dans cet enssemble groupé
    NbVide = WorksheetFunction.CountBlank(Range(Cells(Ref, 3), Cells(EnsVide, 3)))
    'Suivant le nombre de cellules vide obtenu
        Select Case NbVide
        'Si c'est inférieur a 5
        Case Is < 5
            'On ne fait rien
'            Range(Cells(Ref, 3), Cells(EnsVide, 3)).EntireRow.Hidden = False
            Ref = EnsVide
        Case Else
            'Sinon on masque l'enssemble
            Range(Cells(Ref + 1, 3), Cells(EnsVide, 3)).EntireRow.Hidden = True
            Ref = EnsVide
        End Select
Next Ref
End Sub
16masque-geof.xlsm (20.78 Ko)

A+

Je ne comprend pourtant pas ce qui bloque la compréhension..

Je parle de ligne, pas de celulle. C'est en gros un balayage a effectué dans chaque ligne pour voir si il y a du contenu ou non.

Arturo, je ne les masque pas puisque je met la variable cacher = False, j'annule donc le masquage

Geof52 à l'air d'avoir compris, le seul truc est que je ne veux pas uniquement masquer les 5 lignes vides d'affilées. Je veux masquer aussi celle qui viennent après tant qu'aucune ligne rempli n'est rencontrée.

Voila ce que j'ai fais, mais ce que j'aimerai est décrit dans la zone surligné jaune (L137 à 164) qui reprend ce que j'ai déjà dis.

Mon message precedent ne masque pas seulement 5 lignes, mais bien toutes les lignes vide si il y a plus de 5 lignes vide a la suite (jusqu'a un retour de cellule non vide)

    'Suivant le nombre de cellules vide obtenu
        Select Case NbVide

        'Si c'est inférieur a 5
        Case Is < 5
            'On ne fait rien

        Case Else
            'Sinon on masque l'enssemble

Test mon fichier en ne mettant pas de quantité sur 10/15 lignes

Exact ! Merci pour ta contribution !

Juste petite question. Dans ton programme quelle est la différence entre EnsVide et derRef.

Si tu pouvais reprendre ligne par ligne en "traduisant" pour que je puisse comprendre ce serait parfait ! (je ne connais pas toutes les fonction telle que End() ou Case).

Sinon merci encore

J'avoue que je suis pas terrible dans mes explications et le nom des variables n'est peut-etre pas forcement bien explicite.

N'hésite pas a passer la macro en mode pas a pas avec F8 et jette un oeil dans les variables locales (ça pourra surement aider a la compréhension).

Sub MasqueGroupeVide()
Dim Ref As Integer
Dim derRef As Integer
Dim EnsVide As Long
Dim NbVide As Integer

derRef = Cells(Rows.Count, 2).End(xlUp).Row

derRef correspond a la derniere reference de mon tableau (pour éviter que la macro masque les lignes au dela de ma zone de travail)

For Ref = 3 To derRef

La macro va donc concerner la réferences de la ligne 3 a ma derniere ligne donc la 32 et boucler a "chaque groupe" (avec Ref = EnsVide a la fin de la macro)

    EnsVide = Cells(Ref, 3).End(xlDown).Row - 1

EnsVide correspond a mon groupe.
Suivant la ref donc ligne 3 et colonne 3 [C3] je prend la prochaine valeur en dessous (qui sera une ligne donc Row) et - 1 car on souhaites pas la prochaine valeur mais le derniere cellule vide
=> soit {.End(xlDown)} correspond a une pression de touche Ctrl + Shift + Fleche bas

If EnsVide >= derRef Then EnsVide = derRe

Cette ligne limite le groupe de cellule a ma limite de tableau pour ne pas masquer les colonnes qui ne sont pas concerné pas l'action de masquage (a cause du End down justement)

Traduction, si la cellule du groupe est une ligne en dessous de ma limite de tableau alors on arrete le groupe a la limite du tableau
donc si les 8 dernières lignes du tableau sont vide, les lignes sous le tableau ne seront pas masqué puisque hors limite.

Attention, ça part dans les explications foireuses difficile a expliqué mais "facile" a appliquer.

NbVide = WorksheetFunction.CountBlank(Range(Cells(Ref, 3), Cells(EnsVide, 3)))

NbVide correspond au nombre de cellules vide (grace a CountBlank) on regarde la ligne de ref jusqu'au groupe EnsVide
Ce qui nous donne forcement le nombre de cellule vide collé les une aux autres car elles sont dans le meme groupe.

        Select Case NbVide
        Case Is < 5
                 'si le nombre de cellule vide est inférieur a 5 blablabla
        Case Else
                 'si le nombre de cellule vide est tous sauf ce qu'on a testé avant alors blablabla      => Masquage pour ton cas
        End Select

Select case est une fonction si a multiple condition, en haut du site tu peut trouver des explication plus poussé Lien vers Select case

, cette fonction c'est le feu !

Ref = EnsVide

La réference (ma ligne debut de groupe) passe a ma ligne fin de groupe car on ne souhaite pas que la macro passe plussieurs fois dans le même groupe (=> on saute des lignes en gros).

Next Ref

Et on boucle.

Voila j'ai sorti comme ça me venait, j'imagine que c'est dur de rentrer dans mal tête plein de bordel mais perso je m'y sens bien

A+

D'accord ! Merci beaucoup pour ces explications ! Ca me semble plus limpide, j'irai voir pour la fonction Select Case du coup

Bonne fin de journée

Rechercher des sujets similaires à "cacher lignes aucun contenu dedans"