Masquer Afficher Lignes Automatique

pir

XLDnaute Nouveau
Bonjour à tous,

Dans le tableau joint, je voudrais afficher et masquer automatiquement les lignes en fonction des données introduites sur la feuille 2.

Dans cette deuxième feuille, la colonne D affiche un 2 lorsque la colonne C est remplie. Ce 2 est renvoyé sur la feuille 1 en colonne C. C'est cette valeur qui détermine si la ligne doit être affichée ou non.
Grâce à deux boutons de commande, j'affiche ou je cache les lignes.

Je souhaiterais que cet action se fasse automatiquement dès que je modifie les données de la feuille 2.

Pouvez-vous m'aider ?

Merci
 

Pièces jointes

  • MasquerAfficher.xls
    40 KB · Affichages: 137
  • MasquerAfficher.xls
    40 KB · Affichages: 147
  • MasquerAfficher.xls
    40 KB · Affichages: 149

job75

XLDnaute Barbatruc
Re : Masquer Afficher Lignes Automatique

Bonjour pir,

Les macros pour le fichier (1) :

Code:
Sub Masquer_Ligne_Vide()
Dim adresse$
On Error Resume Next 'si aucune cellule vide
adresse = Sheets("Feuil2").Columns(4).SpecialCells(xlCellTypeFormulas, 2).Address
AfficherLignes
Sheets("Feuil1").Range(adresse).EntireRow.Hidden = True
End Sub

Sub AfficherLignes()
Sheets("Feuil1").Rows.Hidden = False
End Sub

Perso je préfèrerais la version (2) sans les 2 :

Code:
Sub Masquer_Ligne_Vide()
Dim adresse$
On Error Resume Next 'si aucune cellule vide
With Sheets("Feuil2")
  adresse = Intersect(.Rows("3:65536"), .Columns(3)).SpecialCells(xlBlanks).Address
End With
AfficherLignes
Sheets("Feuil1").Range(adresse).EntireRow.Hidden = True
End Sub

Dans les deux cas, les lignes sont masquées quand on modifie la Feuil2.

A+
 

Pièces jointes

  • MasquerAfficher(1).xls
    38 KB · Affichages: 146
  • MasquerAfficher(2).xls
    38.5 KB · Affichages: 147

Fred0o

XLDnaute Barbatruc
Re : Masquer Afficher Lignes Automatique

Bonjour Pir,

Ci-dessous une réponse. La macro recopie la formule Feuil2 lorsqu'un nouveau nom est saisi. Lorsqu'on affaiche la feuil1, le filtre se met en place.

A+
 

Pièces jointes

  • MasquerAfficher.xls
    44.5 KB · Affichages: 154
  • MasquerAfficher.xls
    44.5 KB · Affichages: 157
  • MasquerAfficher.xls
    44.5 KB · Affichages: 162

pir

XLDnaute Nouveau
Re : Masquer Afficher Lignes Automatique

Bonjour à tous

Merci à job75 et à FredOo pour ces solutions qui fonctionnent parfaitement.

J'ai juste oublié de préciser que mes données venaient en fait d'un autre tableau et pas d'une autre feuille du même classeur.

Comme vous avez tous les deux créé un code à mettre sur la feuille 2, je ne sais pas où je dois le mettre puisque la feuille 2 est en réalité vide.

Si vous pouviez prendre cet élément en compte et me proposer une autre solution, je vous en serais très reconnaissant.
 

Fred0o

XLDnaute Barbatruc
Re : Masquer Afficher Lignes Automatique

re-bonjour pir,

2 solutions s'offrent à toi : soit tu modifie le code pour qu'il pointe sur le bon tableau de la bonne feuille (si tu sais faire), sinon tu nous donne ces éléments ou tu joins les bons fichiers (sans données sensibles) et nous te donnons la solution.

A+
 

pir

XLDnaute Nouveau
Re : Masquer Afficher Lignes Automatique

Re-bonjour FredOo et job75,

Toutes mes excuses pour m'être mal exprimé dans mon premier post.
J'ai remis mon problème dans deux fichiers distincts. Ce que je souhaite, c'est que si j'encode une date de fin ou que j'en supprime une dans Données, les lignes correspondantes dans MasquerAfficher soient automatiquement mises à jour.

J'espère avoir été plus clair et que vous pourrez m'aider.

A+
 

Pièces jointes

  • MasquerAfficher.zip
    16.7 KB · Affichages: 53
  • MasquerAfficher.zip
    16.7 KB · Affichages: 49
  • MasquerAfficher.zip
    16.7 KB · Affichages: 45

job75

XLDnaute Barbatruc
Re : Masquer Afficher Lignes Automatique

Re,

Les macros dans le classeur "MasquerAfficher" :

Code:
Sub Masquer_Ligne_Vide()
AfficherLignes
On Error Resume Next 'si aucune cellule vide
ThisWorkbook.Sheets("Feuil1").Columns(3).SpecialCells(xlCellTypeFormulas, 2).EntireRow.Hidden = True
End Sub

Sub AfficherLignes()
ThisWorkbook.Sheets("Feuil1").Rows.Hidden = False
End Sub

La macro dans le classeur "DonneesMasquerAfficher" (le nom "Données" ne convenait pas aux liaisons !) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nom$
nom = "MasquerAfficher.xls"
On Error Resume Next
If IsError(Workbooks(nom).Name) Then 'si le classeur n'est pas ouvert, on l'ouvre
  Application.ScreenUpdating = False
  Workbooks.Open ThisWorkbook.Path & "\" & nom 'doit être dans le même répertoire
  ThisWorkbook.Activate
End If
Application.Run nom & "!Masquer_Ligne_Vide" 'lance la macro de l'autre classeur
End Sub

Si vous voulez éviter les colonnes avec les "2" dites-le, il suffira de modifier la 1ère macro (pas très difficile, mais il faut ouvrir le 2ème classeur).

Nota : les 2 fichiers doivent être dans le même dossier (répertoire).

A+
 

Pièces jointes

  • MasquerAfficher.zip
    18.8 KB · Affichages: 45
  • MasquerAfficher.zip
    18.8 KB · Affichages: 46
  • MasquerAfficher.zip
    18.8 KB · Affichages: 44
Dernière édition:

pir

XLDnaute Nouveau
Re : Masquer Afficher Lignes Automatique

Re,

Si vous pouvez éviter les 2, ce serait encore mieux.
Serait-il également possible que le second classeur ne s'ouvre pas à chaque modification dans le premier. Dans la pratique, il ne sera en effet consulté qu'occasionnellement.

Merci

A+
 

job75

XLDnaute Barbatruc
Re : Masquer Afficher Lignes Automatique

Re,

En évitant les "2" et sans ouvrir le 2ème fichier :

- formule en A3 du fichier "MasquerAfficher" :

Code:
=SI(ESTNUM([DonneesMasquerAfficher.xls]Feuil1!$C3);[DonneesMasquerAfficher.xls]Feuil1!$A3;"")

on remarquera le "" plutôt que l'espace " "

- la macro Masquer_Ligne_Vide :

Code:
Sub Masquer_Ligne_Vide()
Dim cel As Range, plage As Range
Application.ScreenUpdating = False
AfficherLignes
With ThisWorkbook.Sheets("Feuil1")
  For Each cel In .Range("A3", .Range("A65536").End(xlUp))
    If cel = "" Then Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
  Next
End With
If Not plage Is Nothing Then plage.EntireRow.Hidden = True
End Sub

A+
 

Pièces jointes

  • MasquerAfficher.zip
    19.6 KB · Affichages: 42
  • MasquerAfficher.zip
    19.6 KB · Affichages: 36
  • MasquerAfficher.zip
    19.6 KB · Affichages: 36

pir

XLDnaute Nouveau
Re : Masquer Afficher Lignes Automatique

Bonsoir job75

Presque parfait, le classeur MasquerAfficher s'ouvre toujours automatiquement dès que je modifie les données.
Est-il possible de ne prendre les modif en compte qu'à l'ouverture de MasquerAfficher ?

A +
 

job75

XLDnaute Barbatruc
Re : Masquer Afficher Lignes Automatique

Re,

Voilà on y arrive enfin... Donc en définitive, maintenant :

- dans le fichier MasquerAfficher, code de Module1 :

Code:
Sub Masquer_Ligne_Vide()
Dim cel As Range, plage As Range
Application.ScreenUpdating = False
AfficherLignes
With ThisWorkbook.Sheets("Feuil1")
  For Each cel In .Range("A3", .Range("A65536").End(xlUp))
    If cel = "" Then Set plage = Union(cel, IIf(plage Is Nothing, cel, plage))
  Next
End With
If Not plage Is Nothing Then plage.EntireRow.Hidden = True
End Sub

Sub AfficherLignes()
ThisWorkbook.Sheets("Feuil1").Rows.Hidden = False
End Sub

- dans le fichier MasquerAfficher, code de ThisWorkbook :

Code:
Private Sub Workbook_Open()
Masquer_Ligne_Vide
End Sub

- dans le fichier DonneesMasquerAfficher, code de Feuil1 (au cas où le 1er fichier est ouvert) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.Run "MasquerAfficher.xls!Masquer_Ligne_Vide" 'fonctionne si le classeur est ouvert
End Sub

Edit : j'avais oublié ThisWorkbook dans les 2 premières macros...

A+
 

Pièces jointes

  • MasquerAfficher.zip
    19.2 KB · Affichages: 41
  • MasquerAfficher.zip
    19.2 KB · Affichages: 38
  • MasquerAfficher.zip
    19.2 KB · Affichages: 40
Dernière édition:

job75

XLDnaute Barbatruc
Re : Masquer Afficher Lignes Automatique

Bonjour pir, le forum,

Il y avait des erreurs dans mon post précédent :eek: j'ai corrigé.

Voici une autre méthode, meilleure à mon sens.

1) En colonne A du fichier MasquerAfficher(1), les formules renvoie 0 :

Code:
=SI(ESTNUM('[DonneesMasquerAfficher(1).xls]Feuil1'!$C3);'[DonneesMasquerAfficher(1).xls]Feuil1'!$A3;[COLOR="Red"]0[/COLOR])

Pour ne pas afficher les 0, les cellules sont au format personnalisé 0;;

2) Toutes les macros sont maintenant dans le code de Feuil1 de ce fichier :

Code:
Private Sub CommandButton2_Click()
AfficherLignes
End Sub

Private Sub Worksheet_Calculate() 'se déclanche quand une formule est recalculée
Masquer_Ligne_Vide
End Sub

Sub Masquer_Ligne_Vide()
AfficherLignes
On Error Resume Next 'si aucune cellule n'est numérique
Application.EnableEvents = False
Me.Columns(1).SpecialCells(xlCellTypeFormulas, 1).EntireRow.Hidden = True
Application.EnableEvents = True
End Sub

Sub AfficherLignes()
Application.EnableEvents = False
Me.Rows.Hidden = False
Application.EnableEvents = True
End Sub

Application.EnableEvents = False est indispensable, autrement l'affichage ou le masquage des lignes créeraient l'évènement Calculate.

A+
 

Pièces jointes

  • MasquerAfficher(1).zip
    16.2 KB · Affichages: 58

pir

XLDnaute Nouveau
Re : Masquer Afficher Lignes Automatique

Bonjour à tous et particulièrement à job 75,

Toutes mes excuses pour ne pas avoir donné de suite à votre dernier post. J'ai eu des problèmes de liaison internet et mon FAI a mis pas mal de temps à les résoudre.

Votre dernière solution était parfaite et j'ai eu tout le temps de l'adapter à mes fichiers d'origine. Tout marche nickel.

Un tardif mais tout grand merci.

A+
 

Discussions similaires

Réponses
5
Affichages
195
Réponses
8
Affichages
444

Statistiques des forums

Discussions
312 679
Messages
2 090 846
Membres
104 677
dernier inscrit
soufiane12