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

protection des onglets d'un classeur

16 réponses
Avatar
ALF
Bonjour,

j'ai créé sur PERSO.xls, 2 macros qui permettent de proteger et de
deverouiller tous les onglets d'un classeur à partir d'une image.
cela marche parfaitement...
mais je me suis apercu que cela bloque aussi les macros insérés dans les
onglets...
ce qui me pose un probleme car le but etant d'empecher toutes modif sur les
cellules des onglets mais pas d'empecher les macros de fonctionner..
comment peut on verouiller les cellules des onglets tout en autorisant les
macros des onglets de fonctionner (par contre l'acces au macros doit etre
vérouillé...)
je vous laisse ci joints les 2 macros de protection/deprotection..

Sub Protéger()
'protection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect Password:="LOIC1999"
Next i
End Sub

Sub Déprotéger()
'Déprotection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Unprotect Password:="LOIC1999"
Next i
End Sub

Merci de votre soutien
--
ALF

6 réponses

1 2
Avatar
MichDenis
| voici 2 exemples de macros qui ne s'executent pas automatiquement:

| Private Sub Worksheet_Change(ByVal Target As Range)
| If Target.Address = "$A$1" Then Range(Target).Select
| End Sub

*** Cette macro ne pourra jamais s'exécuter sur une feuille qui est totalement
protégée car l'événement "Worksheet_Change" réagit soit suite à la
modification de la valeur d'une cellule soit après être sorti du mode
"édition de la cellule (le curseur qui clignote dans la cellule) Ces 2
actions sont impossibles car elles impliquent que l'usager peut éditer
MANUELLEMENT ET NON PAR MACRO la valeur de la cellule A1

Une suggestion : insère un bouton de commande issu de la barre d'outils "formulaire"
Affecte à ce bouton la macro suivante que tu placeras dans ton module feuille concerné
Sub Test()
Range("A1") = 1
End sub

Le code de ta feuille deviendra : Maintenant, si tu cliques sur ton bouton de commande
non seulement la macro Test s'exécuera mais elle déclenchera ta macro Worksheet_change
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Coucou"
Application.Goto Reference:=Worksheets(Me.Name).Range(Target.Address)
End If

End Sub
'------------------------
Sub Test()
Range("A1") = 1
End Sub
'------------------------

Ton problème avec la macro 2 que tu as présenté est le même que la macro précédente.
Avatar
ALF
Bonjour,

faut il rajouter 1 ou 2 boutons TEST..
Est ce que 1 seul bouton TEST peut servir à declencher les 2 macros???
qu'entends tu par "déclencher" ?? Cela veut il dire "activer" ou "executer" ??
Si c'est "executer" c'est genant car le choix n'est alors pas encore fait..

s'il faut 2 boutons..un seul bouton permettant l'activation des macros n'est
il pas possible dans WORKBOOK ??

d'autre part,je n'arrive pas a comprendre le test "Range("A1") = 1"..
que veut dire ce "1" et quel est son role ???

Merci

--
ALF




| voici 2 exemples de macros qui ne s'executent pas automatiquement:

| Private Sub Worksheet_Change(ByVal Target As Range)
| If Target.Address = "$A$1" Then Range(Target).Select
| End Sub

*** Cette macro ne pourra jamais s'exécuter sur une feuille qui est totalement
protégée car l'événement "Worksheet_Change" réagit soit suite à la
modification de la valeur d'une cellule soit après être sorti du mode
"édition de la cellule (le curseur qui clignote dans la cellule) Ces 2
actions sont impossibles car elles impliquent que l'usager peut éditer
MANUELLEMENT ET NON PAR MACRO la valeur de la cellule A1

Une suggestion : insère un bouton de commande issu de la barre d'outils "formulaire"
Affecte à ce bouton la macro suivante que tu placeras dans ton module feuille concerné
Sub Test()
Range("A1") = 1
End sub

Le code de ta feuille deviendra : Maintenant, si tu cliques sur ton bouton de commande
non seulement la macro Test s'exécuera mais elle déclenchera ta macro Worksheet_change
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Coucou"
Application.Goto Reference:=Worksheets(Me.Name).Range(Target.Address)
End If

End Sub
'------------------------
Sub Test()
Range("A1") = 1
End Sub
'------------------------

Ton problème avec la macro 2 que tu as présenté est le même que la macro précédente.






Avatar
ALF
re,

je rajoute suite au mail precedent,que la classeur dispose de 16 onglets ,ce
qui implique de creer 16 boutons et macros associes..
n'est pas trop lourd..
--
ALF




| voici 2 exemples de macros qui ne s'executent pas automatiquement:

| Private Sub Worksheet_Change(ByVal Target As Range)
| If Target.Address = "$A$1" Then Range(Target).Select
| End Sub

*** Cette macro ne pourra jamais s'exécuter sur une feuille qui est totalement
protégée car l'événement "Worksheet_Change" réagit soit suite à la
modification de la valeur d'une cellule soit après être sorti du mode
"édition de la cellule (le curseur qui clignote dans la cellule) Ces 2
actions sont impossibles car elles impliquent que l'usager peut éditer
MANUELLEMENT ET NON PAR MACRO la valeur de la cellule A1

Une suggestion : insère un bouton de commande issu de la barre d'outils "formulaire"
Affecte à ce bouton la macro suivante que tu placeras dans ton module feuille concerné
Sub Test()
Range("A1") = 1
End sub

Le code de ta feuille deviendra : Maintenant, si tu cliques sur ton bouton de commande
non seulement la macro Test s'exécuera mais elle déclenchera ta macro Worksheet_change
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Coucou"
Application.Goto Reference:=Worksheets(Me.Name).Range(Target.Address)
End If

End Sub
'------------------------
Sub Test()
Range("A1") = 1
End Sub
'------------------------

Ton problème avec la macro 2 que tu as présenté est le même que la macro précédente.






Avatar
MichDenis
| qu'entends tu par "déclencher"

| Private Sub Worksheet_Change(ByVal Target As Range)

Les 2 macros que tu as présentées sont des macros dites événementielles dans ce sens
qu'elles sont engendrées, générées seulement lors que le contenu d'une cellule
(peu importe laquelle) est modifié ou que la cellule est validée après avoir été
en mode édition (curseur qui clignotte dans la cellule.) . Lorsque la feuille
est protégée, l'usager ne peut modifier le contenu de la cellule ou passer
en mode édition une cellule......MAIS il peut utiliser UN bouton de
commande pour faire le travail.

Dans chaque module Feuille, il ne peut y avoir qu'un événement de ce type
| Private Sub Worksheet_Change(ByVal Target As Range)

Si tu as plusieurs actions générées par cet événement, tu dois regrouper
ces actions dans la même procédure ....

Je t'invite à te procédurer un bon volume sur le VBA d'excel. Je ne peux dans
le cadre de ce forum écrire tout un chapitre sur le sujet.




"ALF" a écrit dans le message de news:

Bonjour,

faut il rajouter 1 ou 2 boutons TEST..
Est ce que 1 seul bouton TEST peut servir à declencher les 2 macros???
qu'entends tu par "déclencher" ?? Cela veut il dire "activer" ou "executer" ??
Si c'est "executer" c'est genant car le choix n'est alors pas encore fait..

s'il faut 2 boutons..un seul bouton permettant l'activation des macros n'est
il pas possible dans WORKBOOK ??

d'autre part,je n'arrive pas a comprendre le test "Range("A1") = 1"..
que veut dire ce "1" et quel est son role ???

Merci

--
ALF




| voici 2 exemples de macros qui ne s'executent pas automatiquement:

| Private Sub Worksheet_Change(ByVal Target As Range)
| If Target.Address = "$A$1" Then Range(Target).Select
| End Sub

*** Cette macro ne pourra jamais s'exécuter sur une feuille qui est totalement
protégée car l'événement "Worksheet_Change" réagit soit suite à la
modification de la valeur d'une cellule soit après être sorti du mode
"édition de la cellule (le curseur qui clignote dans la cellule) Ces 2
actions sont impossibles car elles impliquent que l'usager peut éditer
MANUELLEMENT ET NON PAR MACRO la valeur de la cellule A1

Une suggestion : insère un bouton de commande issu de la barre d'outils "formulaire"
Affecte à ce bouton la macro suivante que tu placeras dans ton module feuille concerné
Sub Test()
Range("A1") = 1
End sub

Le code de ta feuille deviendra : Maintenant, si tu cliques sur ton bouton de commande
non seulement la macro Test s'exécuera mais elle déclenchera ta macro Worksheet_change
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Coucou"
Application.Goto Reference:=Worksheets(Me.Name).Range(Target.Address)
End If

End Sub
'------------------------
Sub Test()
Range("A1") = 1
End Sub
'------------------------

Ton problème avec la macro 2 que tu as présenté est le même que la macro précédente.






Avatar
ALF
re,

j'ai créé le bouton comme tu me l' a indique mais cela ne marche pas..j'ai
le message "coucou" mais cela s'arrete la...
il semblerait que "Reference" ne soit pas reconnu...
je te laisse mon classeur sur cjoint en sachant qu'il est reduit(4 onglet au
lieu de 20)..
http://cjoint.com/?etnNg0iG3k

tu pourras verifier celui ci car il y a peut etre quelquechose que j'aurais
eventuellement oublié de t'informer...

Encore MERCI pour ton aide et ta patience...

--
ALF



| qu'entends tu par "déclencher"

| Private Sub Worksheet_Change(ByVal Target As Range)

Les 2 macros que tu as présentées sont des macros dites événementielles dans ce sens
qu'elles sont engendrées, générées seulement lors que le contenu d'une cellule
(peu importe laquelle) est modifié ou que la cellule est validée après avoir été
en mode édition (curseur qui clignotte dans la cellule.) . Lorsque la feuille
est protégée, l'usager ne peut modifier le contenu de la cellule ou passer
en mode édition une cellule......MAIS il peut utiliser UN bouton de
commande pour faire le travail.

Dans chaque module Feuille, il ne peut y avoir qu'un événement de ce type
| Private Sub Worksheet_Change(ByVal Target As Range)

Si tu as plusieurs actions générées par cet événement, tu dois regrouper
ces actions dans la même procédure ....

Je t'invite à te procédurer un bon volume sur le VBA d'excel. Je ne peux dans
le cadre de ce forum écrire tout un chapitre sur le sujet.




"ALF" a écrit dans le message de news:

Bonjour,

faut il rajouter 1 ou 2 boutons TEST..
Est ce que 1 seul bouton TEST peut servir à declencher les 2 macros???
qu'entends tu par "déclencher" ?? Cela veut il dire "activer" ou "executer" ??
Si c'est "executer" c'est genant car le choix n'est alors pas encore fait..

s'il faut 2 boutons..un seul bouton permettant l'activation des macros n'est
il pas possible dans WORKBOOK ??

d'autre part,je n'arrive pas a comprendre le test "Range("A1") = 1"..
que veut dire ce "1" et quel est son role ???

Merci

--
ALF




| voici 2 exemples de macros qui ne s'executent pas automatiquement:

| Private Sub Worksheet_Change(ByVal Target As Range)
| If Target.Address = "$A$1" Then Range(Target).Select
| End Sub

*** Cette macro ne pourra jamais s'exécuter sur une feuille qui est totalement
protégée car l'événement "Worksheet_Change" réagit soit suite à la
modification de la valeur d'une cellule soit après être sorti du mode
"édition de la cellule (le curseur qui clignote dans la cellule) Ces 2
actions sont impossibles car elles impliquent que l'usager peut éditer
MANUELLEMENT ET NON PAR MACRO la valeur de la cellule A1

Une suggestion : insère un bouton de commande issu de la barre d'outils "formulaire"
Affecte à ce bouton la macro suivante que tu placeras dans ton module feuille concerné
Sub Test()
Range("A1") = 1
End sub

Le code de ta feuille deviendra : Maintenant, si tu cliques sur ton bouton de commande
non seulement la macro Test s'exécuera mais elle déclenchera ta macro Worksheet_change
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Coucou"
Application.Goto Reference:=Worksheets(Me.Name).Range(Target.Address)
End If

End Sub
'------------------------
Sub Test()
Range("A1") = 1
End Sub
'------------------------

Ton problème avec la macro 2 que tu as présenté est le même que la macro précédente.











Avatar
MichDenis
http://cjoint.com/?etpKQewTWc

Exemple : J'ai regroupé tes 2 procédures à titre d'exemple dans la feuille 1 (sheet1)
de ton classeur. J'ai ajouté un bouton à ta feuille 1. La macro Worksheet_Change
est alors exécuté même si la feuille est protégée.

à toi de voir comment adapter cet exemple à ce que tu veux réellement faire.




"ALF" a écrit dans le message de news:

re,

j'ai créé le bouton comme tu me l' a indique mais cela ne marche pas..j'ai
le message "coucou" mais cela s'arrete la...
il semblerait que "Reference" ne soit pas reconnu...
je te laisse mon classeur sur cjoint en sachant qu'il est reduit(4 onglet au
lieu de 20)..
http://cjoint.com/?etnNg0iG3k

tu pourras verifier celui ci car il y a peut etre quelquechose que j'aurais
eventuellement oublié de t'informer...

Encore MERCI pour ton aide et ta patience...

--
ALF



| qu'entends tu par "déclencher"

| Private Sub Worksheet_Change(ByVal Target As Range)

Les 2 macros que tu as présentées sont des macros dites événementielles dans ce sens
qu'elles sont engendrées, générées seulement lors que le contenu d'une cellule
(peu importe laquelle) est modifié ou que la cellule est validée après avoir été
en mode édition (curseur qui clignotte dans la cellule.) . Lorsque la feuille
est protégée, l'usager ne peut modifier le contenu de la cellule ou passer
en mode édition une cellule......MAIS il peut utiliser UN bouton de
commande pour faire le travail.

Dans chaque module Feuille, il ne peut y avoir qu'un événement de ce type
| Private Sub Worksheet_Change(ByVal Target As Range)

Si tu as plusieurs actions générées par cet événement, tu dois regrouper
ces actions dans la même procédure ....

Je t'invite à te procédurer un bon volume sur le VBA d'excel. Je ne peux dans
le cadre de ce forum écrire tout un chapitre sur le sujet.




"ALF" a écrit dans le message de news:

Bonjour,

faut il rajouter 1 ou 2 boutons TEST..
Est ce que 1 seul bouton TEST peut servir à declencher les 2 macros???
qu'entends tu par "déclencher" ?? Cela veut il dire "activer" ou "executer" ??
Si c'est "executer" c'est genant car le choix n'est alors pas encore fait..

s'il faut 2 boutons..un seul bouton permettant l'activation des macros n'est
il pas possible dans WORKBOOK ??

d'autre part,je n'arrive pas a comprendre le test "Range("A1") = 1"..
que veut dire ce "1" et quel est son role ???

Merci

--
ALF




| voici 2 exemples de macros qui ne s'executent pas automatiquement:

| Private Sub Worksheet_Change(ByVal Target As Range)
| If Target.Address = "$A$1" Then Range(Target).Select
| End Sub

*** Cette macro ne pourra jamais s'exécuter sur une feuille qui est totalement
protégée car l'événement "Worksheet_Change" réagit soit suite à la
modification de la valeur d'une cellule soit après être sorti du mode
"édition de la cellule (le curseur qui clignote dans la cellule) Ces 2
actions sont impossibles car elles impliquent que l'usager peut éditer
MANUELLEMENT ET NON PAR MACRO la valeur de la cellule A1

Une suggestion : insère un bouton de commande issu de la barre d'outils "formulaire"
Affecte à ce bouton la macro suivante que tu placeras dans ton module feuille concerné
Sub Test()
Range("A1") = 1
End sub

Le code de ta feuille deviendra : Maintenant, si tu cliques sur ton bouton de commande
non seulement la macro Test s'exécuera mais elle déclenchera ta macro Worksheet_change
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Coucou"
Application.Goto Reference:=Worksheets(Me.Name).Range(Target.Address)
End If

End Sub
'------------------------
Sub Test()
Range("A1") = 1
End Sub
'------------------------

Ton problème avec la macro 2 que tu as présenté est le même que la macro précédente.











1 2