Masquer des lignes automatiquement

Bonjour à tous,

Malgré plusieurs recherche je n'arrive pas à trouver ce que je souhaite faire exactement. Je ne pense pas que ce soit très compliqué mais je m'y prends mal sûrement.

Je souhaiterai une formule ou un code VBA me permettant de masquer des lignes en fonction de la valeur d'une cellule (voir fichier joint).

En feuil1 j'ai une base de données pour un menu déroulant. En feuil2 je choisis une valeur du menu déroulant qui est reporté en feuil3 via une formule.

Je ne peux pas modifier ce principe qui peut paraître compliqué au premier abord.

Ce que je souhaite dans la feuil3 sans bouton :

lorsque B1 = non alors lignes 2 à 10 masquées

lorsque B11=non alors lignes 12 à 20 masquées

lorsque B21=non alors lignes 22 à 30 masquées.

Merci d'avance pour votre aide précieuse.

Bonjour,

Ci-contre un test via une boucle si vous acceptez que les cellules remplies soient à chaque fois en B1, B11, B21 afin d'avoir systématiquement 10 lignes entre chaque groupe. Attention code sensible à la casse, "non" n'est pas équivalent à "Non" ou "NON"

Sinon merci de me dire que c'est impératif et une solution alternative mais peut être plus longue peut être trouvée.

Sub Masquage()
Dim LR%, i%
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
For i = 1 To LR Step 10
    If ActiveSheet.Cells(i, 2) = "non" Then
    Rows(i + 1 & ":" & i + 9).EntireRow.Hidden = True
    Else
    Rows(i + 1 & ":" & i + 9).EntireRow.Hidden = False
    End If
Next i
End Sub

Cdlt,

Bonjour tout le monde.

Tu es certain de vouloir masquer mission2 s'il y a un "non" en B1 ?

Merci pour vos retours

Tu es certain de vouloir masquer mission2 s'il y a un "non" en B1 ?

normalement il n'est pas masqué, juste les lignes entre les deux ?

@ Ergotime,

oui ça fonctionne, j'avais essayé quelque chose de similaire et je m'aperçois maintenant pourquoi ça ne fonctionne pas exactement comme je le voudrai : je dois exécuter la macro mais j'aimerai que cela se fasse "tout seul", tout du moins en quittant une cellule : est-ce que cela est possible lorsque je quitte la cellule du choix du menu déroulant (cellules B1 à B3 de la feuil2) ?

Bonjour à tous,

Une autre proposition sans bouton

Bonjour,

Une nouvelle proposition par procédure événementielle via le numéro de mission sans passer par un bouclage toutes les 10 lignes. Cependant je pars toujours du principe que 10 lignes vides sont présentes entre chaque mission.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TROUVE$
If Not Application.Intersect(Target, Range("B1:B3")) Is Nothing Then
TROUVE = Worksheets("Feuil3").Columns(1).Find(What:=Target.Offset(0, -1)).Address
    If Target = "non" Then
    Worksheets("Feuil3").Rows(Range(TROUVE).Row + 1 & ":" & Range(TROUVE).Row + 9).EntireRow.Hidden = True
    Else
    Worksheets("Feuil3").Rows(Range(TROUVE).Row + 1 & ":" & Range(TROUVE).Row + 9).EntireRow.Hidden = False
    End If
End If
End Sub

Cdlt,

Comme les intervalles étaient différent entre mission1-mission2 et mission2-mission3, je cherchais la logique.
Alors cette macro devrait suffire :

Sub Macro1()
    Dim i As Byte, j As Byte

    For i = 1 To 30
        If Cells(i, 2) = "non" Then
            Rows(i + 1 & ":" & i + 9).EntireRow.Hidden = True
        End If
    Next i
End Sub

Merci Antoine DL, le résultat à obtenir est bien celui-là mais ma condition de départ est bien la valeur des cellules B1/B11 et B21 de la feuil3 car en feuil2 j'ai d'autres cellules qui peuvent contenir un "non" mais qui ne doivent pas avoir d'impact sur les lignes à masquer

Bonjour,

Avec la jointure proposée dans l'exemple cela devrait fonctionner. Car rien ne nous dit que valeur 1 est équivalent à mission 1, etc ... sauf si nous nous intéressons au descendances des cellules, mais dans ce cas là le code s'en retrouve alourdi, surtout si chaque valeur est utilisée dans diverses formules.

Cdlt,

Je refais mon fichier exemple plus précis car en feuil2 il y beaucoup de données qui n'ont pas d'impact direct sur les cellules masquées mais qui peuvent "gêner". Et mes cellules en feuil3 sont fusionnées plus loin que la colonne B. Désolée...

Ergotamine, ça ne fonctionne pas

Ergotamine, la valeur 1 est bien associée à la mission 1, la valeur 2 à la mission 2, …

Cela fait parti de mes données; d'ailleurs j'ai une formule entre les deux.

Bonjour à tous,

Bizarre, chez moi cela fonctionne. Quelle est la manipulation que vous réalisez ?
Sur le fichier joint, je prend une des missions de la feuille 2 et la passe a non. Les 10 lignes d'en dessous sont alors masquées.

J'ai du refaire le lien entre la feuille 2 et 3 en remplaçant valeur par mission.

Cdlt,

Il vous faut le fichier ?

8masquer.xlsm (19.04 Ko)
image image

Ca me fait ça même en partant de votre dernier fichier envoyé

Optimix, merci pour le fichier mais je souhaite que cela s'exécute sans bouton en quittant une cellule par exemple

En tout cas merci à tous pour votre implication, aide et patience

Re,

Ci joint la proposition complétée avec les nouvelles conditions

Bonjour,

Remplacez la ligne 3 par ce code :

If Not Application.Intersect(Target, Application.Union([B1], [B5], [B8])) Is Nothing Then

Combien y aura-t-il de mission ? Car chacune d'entre elle devra être ajoutée dans l'union des range. Sinon il faudra que je gère le message d'erreur.

Cdlt,

Ergotime,

ça fonctionne très bien quand je modifie les valeurs des missions et ça bug dès que je modifie pour celles qui sont "autres"

Combien y aura-t-il de mission ? Car chacune d'entre elle devra être ajoutée dans l'union des range. Sinon il faudra que je gère le message d'erreur.

5 ou 6 mais je vais l'appliquer plusieurs fois sur d'autres feuilles, je pense que ça reste gérable. Je teste le nouveau code

Rechercher des sujets similaires à "masquer lignes automatiquement"