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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <anonymous@discussions.microsoft.com> a écrit dans le
message de news:87cb01c4047d$b3f8d9f0$a501280a@phx.gbl...
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
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