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

Protection et Bouton de commande

3 réponses
Avatar
Pierre Dumas
Bonjour tout le monde,

Apres avoir mis en pratique les infos trouvees dans ce=20
forum (et dans ses archives), j'ai un nouveau soucis.=20
excel plante et se ferme. Je suis sous Excel XP et Win XP.

Je voudrais tout simplement faire un bouton de commande=20
et proteger toutes les feuilles de mon classeur ensuite.=20
Mais cela ne fonctionne pas.

Voici mon code.
*********************
Module 1
---------------------
Public LaFeuille As Worksheet

Sub testouille()
Dim MotDePasseFeuille As String

Call InsererBoutonDeCommande
MsgBox ("coucou1")


For Each LaFeuille In Worksheets
MsgBox (LaFeuille.Name)
Sheets("" & LaFeuille.Name & "").Select
'Cells(1, 1).Select
'MsgBox ("J'y suis")
'Call ProtectionFeuillePassWord(LaFeuille.Name, "f")
' Sheets(LaFeuille.Name).Protect Password:=3D"f"
Next LaFeuille

ActiveWorkbook.Protect Password:=3D"c"

End Sub
---------------------

Module 2
---------------------

Sub InsererBoutonDeCommande()

Dim L As Double, T As Double, B As Object
NomBouton =3D "Mon_Beau_Bouton"

With ActiveSheet
L =3D .Range("I" & ActiveCell.Row).Left
T =3D .Range("I" & ActiveCell.Row).Top
With .OLEObjects.Add
(ClassType:=3D"Forms.CommandButton.1", _
Link:=3DFalse, DisplayAsIcon:=3DFalse, Left:=3DL, _
Top:=3DT, Width:=3D40, Height:=3D13.75)
With .Object
.Caption =3D CaptionBouton
.Font.Name =3D "Arial"
.Font.Size =3D 5
End With
.Name =3D NomBouton
.PrintObject =3D False
Ins=E9rerLeCodeDuBouton ActiveSheet.Name, .Name
End With
End With

End Sub

Sub Ins=E9rerLeCodeDuBouton(NomFeuille As String, NomBouton=20
As String)

Dim A As String

A =3D Worksheets(NomFeuille).CodeName

code =3D " Private Sub " & NomBouton & "_Click()" & vbCrLf
code =3D code & "msgbox (""Coucou"")" & vbCrLf
code =3D code & "End Sub"
Set B =3D ThisWorkbook.VBProject.VBComponents(A).CodeModule
With B
.AddFromString code
End With
Set B =3D Nothing

End Sub
---------------------
*********************

Merci d'avance.

Pierre

3 réponses

Avatar
Pierre Dumas
Il fallait bien sur lire (le reste c'etait des tests):

Sub testouille()
Dim MotDePasseFeuille As String

Call InsererBoutonDeCommande

For Each LaFeuille In Worksheets
Sheets(LaFeuille.Name).Protect Password:="f"
Next LaFeuille

ActiveWorkbook.Protect Password:="c"

End Sub
Avatar
Pierre Dumas
Il ne faut pas mettre la ligne suivante de ton module2 à
cet endroit mais APRES avoir protege feuilles et classeur.
InsérerLeCodeDuBouton ActiveSheet.Name, .Name

Ton module1 devient :
Sub testouille()
Dim MotDePasseFeuille As String

Call InsererBoutonDeCommande

For Each LaFeuille In Worksheets
Sheets(LaFeuille.Name).Protect Password:="f"
Next LaFeuille

ActiveWorkbook.Protect Password:="c"
Call InsérerLeCodeDuBouton("feuil2", NomBouton)

End Sub
----------------------------

En esperant que cela puisse servir a d'autres.
Il faut mettre l'instruction qui cree le code en fin de
programmation pour eviter les pertes de temps (presque
UNE journee).

Pierre

-----Message d'origine-----
Bonjour tout le monde,

Apres avoir mis en pratique les infos trouvees dans ce
forum (et dans ses archives), j'ai un nouveau soucis.
excel plante et se ferme. Je suis sous Excel XP et Win
XP.


Je voudrais tout simplement faire un bouton de commande
et proteger toutes les feuilles de mon classeur ensuite.
Mais cela ne fonctionne pas.

Voici mon code.
*********************
Module 1
---------------------
Public LaFeuille As Worksheet

Sub testouille()
Dim MotDePasseFeuille As String

Call InsererBoutonDeCommande
MsgBox ("coucou1")


For Each LaFeuille In Worksheets
MsgBox (LaFeuille.Name)
Sheets("" & LaFeuille.Name & "").Select
'Cells(1, 1).Select
'MsgBox ("J'y suis")
'Call ProtectionFeuillePassWord(LaFeuille.Name, "f")
' Sheets(LaFeuille.Name).Protect Password:="f"
Next LaFeuille

ActiveWorkbook.Protect Password:="c"

End Sub
---------------------

Module 2
---------------------

Sub InsererBoutonDeCommande()

Dim L As Double, T As Double, B As Object
NomBouton = "Mon_Beau_Bouton"

With ActiveSheet
L = .Range("I" & ActiveCell.Row).Left
T = .Range("I" & ActiveCell.Row).Top
With .OLEObjects.Add
(ClassType:="Forms.CommandButton.1", _
Link:úlse, DisplayAsIcon:úlse, Left:=L, _
Top:=T, Width:@, Height:.75)
With .Object
.Caption = CaptionBouton
.Font.Name = "Arial"
.Font.Size = 5
End With
.Name = NomBouton
.PrintObject = False
InsérerLeCodeDuBouton ActiveSheet.Name, .Name
End With
End With

End Sub

Sub InsérerLeCodeDuBouton(NomFeuille As String,
NomBouton

As String)

Dim A As String

A = Worksheets(NomFeuille).CodeName

code = " Private Sub " & NomBouton & "_Click()" & vbCrLf
code = code & "msgbox (""Coucou"")" & vbCrLf
code = code & "End Sub"
Set B = ThisWorkbook.VBProject.VBComponents(A).CodeModule
With B
.AddFromString code
End With
Set B = Nothing

End Sub
---------------------
*********************

Merci d'avance.

Pierre

.



Avatar
Denis Michon
Bonjour Pierre,

Ceci fonctionne bien... mais comme tu ne dis pas ce que sont tes objectifs ... difficile de savoir !

'---------------------------
Sub testouille()

Dim MotDePasseFeuille As String

InsererBoutonDeCommande

For Each LaFeuille In Worksheets
With LaFeuille
.Protect Password:="f"
End With
Next LaFeuille

ActiveWorkbook.Protect Password:="c"

End Sub
'---------------------------


Salutations!

"Pierre Dumas" a écrit dans le message de
news:029701c3a8fa$31668ac0$
Bonjour tout le monde,

Apres avoir mis en pratique les infos trouvees dans ce
forum (et dans ses archives), j'ai un nouveau soucis.
excel plante et se ferme. Je suis sous Excel XP et Win XP.

Je voudrais tout simplement faire un bouton de commande
et proteger toutes les feuilles de mon classeur ensuite.
Mais cela ne fonctionne pas.

Voici mon code.
*********************
Module 1
---------------------
Public LaFeuille As Worksheet

Sub testouille()
Dim MotDePasseFeuille As String

Call InsererBoutonDeCommande
MsgBox ("coucou1")


For Each LaFeuille In Worksheets
MsgBox (LaFeuille.Name)
Sheets("" & LaFeuille.Name & "").Select
'Cells(1, 1).Select
'MsgBox ("J'y suis")
'Call ProtectionFeuillePassWord(LaFeuille.Name, "f")
' Sheets(LaFeuille.Name).Protect Password:="f"
Next LaFeuille

ActiveWorkbook.Protect Password:="c"

End Sub
---------------------

Module 2
---------------------

Sub InsererBoutonDeCommande()

Dim L As Double, T As Double, B As Object
NomBouton = "Mon_Beau_Bouton"

With ActiveSheet
L = .Range("I" & ActiveCell.Row).Left
T = .Range("I" & ActiveCell.Row).Top
With .OLEObjects.Add
(ClassType:="Forms.CommandButton.1", _
Link:úlse, DisplayAsIcon:úlse, Left:=L, _
Top:=T, Width:@, Height:.75)
With .Object
.Caption = CaptionBouton
.Font.Name = "Arial"
.Font.Size = 5
End With
.Name = NomBouton
.PrintObject = False
InsérerLeCodeDuBouton ActiveSheet.Name, .Name
End With
End With

End Sub

Sub InsérerLeCodeDuBouton(NomFeuille As String, NomBouton
As String)

Dim A As String

A = Worksheets(NomFeuille).CodeName

code = " Private Sub " & NomBouton & "_Click()" & vbCrLf
code = code & "msgbox (""Coucou"")" & vbCrLf
code = code & "End Sub"
Set B = ThisWorkbook.VBProject.VBComponents(A).CodeModule
With B
.AddFromString code
End With
Set B = Nothing

End Sub
---------------------
*********************

Merci d'avance.

Pierre