Masquer une ligne automatiquement

Bonjour à tous

J'espère que vous allez bien

Mon problème concerne une macro :

Si dans une case, disons B2, l'utilisateur met une date "30/01/2020", et bien la ligne entière qui contient le 30/01/2020 (en l'occurence 2) se masque automatiquement dès que l'utilisateur a mis une date.

Cette macro doit s'appliquer à toute la colonne B (Si l'utilisateur met une date en B11, la ligne 11 se masque, s'il met une date en B29, la ligne 29 se masque).

Et bien sûr, une macro rattachée à un bouton qui afficherait toutes les lignes masquées et masquerait à nouveau ces lignes.

Merci énormément d'avance à la personne qui m'aidera,

Bonne journée

Cédric

Bonjour

Regarde si cela convient

Cordialement

Bonsoir cedric1523, amadeus , le forum,

J'ai interprété la demande différemment:

  • Si saisie date en B2 : on masque les lignes de la colonne B qui correspondent à B2

et

  • Si saisie date en colonne B = B2, on masque la ligne
(mais alors comment compléter le restant de la ligne si elle se masque automatiquement ? )
  • Si B2 vide : on affiche tout
9cedric.xlsm (18.24 Ko)

Cordialement,

Bonjour cedric1523,

Voici le bout de code dont tu as besoin pour masquer la ligne si une date est notée dans la colonne B

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then
    If IsDate(Target) Then
        Target.EntireRow.Hidden = True
    End If
End If

End Sub

A mettre dans ta feuille (Microsoft Excel Objects) où tu veux que ça s'exécute.

Pour afficher/Masquer tes lignes avec ton bouton peux-tu me donner sur quelle portée cela doit s'exécuter (lignes/colonnes)

Sinon je t'enverrai un truc un peu bourrin

Merci Amadéus, xorsankukai et PinkRabbit

Si saisie date en B2 : on masque (les) La lignes 2 de la colonne B qui correspondent à B2

(mais alors comment compléter le restant de la ligne si elle se masque automatiquement ? ) pas besoin car j'ai pris comme exemple B mais moi ca sera F ou G

Par contre Amadéus,

J'ai une question, peut-on masquer la ligne seulement si il y a une date, par exemple 31/01/20, si l'utilisateur met la lettre "x" en colonne B5, la ligne 5 ne se masque pas.

J'ai un titre dans la cellule B1, la formule peut-elle commencer à la ligne 2 ?

Merci

Très bonne journée

Salut cedric1523,

Utilise ce code qui ne prend en compte que les dates (if IsDate(Target))

Pour utiliser une autre colonne change la valeur 2 par le numéro de la colonne où tu souhaites que ça s'applique

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then
    If IsDate(Target) Then
        Target.EntireRow.Hidden = True
    End If
End If

End Sub

Merci PinkRabbit

Par contre pouvez vous m'aider excel m'indique une erreur :

Erreur de compilation :

Nom ambigu détecté : Worksheet_Change

(Feuil3 12:0)

Voici le code dans ma feuille :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then

If IsDate(Target) Then

Target.EntireRow.Hidden = True

End If

End If

End Sub

Dim Valeur As Variant

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1:A2")) Is Nothing Then

Application.EnableEvents = False

If Target = "" Then Target = Valeur

Application.EnableEvents = True

End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Valeur = Target.Value

End Sub

Salut Cedric1523,

Ton erreur vient du fait que tu as 2 procédures évènementielles (Worksheet_Change)

Tu ne peux en avoir qu'une par feuille.

Il faut que tu regroupes les deux en une

Je te propose

Dim Valeur As Variant

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then
    If IsDate(Target) Then
        Target.EntireRow.Hidden = True
    End If
End If

If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
    Application.EnableEvents = False
If Target = "" Then Target = Valeur
    Application.EnableEvents = True
End If
End Sub

Merci PinkRabbit

mais la deuxième partie du code ne fonctionne pas, en fait je voulais interdire d'effacer le contenu de la cellule A1 ou A2

Interdire d'effacer le contenu de la cellule A1 et A2

Merci pour vos astuces

OK je n'ai pas trop cherché, j'ai juste compilé tes 2 procédures évènementielles

Le mieux pour éviter de toucher aux lignes 1 & 2 serait de protéger ta feuille...

Pour gérer la protection :

Onglet révision > Protéger la feuille

Pour définir les cellules à protéger c'est dans Formats > Onglet Protection

Si tu ne connais pas trop VBA utilise les fonctionnalités d'Excel qui répondront souvent à tes besoins

Le mieux est surtout d'avoir la solution la plus simple et la plus efficace.

J'ai réussi, par contre il me met un message quand je clique sur "afficher tout",

Microsoft Visual Basic

Erreur d'exécution "7"

Mémoire insuffisante

Abandonner Déboguer

Ca veut dire quoi ce message ?

Si je clique sur déboguer, il me met la ligne "Cells.Select" en jaune de la macro (Sub Afficher_Tout())

Salut Cédric,

J'ai pas ton code pour afficher tout

Mais s'il te met "Mémoire insuffisante" c'est que tu as saturé ta RAM, probablement parce que tu as appliqué ton "Afficher tout" sur une plage un peu trop grande (genre 1million de lignes)

C'est pour ça que je te demandais ta plage de travail (ligne colonne) pour limiter le champ d'application de la macro

Tu as un solution là

https://www.excel-downloads.com/threads/afficher-toutes-les-lignes-et-colonnes-masquees-dune-feuille.66011/

Voici mon code sur la feuille :

Dim Valeur As Variant

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then

If IsDate(Target) Then

Target.EntireRow.Hidden = True

End If

End If

If Not Intersect(Target, Range("A1:A2")) Is Nothing Then

Application.EnableEvents = False

If Target = "" Then Target = Valeur

Application.EnableEvents = True

End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Valeur = Target.Value (c'est la ligne qui est en jaune)

End Sub

voici mon module 1 :

Sub Afficher_Tout()

Cells.Select

Selection.EntireRow.Hidden = False

Range("A1").Select

End Sub

Évite d'utiliser des "Select", ça te consomme une mémoire de dingue alors que tu n'en as absolument pas besoin

L'enregistreur de macro le fait mais c'est parce qu'il fonctionne selon tes manipulations sous Excel.

Ici t'es dans le code, ne pense pas "sélection de cellule". Va à l'essentiel, modifier les propriétés de tes cellules.

Voilà le code

Sub Afficher_Masquer()
    Cells.EntireRow.Hidden = False
End Sub

Ca devrait faire le taf

Super ca fonctionne, encore un très grand merci PinkRabbit

Content que ça fonctionne

Et surtout

Rechercher des sujets similaires à "masquer ligne automatiquement"