Reporter le masquage de lignes

Bonjour,

Débutant avec excel, je cherche une solution pour reporter le masquage de lignes d'un onglet à l'autre.

En clair, j'ai une base de données sur un onglet "check-up", colonne A, lignes 5 à 70, que je masque en fonction des besoins.

Les valeurs de ces cellules sont reportées sur différents onglets nommés de "1 à 20", en colonne A, lignes 10 à 75.

Je souhaite que mon action de masquage des lignes sur l'onglet "check-up" se reporte sur les lignes correspondantes dans les onglets de "1 à 20".

Est-ce faisable? Comment puis-je réaliser cela? Dois-je passer par une macro ou non?

Merci d'avance,

Cordialement,

Bonjour

De façon générale reporter les données sur plusieurs onglets tourne souvent à l'usine à gaz

Si les onglets sont superposables, tu peux tous les sélectionner avant de masquer tes lignes et agir ainsi sur le groupe

Ne pas oublier de sortir du mode groupe de travail ensuite

Bonjour et merci pour ton intérêt,

Effectivement, je pense que mon fichier demande encore à être amélioré et se limite à mes compétences actuelles. Je le fait évoluer au fil de mon apprentissage d'excel.

Le groupe de travail dont tu fais mention ne fonctionne pas dans mon cas car, j'ai omis de le signaler, j'utilise un filtre dans l'onglet "Check-up" qui masque les variables non souhaitées. De fait, ce filtre n'ai pas applicable dès lors que que je sélectionne un second onglet.

Cordialement,

RE

Si le masquage est effectivement issu d'un filtre, la solution du groupe de travail n'est pas applicable

Le filtre n'est au sens Excel pas un évènement donc difficile à pister pour programmer une action.

Comme je l'ai dit, il pourrait être utile de revoir la conception du classeur car tu risques d'empiler d'autres contraintes

Sans exemple concret difficile de t'aider à avancer dans cette voie

En plus ta version déjà un peu ancienne peut limiter les options...

4classeur1.xlsm (16.33 Ko)

Bonsoir Chris,

J'ai un peu avancé dans mon coin pour la création de la VBA dont j'ai besoin et travaille à l'élaboration de celle-ci sur le fichier test "classeur1" ci-joint.( je ne peux malheureusement pas partager le fichier d'origine pour raison professionnelle)

J'opte pour une condition en incrémentant une valeur en "colonne G" selon l'état d'affichage dans "feuil2". Puis le report de cette valeur en "onglet1" génère le même affichage/masquage de lignes.

Je touche au but cependant le "Else" de ma fonction "If" en fin de VBA semble ne pas fonctionner correctement? Je n'arrive pas a réafficher les lignes après un masquage.

En seconde étape, j'ai tenté d'améliorer le code sur le "classeur2" pour le rendre moins indigeste.

5classeur2.xlsm (19.47 Ko)

Mais là encore pas de fonctionnement "Else" des fonctions "If" ?

Si tu as un peu de temps à m'accorder sur le sujet.

Merci

Bonjour

Colonne G inutile

Sub actualiser()
'
' Masquer/Afficher les lignes onglets de pointage

 Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If Not ws.Name = [Feuil2].Name Then
            For Each ligne In ws.Range("4:" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row).Rows
                ligne.EntireRow.Hidden = [Feuil2].Rows(ligne.Row).EntireRow.Hidden
            Next ligne
        End If
    Next ws

End Sub

Bonjour,

Merci, je teste cela dès que possible et je vais tenter d'interpréter et de comprendre ton codage.

Je te tiens informé.

Cordialement

Bonsoir Chris,

Ton code fonctionne parfaitement merci.

Toutefois, après application, la suppression du filtrage en "Feuil2" ne fait pas réapparaître les lignes masquées et c'est logique.

Je pense donc à mettre en place un RAZ masquage permettant de ré afficher toutes les lignes. Si tu as une idée plus simple, je prends.

Pour finir, et afin d'adapter le codage au fichier de destination final, je dois le modifier pour n'appliquer le masquage qu'à certains onglets du classeur.

De fait, je vais devoir utiliser l'index des feuilles concernées (le nom étant renommé suivant le besoin). Puis-je remplacer :

For Each ws In ThisWorkbook.Worksheets par For Each ws In Sheets(Array(33, 35, 37, etc...))

ou es-ce plus complexe?

Cordialement,

Bonjour

Le code masque et démasque puisqu'il applique aux feuilles la même logique que sur Feuil2 sauf que j'avais fait une erreur de définition de la plage

Sub actualiser()
'
' Masquer/Afficher les lignes onglets de pointage

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        If Not ws.Name = [Feuil2].Name Then
            For Each ligne In ws.Range("4:" & [Feuil2].Range("A4").CurrentRegion.Rows.Count + 2).Rows
                ligne.EntireRow.Hidden = [Feuil2].Rows(ligne.Row).EntireRow.Hidden
            Next ligne
        End If
    Next ws

Application.Calculation = xlCalculationAutomatic

End Sub

A noter que le masquage et démasquage des lignes provoque des recalculs qui ralentissent : j'ai ajouté des lignes pour éviter cela

Bonjour Chris,

Génial!!! Bon j'avoue avoir encore un peu de mal à comprendre le codage.

Effectivement j'ai appris hier que : "Application.ScreenUpdating = False" et "Application.Calculation = xlCalculationManual" permettaient un gain de temps.

Pour terminer, il me faut maintenant adapter ce programme au classeur de destination final. Contrairement à ce classeur d'essai, la macro ne doit s'opérer que sur certaines feuilles (24 au total dont les index ne se suivent pas pour bien faire, et qui sont renommées au besoin).

Si j’interprète correctement ton codage, dans cet exemple, tu appliques cette macro à toutes les feuilles sauf la feuille 2? C'est bien cela?

Est-il possible de l'appliquer à certaines feuilles suivant leur index sous forme d'un Sheets(Array(33, 35, 37, etc...)) par exemple??

Cordialement

RE

Pas fan des index qui bougent en même temps que les onglets.

Je préfère garder le codename

Sub actualiser()
'
' Masquer/Afficher les lignes onglets de pointage

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet, lesfeuilles As Sheets

    Set lesfeuilles = Sheets(Array([Feuil1].Name, [Feuil3].Name, [Feuil5].Name))
    For Each ws In lesfeuilles
        For Each ligne In ws.Range("4:" & [Feuil2].Range("A4").CurrentRegion.Rows.Count + 2).Rows
            ligne.EntireRow.Hidden = [Feuil2].Rows(ligne.Row).EntireRow.Hidden
        Next ligne
    Next ws

Application.Calculation = xlCalculationAutomatic

End Sub

Chris,

Après adaptation sur le classeur final, la macro fonctionne parfaitement

Un énorme merci pour ta patience et ton partage d'expérience. Je comprends le codage cependant je serais incapable de le créer à ce stade, il me faut encore de l'apprentissage.

Encore une fois merci pour ton aide et à bientôt.

Cordialement,

Rechercher des sujets similaires à "reporter masquage lignes"