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...
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.
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 SubBonjour,
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 SubA 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 SubChris,
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,