Masquer / Afficher

Le
Horace Rochat
Voil deux macros complmentaires:
1- la premire sert masquer les lignes et colonnes
inutilises (toutes leurs cellules sont vides) des
feuilles d'un classeur
2- la seconde, c'est l'opration inverse, sert afficher
toutes les lignes et colonnes des feuilles du classeur

J'ai des problmes avec la premire (Sub HideUnused)

Pourriez-vous me dire:
1- pourquoi parfois j'ai une indication de bogue, mais
que la macro est quand mme excute
2- pourquoi sur certaines feuilles du classeur, certaines
colonnes ayant du contenu sont quand mme masques par la
macro
3- comment faire pour que la macro n'opre que sur les
feuilles du classeur actif (et pas sur tous les classeurs
ouverts)

Merci
HR


Sub HideUnused()
ActiveSheet.Unprotect
Set dbut = ActiveSheet
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
x = Cells(Rows.Count, "a").End(xlUp).Row + 1
'MsgBox x
ws.Rows(x & ":65536").Hidden = True
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'MsgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden =
True
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
dbut.Select
Set dbut = Nothing
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub


Sub UnhideUnused()
ActiveSheet.Unprotect
Set dbut = ActiveSheet
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
Rows.Hidden = False
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'msgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden =
False
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
dbut.Select
Set dbut = Nothing
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Hubert-Félix de la Guerière
Le #363479
Cher Horace

dussais-je fomenter une incongruité, je suppose que
1- l'improtection ne vise que la feuille active, si une autre est protègée,
bug peut survenir
2- Il me semblerait à la lecture de
x = Cells(Rows.Count, "a").End(xlUp).Row + 1
que seule la 1ere cellule vide en partant du bas de la colonne A est testée
(rows.count pourrait d'ailleurs être fort avantageusement remplacer par
65536)
Or si en colonne A, la dernière cellule utilisé est A20, et que, fort
malencontreusement, il existe un C25, tout sera masqué à partir de la ligne
20, ce qui est, ma foi, peu le but envisagé dans le projet que vous avez
soumis à la docte assemblée
Cette remarque est identique pour les colonnes, si la ligne 1 n'est occupée
qu'à la colonne D, mais qu'il exista un G40, vous ne vîtes plus à partir de
la colonne D
Une solution ?

Sub Masque()
rep = Mid(Sheets(1).UsedRange.Address(False, False), Application.Find(":",
Sheets(1).UsedRange.Address(False, False), 1) + 1, 99)
ligne = Range(rep).Row + 1
colonne = Range(rep).Column + 1
Rows(ligne & ":65536").Hidden = True
Range(Cells(1, colonne), Cells(1, 256)).EntireColumn.Hidden = True
End Sub

D'autre part, je suis surpris par
Set début = ActiveSheet
que point ne retrouve dans le reste de la procédure

Bon courage, mon ami !

Hubert-Félix


"Horace Rochat" message de news:87cb01c4047d$b3f8d9f0$
Voilà deux macros complémentaires:
1- la première sert à masquer les lignes et colonnes
inutilisées (toutes leurs cellules sont vides) des
feuilles d'un classeur
2- la seconde, c'est l'opération inverse, sert à afficher
toutes les lignes et colonnes des feuilles du classeur

J'ai des problèmes avec la première (Sub HideUnused)

Pourriez-vous me dire:
1- pourquoi parfois j'ai une indication de bogue, mais
que la macro est quand même exécutée
2- pourquoi sur certaines feuilles du classeur, certaines
colonnes ayant du contenu sont quand même masquées par la
macro
3- comment faire pour que la macro n'opère que sur les
feuilles du classeur actif (et pas sur tous les classeurs
ouverts)

Merci
HR


Sub HideUnused()
ActiveSheet.Unprotect
Set début = ActiveSheet
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
x = Cells(Rows.Count, "a").End(xlUp).Row + 1
'MsgBox x
ws.Rows(x & ":65536").Hidden = True
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'MsgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden True
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
début.Select
Set début = Nothing
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub


Sub UnhideUnused()
ActiveSheet.Unprotect
Set début = ActiveSheet
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
Rows.Hidden = False
y = Cells(1, Columns.Count).End(xlToLeft).Column + 1
'msgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden False
Next
Application.ScreenUpdating = True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
début.Select
Set début = Nothing
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub
Publicité
Poster une réponse
Anonyme