Masquer automatiquement des lignes

BenRoger

XLDnaute Nouveau
Bonjour à tous,
Je soumets à votre sagacité une question pour laquelle j'ai trouvée des pistes mais pas tout à fait de réponse en dépit de sujets similaires consultées sur le forum.
Je dois faire disparaître automatiquement des lignes lorsque le formulaire que j'ai créé en donne le signal à partir d'une liste déroulante.
Vous pouvez vous reporter au tableau que j'ai mis en pièce jointe pour être plus clair. Dans ce tableau, pour chaque rubrique, j'ai créé la possibilité de sélectionner quatre choix à partir d'une liste déroulante : "Pour info", "oui", "non", "sans objet". Je peux faire figurer ce choix en le sélectionnant pour qu'il apparaisse dans la colonne E intitulée "Etat". Dans deux cas de figure, la sélection "sans objet" et la sélection "non", je voudrais faire disparaître automatiquement les lignes qui sont situées sous la rubrique : par exemple 3 à 5 ou 7 à 9 ou 11 à 13.
Ce tableau est bien sûr très simplifié, il va compter des centaines de lignes, d'où l'intérêt d'automatiser cette fonction, pour pouvoir n'imprimer que ce qui est nécessaire à l'arrivée.

Dans la foulée, j'ai cherché dans les mises en forme où je puisse faire apparaitre en colonne F un icône V ou X ou ! en fonction du choix. Par exemple, je coche dans la liste déroulante "pour info", apparaît automatiquement un icône "!" dans la colonne F à la ligne correspondante, un "v" pour oui, un "X" pour non... Je pédale aussi dans la semoule même si je crois qu'il ne faut pas passer par une macro pour cela.

Bref, si vous avez des idées...

Merci à tous.;)

Ben
 

Pièces jointes

  • Doc2W.xlsx
    10.3 KB · Affichages: 121

Dull

XLDnaute Barbatruc
Re : Masquer automatiquement des lignes

Salut BenRoger, le Forum

Essaye éventuellement ce code dans le Module de la Feuille Formulaire

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([E2,E6,E10], Target) Is Nothing Then
    If Target = "Non" Or Target = "Sans Objet" Then Rows("3:5").RowHeight = 0
    If Target = "Oui" Or Target = "Pour Info" Then Rows("3:5").RowHeight = 12.75
End If
End Sub
Bonne Journée
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Masquer automatiquement des lignes

Bonjour Ben, Dull, bonjour le forum,

Je te propose la même macro événementielle Change que Dull mais je crois que nous n'avons pas compris de la même manière...
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
If Target.Column <> 5 Then Exit Sub 'si le changement a lieu ailleurs que dans la colonne E, sort de la procédure
If Target.Row < 2 Then Exit Sub 'si le changement à lieu dans la ligne 1, sort de la procédure
 
If Target.Offset(0, -2) <> "" Then 'condition 1 : si le changement a lieu dans une cellule où le "contenu" n'est pas vide
    If Target.Value = "Non" Or Target.Value = "Sans Objet" Then 'condition 2 : si la valeur de la cellule est "Non" ou "Sans Objet"
        'masque les ligne en dessous jusqu'à la prochaine rubrique
        Rows(Target.Row + 1 & ":" & Target.End(xlDown).Row - 1).Hidden = True
    Else 'sinon
        'affiche les ligne en dessous jusqu'à la prochaine rubrique
        Rows(Target.Row + 1 & ":" & Target.End(xlDown).Row - 1).Hidden = False
    End If 'fin de la condition 2
End If 'fin de la condition 1
End Sub

Édition :

Merci Dull pour ta remarque j'ai modifié la pièce jointe...
 

Pièces jointes

  • Ben_v01.xlsm
    14.9 KB · Affichages: 106
Dernière édition:

Dull

XLDnaute Barbatruc
Re : Masquer automatiquement des lignes

Salut Robert:), re le fil

je viens de me relire et effectivement tu peux le dire franchement J'aimerdouilléquelquepart :eek: En faisant les tests j'ai oublié de mettre la correspondance avec les autres lignes Honteàmoi :mad:

Re re lecture et ouverture du code de ton fichier. c'est malin d'avoir mis les ' au début de tes lignes de codes... maintenant je comprend pourquoi :D

Je met quand même le code complet

Code:
[COLOR=BLUE]Private Sub[/COLOR] Worksheet_Change([COLOR=BLUE]ByVal[/COLOR] Target [COLOR=BLUE]As[/COLOR] Range)
[COLOR=BLUE]If Not[/COLOR] Intersect([E2], Target) [COLOR=BLUE]Is Nothing Then[/COLOR] Rows("3:5").RowHeight = IIf(Target = "Non" [COLOR=BLUE]Or[/COLOR] Target = "Sans Objet", 0, 12.75)
[COLOR=BLUE]If Not[/COLOR] Intersect([E6], Target) [COLOR=BLUE]Is Nothing Then[/COLOR] Rows("7:9").RowHeight = IIf(Target = "Non" [COLOR=BLUE]Or[/COLOR] Target = "Sans Objet", 0, 12.75)
[COLOR=BLUE]If Not[/COLOR] Intersect([E10], Target) [COLOR=BLUE]Is Nothing Then[/COLOR] Rows("11:13").RowHeight = IIf(Target = "Non" [COLOR=BLUE]Or[/COLOR] Target = "Sans Objet", 0, 12.75)
[COLOR=BLUE]End Sub[/COLOR]
Bonne Journée
 

Pièces jointes

  • Doc2W.xls
    38.5 KB · Affichages: 94
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Masquer automatiquement des lignes

Ce tableau est bien sûr très simplifié, il va compter des centaines de lignes, d'où l'intérêt d'automatiser cette fonction, pour pouvoir n'imprimer que ce qui est nécessaire à l'arrivée.

Dans la foulée, j'ai cherché dans les mises en forme où je puisse faire apparaitre en colonne F un icône V ou X ou ! en fonction du choix. Par exemple, je coche dans la liste déroulante "pour info", apparaît automatiquement un icône "!" dans la colonne F à la ligne correspondante, un "v" pour oui, un "X" pour non... Je pédale aussi dans la semoule même si je crois qu'il ne faut pas passer par une macro pour cela.

Dull ton code en dur ne vas pas s'adapter (première remarque de Ben) !

Ben on avait oublié (autant dire "on navet oublié" dans ce cas là...) la seconde partie de ton problème. Voici donc un version 02 qui la traite...

Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
If Target.Column <> 5 Then Exit Sub 'si le changement a lieu ailleurs que dans la colonne E, sort de la procédure
If Target.Row < 2 Then Exit Sub 'si le changement à lieu dans la ligne 1, sort de la procédure
Select Case Target.Value 'agit en fonction de la valeur de la cellule éditée
    Case "Pour Info" 'cas "Pour info"
        Target.Offset(0, 1).Value = "!" 'la cellule à droite prend la valeur : "!"
    Case "Oui" 'cas "Oui"
        Target.Offset(0, 1).Value = "V" 'la cellule à droite prend la valeur : "V"
    Case "Non" 'cas "Non"
        Target.Offset(0, 1).Value = "X" 'la cellule à droite prend la valeur : "X"
    Case "", "Sans Objet" 'cas "Sans Objet" ou cellule effacée
        Target.Offset(0, 1).Value = "" 'la cellule à droite est effacée aussi
End Select
If Target.Offset(0, -2) <> "" Then 'condition 1 : si le changement a lieu dans une cellule où le "contenu" n'est pas vide
    If Target.Value = "Non" Or Target.Value = "Sans Objet" Then 'condition 2 : si la valeur de la cellule est "Non" ou "Sans Objet"
        'masque les ligne en dessous jusqu'à la prochaine rubrique
        Rows(Target.Row + 1 & ":" & Target.Offset(0, -2).End(xlDown).Row - 1).Hidden = True
    Else 'sinon
        'affiche les ligne en dessous jusqu'à la prochaine rubrique
        Rows(Target.Row + 1 & ":" & Target.Offset(0, -2).End(xlDown).Row - 1).Hidden = False
    End If 'fin de la condition 2
End If 'fin de la condition 1
End Sub
 

Pièces jointes

  • Ben_v02.xlsm
    17.3 KB · Affichages: 106
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Masquer automatiquement des lignes

Bonsoir à tous


Pourquoi ne pas utiliser le filtre automatique ?
(ou le filtre élaboré si plus d'accointances avec celui-ci)
(Je dis cela, car pour moi , l'extension : xlsx signifie pas de macro ;) )
 

BenRoger

XLDnaute Nouveau
Re : Masquer automatiquement des lignes

Bonjour et merci à tous. Je suis à la fois surpris par la qualité et par la rapidité de vos réponses. J'ai testé en téléchargeant, évidemment, ça marche. Je vais de mon côté faire un copié-collé dans mon tableau définitif en intégrant le code que vous m'avez proposé. Je reviens vers vous (probablement) avec un nouveau tableau pour vous montrer le résultat.
Hé vous savez quoi ? Merci
Ben
PS : Staple1600, ton idée a l'air bonne également. Mais je ne suis pas sûr de savoir comment le faire...
 

BenRoger

XLDnaute Nouveau
Re : Masquer automatiquement des lignes

Bonjour à tous,
Merci de votre réponse. Je suis impressionné par leur rapidité et leur qualité. Je vais faire un copié-collé de votre code et l'adapter à mon tableau définitif. Je reviens vers vous pour vous montrer le résultat. Hé vous savez quoi ? Merci !
Ben
PS : Staple 1600, ton idée a l'air bonne mais je suis incapable d'envisager comment cela pourrait se mettre en place pour chaque rubrique indépendamment des autres.
 

BenRoger

XLDnaute Nouveau
Re : Masquer automatiquement des lignes

Bonjour à tous,
Merci de vos réponses. Je suis impressionné par leur rapidité et leur qualité. Je vais faire un copié-collé de votre code et l'adapter à mon tableau définitif. Je reviens vers vous pour vous montrer le résultat. Hé vous savez quoi ? Merci !
Ben
PS : Staple 1600, ton idée a l'air bonne mais je suis incapable d'envisager comment cela pourrait se mettre en place pour chaque rubrique indépendamment des autres.
 

Discussions similaires

Statistiques des forums

Discussions
312 753
Messages
2 091 673
Membres
105 041
dernier inscrit
CHERRIERE