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

petit pb de code dans une macro

4 réponses
Avatar
michir
Bonjour =E0 tous
Voil=E0, je voudrais rendre la macro suivant "g=E9n=E9rique" je veux dire,
faire une seule macro pour
Masquer/ d=E9masquer et qui s'applique =E0 n'importe quelle feuille de mon
classeur. Ici j'ai du utiliser la ligne :
" Sheets("Jour 7").Unprotect"
pour la rendre op=E9rationnelle sur la feuille "Jour 7"

Sub Masquer_Demasquer_Clic()
Application.ScreenUpdating =3D False
'test_UnProtect
Sheets("Jour 7").Unprotect
With Columns("B:D").EntireColumn
.Hidden =3D Not .Hidden
End With
End Sub

Merci pour le coup de pouce
Michel

4 réponses

Avatar
MichD
Bonjour,

Comme ceci : Tu appelles la macro Test en prenant soin de définir les 2 paramètres.
Tu copies ceci dans un module standard

'--------------------------------
Sub test()
'2 paramètres : Nom de la feuille, Adresse des cellules.
Masquer_Demasquer "Sheet1", "B:D"
End Sub
'--------------------------------

Sub Masquer_Demasquer(NomFeuille As String, Adr As String)
Application.ScreenUpdating = False
With Worksheets(NomFeuille)
.Unprotect
With .Range(Adr).EntireColumn
.Hidden = Not .Hidden
End With
.Protect
End With
Application.ScreenUpdating = False
End Sub
'--------------------------------


MichD
--------------------------------------------
"michir" a écrit dans le message de groupe de discussion :


Bonjour à tous
Voilà, je voudrais rendre la macro suivant "générique" je veux dire,
faire une seule macro pour
Masquer/ démasquer et qui s'applique à n'importe quelle feuille de mon
classeur. Ici j'ai du utiliser la ligne :
" Sheets("Jour 7").Unprotect"
pour la rendre opérationnelle sur la feuille "Jour 7"

Sub Masquer_Demasquer_Clic()
Application.ScreenUpdating = False
'test_UnProtect
Sheets("Jour 7").Unprotect
With Columns("B:D").EntireColumn
.Hidden = Not .Hidden
End With
End Sub

Merci pour le coup de pouce
Michel
Avatar
michir
Merci MichD
Mais je suis vraiment néophyte en code VBA
Je dois supprimer Unprotect car il m'occasionne un bogue avec la
ligne .Hidden = Not .Hidden (j'avais mis un ' dans mon code joint
pour la désactiver)
Tu me dis de repasser le nom de la feuille (Sheet1...) dans un module
standard, mais c'est précisément ma question, je souhaite que la macro
soit opérationnelle surs l'ensemble des feuilles sans le citer une à
une
Michel


On 10 mai, 12:52, "MichD" wrote:
Bonjour,

Comme ceci : Tu appelles la macro Test en prenant soin de définir les 2 paramètres.
Tu copies ceci dans un module standard

'--------------------------------
Sub test()
'2 paramètres : Nom de la feuille, Adresse des cellules.
Masquer_Demasquer "Sheet1", "B:D"
End Sub
'--------------------------------

Sub Masquer_Demasquer(NomFeuille As String, Adr As String)
Application.ScreenUpdating = False
With Worksheets(NomFeuille)
    .Unprotect
    With .Range(Adr).EntireColumn
        .Hidden = Not .Hidden
    End With
    .Protect
End With
Application.ScreenUpdating = False
End Sub
'--------------------------------

MichD
--------------------------------------------
"michir"  a écrit dans le message de groupe de discussion :


Bonjour à tous
Voilà, je voudrais rendre  la macro suivant "générique" je veux d ire,
faire une seule macro pour
Masquer/ démasquer et qui s'applique à n'importe quelle feuille de mo n
classeur. Ici j'ai du utiliser la ligne :
" Sheets("Jour 7").Unprotect"
pour la rendre opérationnelle sur la feuille "Jour 7"

Sub Masquer_Demasquer_Clic()
    Application.ScreenUpdating = False
    'test_UnProtect
    Sheets("Jour 7").Unprotect
    With Columns("B:D").EntireColumn
        .Hidden = Not .Hidden
    End With
End Sub

Merci pour le coup de pouce
Michel
Avatar
MichD
Ceci va fonctionner pour la feuille active (celle affichée à l'écran)
à chaque fois que tu l'appelles.
'----------------------------------------------
Sub Masquer_Demasquer()
Application.ScreenUpdating = False
With ActiveSheet
With .Range(Adr).EntireColumn
.Hidden = Not .Hidden
End With
End With
Application.ScreenUpdating = False
End Sub
'----------------------------------------------

Si tu veux appliquer cette macro dans tenir compte du fait que les feuilles
sont protégées, tu dois utiliser ce type de procédure pour protéger
les feuilles.

Dans ton ThisWorkbook :
'----------------------------------------------
Private Sub Workbook_Open()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Worksheets
Sh.Protect "MotDePasse", True, True, True, True
Next
End Sub
'----------------------------------------------

MichD
--------------------------------------------
Avatar
michir
Ok, merci à toi MichD...heureusement que tu es là.
Michel

On 10 mai, 16:11, "MichD" wrote:
Ceci va fonctionner pour la feuille active (celle affichée à l'écra n)
à chaque fois que tu l'appelles.
'----------------------------------------------
Sub Masquer_Demasquer()
Application.ScreenUpdating = False
With ActiveSheet
    With .Range(Adr).EntireColumn
        .Hidden = Not .Hidden
    End With
End With
Application.ScreenUpdating = False
End Sub
'----------------------------------------------

Si tu veux appliquer cette macro dans tenir compte du fait que les feuill es
sont protégées, tu dois utiliser ce type de procédure pour protég er
les feuilles.

Dans ton ThisWorkbook :
'----------------------------------------------
Private Sub Workbook_Open()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Worksheets
    Sh.Protect "MotDePasse", True, True, True, True
Next
End Sub
'----------------------------------------------

MichD
--------------------------------------------