Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Masquer / Afficher

1 réponse
Avatar
Horace Rochat
Voil=E0 deux macros compl=E9mentaires:
1- la premi=E8re sert =E0 masquer les lignes et colonnes=20
inutilis=E9es (toutes leurs cellules sont vides) des=20
feuilles d'un classeur
2- la seconde, c'est l'op=E9ration inverse, sert =E0 afficher=20
toutes les lignes et colonnes des feuilles du classeur

J'ai des probl=E8mes avec la premi=E8re (Sub HideUnused)

Pourriez-vous me dire:
1- pourquoi parfois j'ai une indication de bogue, mais=20
que la macro est quand m=EAme ex=E9cut=E9e
2- pourquoi sur certaines feuilles du classeur, certaines=20
colonnes ayant du contenu sont quand m=EAme masqu=E9es par la=20
macro
3- comment faire pour que la macro n'op=E8re que sur les=20
feuilles du classeur actif (et pas sur tous les classeurs=20
ouverts)

Merci
HR


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


Sub UnhideUnused()
ActiveSheet.Unprotect
Set d=E9but =3D ActiveSheet
Sheets(1).Select
ActiveSheet.Unprotect
Application.ScreenUpdating =3D False
For Each ws In Worksheets
ws.Activate
Rows.Hidden =3D False
y =3D Cells(1, Columns.Count).End(xlToLeft).Column + 1
'msgBox y
Range(Cells(1, y), Cells(1, "iv")).EntireColumn.Hidden =3D=20
False
Next
Application.ScreenUpdating =3D True
Sheets(1).Select
ActiveSheet.Protect DrawingObjects:=3DTrue, Contents:=3DTrue,=20
Scenarios:=3DTrue
d=E9but.Select
Set d=E9but =3D Nothing
ActiveSheet.Protect DrawingObjects:=3DTrue, Contents:=3DTrue,=20
Scenarios:=3DTrue
End Sub

1 réponse

Avatar
Hubert-Félix de la Guerière
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" a écrit dans le
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