Affichage de lignes selon leur contenu

refrege

XLDnaute Nouveau
Bonjour,

Je ne parviens pas à trouver une solution propre pour afficher les lignes de mon tableau selon le contenu d'une partie des cellules.
Pour être plus clair, je poste un exemple test : je souhaiterai afficher toutes les lignes contenant AR pour imprimer ces lignes. Puis afficher celles contenant DP...
Le tableau que j'utilise au quotidien est un tableau de planification de taches (les tests 1, 2 , 3...) sont attribués à différentes personnes (AR, DP...). La lecture du tableau complet n'est pas très appréciée par ces personnes et j'aimerai pouvoir leur en faciliter l'utilisation.

Merci pour votre aide,
Bien cordialement,
Stéphane
 

Pièces jointes

  • test.xls
    13.5 KB · Affichages: 42
  • test.xls
    13.5 KB · Affichages: 46
  • test.xls
    13.5 KB · Affichages: 47

gariRO

XLDnaute Nouveau
Re : Affichage de lignes selon leur contenu

Bonjour,
je ne suis pas sur si j'ai bien compris votre problème mais je vous propose d'utiliser les tableaux dynamiques
 

Pièces jointes

  • Copie de test.xls
    26.5 KB · Affichages: 46
  • Copie de test.xls
    26.5 KB · Affichages: 47
  • Copie de test.xls
    26.5 KB · Affichages: 44

refrege

XLDnaute Nouveau
Re : Affichage de lignes selon leur contenu

Bonjour DoubleZero,

Je trouve cette solution très séduisante... par contre, je n'ai pas réussi à la décripter !
Ce que j'ai compris : la liste et la cellule avec Validation de données.
Ce que je n'ai pas compris :
- nommer la zone (gestionnaire de noms ???)
- comment construire le lien entre la zone concernée par l'affichage soumis à condition et la cellule de référence (dans votre exemple G1)
- quelle condition d'affichage créer (je n'ai rien vu comme formule ou mise en forme conditionnelle ou macro)
- peut-on conserver une configuration où le contenu de toutes les cellules est visible ?

Merci pour votre aide,
Bien cordialement,
Stéphane
 

DoubleZero

XLDnaute Barbatruc
Re : Affichage de lignes selon leur contenu

Bonjour à toutes et à tous,

@ Stéphane,

La formule employée pour la zone nommée "plage" peut être consultée en ouvrant le "Gestionnaire de noms, lequel se trouve dans le volet "Formules" (pour la version Excel 2007).

Ladite zone est dynamique afin que l'affichage des données souhaitées puisse évoluer en fonction des nouvelles saisies qui pourraient être ajoutées en colonnes B, C et D.

Le lien entre le choix opéré en G1 et l'affichage qui en résulte est bien le fruit d'une macro, placée dans l'onglet "Feuil1" et non dans un module.

Ci-dessous, le code initial avec quelques commentaires :

VB:
'procédure déclenchée, sans bouton, au gré des changements 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range

'application d'une police de couleur noire pour la zone nommée "plage",
'donc de B2 à D6
[plage].Font.ColorIndex = 1

'pour chaque cellule comprise dans "plage"
For Each c In [plage]

'si la valeur de la cellule correspond à la valeur de G1, nous demandons
'que la couleur de police soit blanche
If c.Value <> [g1] Then c.Font.ColorIndex = 2

Next
End Sub

Pour ce qui concerne l'affichage de l'ensemble des données, il suffit de remplacer le code susvisé par celui-ci :

VB:
'procédure déclenchée, sans bouton, selon les changements intervenant !
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range

'application d'une police de couleur noire pour la zone nommée "plage",
'donc de B2 à D6
[plage].Font.ColorIndex = 1

'pour chaque cellule comprise dans "plage"
For Each c In [plage]

'si la valeur de la cellule correspond à la valeur de G1, nous demandons
'que la couleur de police soit blanche
If c.Value <> [g1] Then c.Font.ColorIndex = 2

'Pour répondre à la nouvelle demande "peut-on conserver une configuration
'où le contenu de toutes les cellules est visible ?"

'Si G1 = Tout, "plage" reçoit une couleur de police noire
If [g1] = "Tout" Then c.Font.ColorIndex = 1
Next
End Sub

Mon niveau n'étant que mauvais, mes explications ne sont peut-être pas claires et, comme je le mentionnais précédemment, il y a certainement une meilleure façon de procéder :eek:.

Bon courage et à bientôt :).
 

Pièces jointes

  • 00 - refrege V2 - afficher masquer.xls
    43 KB · Affichages: 53

refrege

XLDnaute Nouveau
Re : Affichage de lignes selon leur contenu

Bonsoir DoubleZero,

Décidemment, je ne parviens pas à trouver comment définir la "plage"sur Excel 2003.
Par contre j'ai fait une utilisation déformée et simplifiée de ta proposition : une mise en forme condition en fonction du contenu d'une cellule de référence.
Inconvénient : je n'ai pas la fonction "Tout" afficher, mais bon, c'est un défaut acceptable.

Sauf si il y a d'autres idées ou si il y a moyen d'atteindre la "plage" sur excel 2003, je considère la discussion comme résolue.

Merci de votre aide,
Bien cordialement,
Stéphane
 

DoubleZero

XLDnaute Barbatruc
Re : Affichage de lignes selon leur contenu

Bonjour à toutes et à tous,

... Décidemment, je ne parviens pas à trouver comment définir la "plage"sur Excel 2003... Sauf si il y a d'autres idées ou si il y a moyen d'atteindre la "plage" sur excel 2003, je considère la discussion comme résolue...

Une dernière tentative avec le fichier joint, pour une économie de lignes :rolleyes:, par rapport au précédent essai.

VB:
Sub Sélection_afficher()
Dim c As Range
Application.ScreenUpdating = False
'afficher chaque ligne
Cells.EntireRow.Hidden = False
'afficher la colonne M, en supprimer les données
With Columns("M:M")
.EntireColumn.Hidden = False
.ClearContents
End With

'application d'une police de couleur noire pour la zone nommée "plage",
'donc de B2 à D6
[plage].Font.ColorIndex = 1

'pour chaque cellule comprise dans "plage"
For Each c In [plage]

'si la valeur de la cellule correspond à la valeur de G1, nous demandons
'que la couleur de police soit blanche
If c.Value <> [G1] Then c.Font.ColorIndex = 2

'Si G1 = Tout, "plage" reçoit une couleur de police noire
Next

' formule nb.si en colonne M
Range("m2:m" & Range("a65536").End(xlUp).Row).FormulaR1C1 = "=COUNTIF(RC[-11]:RC[-9],R1C7)"

'on masque chaque ligne où il apparaît 0 en colonne M
For Each c In Range("m2:m" & Range("a65536").End(xlUp).Row)

If c = 0 Then c.Rows.EntireRow.Hidden = True

Next
'si G1 = Tout, on lance la macro Tout_afficher
If [G1] = "Tout" Then Call Tout_afficher

'masquer colonne M
Columns("M:M").EntireColumn.Hidden = True

Application.ScreenUpdating = True

End Sub

'*****************************************************

Sub Tout_afficher()

'affichage de toutes les lignes
Cells.Select
Selection.EntireRow.Hidden = False

'restauration de la couleur (police) automatique
With Selection.Font
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
End With
[G1].Select

End Sub

Pour ce qui concerne la difficulté à définir une plage, pourquoi ne pas fournir le véritable fichier de travail (dépourvu de renseignements confidentiels) ?

Bon courage et à bientôt :).
 

Pièces jointes

  • 00 - refrege V3 - afficher masquer.xls
    67.5 KB · Affichages: 33

Efgé

XLDnaute Barbatruc
Re : Affichage de lignes selon leur contenu

Bonjour refrege, gariRO, Bonjour DoubleZero :),
Puisque la plage nommée semble poser difficultés, une version sans.
La dernière ligne est la dernière ligne remplie en colonne a et pour ajouter des colonnes il suffit de changer le for j = 2 to 4 par for j = 2 to "le numéro de la dernière colonne"
J'ai gardé la liste de validation de DoubleZero.
Le code est dans le code la feuille.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Cells(1, 7)) Is Nothing Then
    Application.ScreenUpdating = False
    Rows.Hidden = False
    LstRw = Cells(Rows.Count, 1).End(xlUp).Row
    If Target.Value <> "Tout" Then
        Rows("2:" & LstRw).Hidden = True
        For i = LstRw To 2 Step -1
            'Changer le 4 par le numéro de la dernière colonne (E = 5, F = 6, etc)
            For j = 2 To 4
                If Cells(i, j).Value = Target.Value Then
                    Rows(i).Hidden = False
                    Exit For
                End If
            Next j
        Next i
    End If
    Application.ScreenUpdating = True
End If
End Sub
Cordialement
 

Pièces jointes

  • Refrege(3).xls
    24.5 KB · Affichages: 34

DoubleZero

XLDnaute Barbatruc
Re : Affichage de lignes selon leur contenu

Re-bonjour,

... je ne parviens pas à trouver comment définir la "plage"sur Excel 2003....

J'espère ne mentionner aucune ânerie :confused: en prétendant que le nouveau fichier joint dispense de ce tracas.

VB:
Sub Sélection_afficher()
Dim c As Range
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = False
With Columns("M:M")
.EntireColumn.Hidden = False
.ClearContents
End With
'Etendue de la zone "plage"
Range("b2:d" & Range("a65536").End(xlUp).Row).Name = "plage"
[plage].Font.ColorIndex = 1
For Each c In [plage]
If c.Value <> [G1] Then c.Font.ColorIndex = 2
Next
Range("m2:m" & Range("a65536").End(xlUp).Row).FormulaR1C1 = "=COUNTIF(RC[-11]:RC[-9],R1C7)"
For Each c In Range("m2:m" & Range("a65536").End(xlUp).Row)
If c = 0 Then c.Rows.EntireRow.Hidden = True
Next
If [G1] = "Tout" Then Call Tout_afficher
Columns("M:M").EntireColumn.Hidden = True
Application.ScreenUpdating = True
End Sub

'**********************************************************************

Sub Tout_afficher()
Cells.Select
Selection.EntireRow.Hidden = False
With Selection.Font
    .ColorIndex = xlAutomatic
    .TintAndShade = 0
End With
[G1].Select
End Sub


A bientôt :).
 

Pièces jointes

  • 00 - refrege V4 - afficher masquer.xls
    56 KB · Affichages: 33

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 823
dernier inscrit
ben talha redouane