Sub Unprotect()
Dim ToutBord As Worksheet
Set ToutBord = Sheets("2X1, 2X2, 2X3, 2X4, 2X5, 2X6, 2X7, 2X8, 2X9, 2Y1, 2Y2, 2Y3, 2Y4, 2Y5, 2Y6")
ToutBord.unprotect
End Sub
Pour le fun :il semble que le problème provienne du fait que je ne peut désigner plusieurs feuilles de calcul dans la fonction sheets
Bon... je comprend que dans mon exemple, la variable peut sembler inutile. L'idée est de sortir la variable et de la placer au-dessus de toutes mes procédure pour ainsi l'utiliser dans toutes mes procédure ensuite. Ce que je me rend compte en lisant vos commentaires, c'est qu'il semble que ce que je cherche soit plutôt une constante et non pas une variable. Par contre, j'ai aussi essayé avec la fonction constante et cela ne fonctionne pas plus et il semble que le problème provienne du fait que je ne peut désigner plusieurs feuilles de calcul dans la fonction sheets.Bonjour,
J'ai cherché ici si cette question avait déjà été posée mais je n'ai pas trouvée. Donc, voici ma question en espérant que je ne répète pas trop.
Afin de monter des commandes qui s'appliquent à plusieurs feuilles, j'essai de créer une variable objet qui porterait le nom de "ToutBord" et qui désigne plusieurs feuilles dans un même classeur qui portent les nom 2X1, 2X2, 2X3, etc. Par contre, lorsque j'essai d'appliquer une commande à ma variable, j'ai toujours un message d'erreur qui m'indique "L'indice n'appartient pas à la sélection".
Voici un exemple :
VB:Sub Unprotect() Dim ToutBord As Worksheet Set ToutBord = Sheets("2X1, 2X2, 2X3, 2X4, 2X5, 2X6, 2X7, 2X8, 2X9, 2Y1, 2Y2, 2Y3, 2Y4, 2Y5, 2Y6") ToutBord.unprotect End Sub
Pourtant, si je désigne une seule feuille comme variable, la commande fonctionne bien sur la dite feuille. Est-ce que c'est que la variable ne peut être multiple? Si c'est le cas, y a t'il une façon de le faire?
Un merci sincère.
Const ToutBord = "2X1,2X2,2X3,2X4,2X5,2X6,2X7,2X8,2X9,2Y1,2Y2,2Y3,2Y4,2Y5,2Y6"
Sub OterProtection()
sheets(ToutBord).unprotect
End Sub
Public Property Let Protection(Value As Boolean)
Const MesFeuilles = "2X1,2X2,2X3,2X4,2X5,2X6,2X7,2X8,2X9,2Y1,2Y2,2Y3,2Y4,2Y5,2Y6"
Dim x
If Value Then
For Each x In Split(MesFeuilles, ","): Sheets(x).Protect: Next
Else
For Each x In Split(MesFeuilles, ","): Sheets(x).Unprotect: Next
End If
End Property
Sub test()
ThisWorkbook.Protection = True
End Sub
Pour le fun :il semble que le problème provienne du fait que je ne peut désigner plusieurs feuilles de calcul dans la fonction sheets
Bonsoir le fil
[Précisions]
Le seul parfait qu'on peut rapprocher de Staple1600
C'est le parfait ...au café qu'il lui arrive de déguster devant son écran en écrivant de sa main libre des codes VBA faillibles (comme tout ce que produit l'être humain, car oui Staple1600 n'est pas qu'une agrafe, c'est aussi un être de chair et de sang
[/Précisions]
=>mapomme
Je ne suis pas pour l'exclusion.
Surtout en ce soir de Noel, je suis pour l'inclusion
(sauf pour l'écriture inclusive qui heurte un peu l'enfant de primaire que je fut dans les seventies)
=>laurent950
Je te remercie pour ta sollicitude.
Mon code fonctionne parfaitement dans les conditions de mon test.
Et j'avais zappé cette histoire du protection de feuilles (puisque vain et inutile)
C'est exactement ça. Un peu plus complexe que ce que j'espérais mais ça devait être la pensé magique de Noël qui me faisait croire que ça serait aussi simple. Haha!Re,
Pour le fun :
nb : 2ème fil où je semble être devenu transparent
- une variable publique ToutBord contenant les feuilles qu'on désire.
- cette variable ToutBord est de type collection. La clef (key) est le nom de la feuille, l'élément (item) la feuille portant le nom de la clef.
- InitToutBord au début de chaque procédure s'assure que ToutBord a bien été initialisé.
Const MesBordereaux = "2X1,2X2,2X3,2X4,2X5,2X6,2X7,2X8,2X9,2Y1,2Y2,2Y3,2Y4,2Y5,2Y6"
Const Ajustements = "Ajustement carburant,Ajustement bitume,Ajustement acier"
Const AutresFeuilles = "LISTES,INSTRUCTION,INFO PROJET,SOMMAIRE DES BORDEREAUX"
Sub Enlev_protect_tous_onglets()
'
' ENLEVER LA PROTECTION SUR TOUS LES ONGLETS
'
Dim x
For Each x In Split(MesBordereaux, ",")
Sheets(x).Unprotect
Next
Dim y
For Each y In Split(Ajustements, ",")
Sheets(y).Unprotect
Next
Dim z
For Each z In Split(AutresFeuilles, ",")
Sheets(z).Unprotect
Next
End Sub
Sub Protéger_tous_onglets()
' PROTÉGER TOUS LES ONGLETS
'
Dim x
For Each x In Split(MesBordereaux, ",")
Sheets(x).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Next
Dim y
For Each y In Split(Ajustements, ",")
Sheets(y).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Next
Dim z
For Each z In Split(AutresFeuilles, ",")
Sheets(z).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Next
Sheets("2X1").Select
End Sub
Sub Enlev_protect_tous_onglets()
'
Dim x, y, z
For Each x In Split(MesBordereaux, ",")
For Each y In Split(Ajustements, ",")
For Each z In Split(AutresFeuilles, ",")
Sheets(x).Unprotect
Sheets(y).Unprotect
Sheets(z).Unprotect
Next
End Sub
Const MesFeuilles = "2X1,2X2,2X3,2X4,2X5,2X6,2X7,2X8,2X9,2Y1,2Y2,2Y3,2Y4,2Y5,2Y6"
Dim x
For Each x In Split(MesFeuilles, ","): Sheets(x).Unprotect: Next
Sub Enlev_Protect()
Sheets(MesFeuilles).Unprotec
End Sub
Sub Enlev_protect_tous_onglets()
MesBordereaux = "Feuil1,Feuil2"
Ajustements = "Feuil2,Feuil4"
t = Split(MesBordereaux, ",")
tt = Split(Ajustements, ",")
For x = LBound(t) To UBound(t)
Sheets(t(x)).Unprotect
Sheets(t(x)).Unprotect
Next
End Sub
Option Explicit
Const MesBordereaux = "2X1,2X2,2X3,2X4,2X5,2X6,2X7,2X8,2X9,2Y1,2Y2,2Y3,2Y4,2Y5,2Y6"
Const Ajustements = "Ajustement carburant,Ajustement bitume,Ajustement acier"
Const AutresFeuilles = "LISTES,INSTRUCTION,INFO PROJET,SOMMAIRE DES BORDEREAUX"
Sub Enlev_protect_tous_onglets()
'
' ENLEVER LA PROTECTION SUR TOUS LES ONGLETS
'
Dim x
For Each x In Split(MesBordereaux, ","): Sheets(x).Unprotect: Next
For Each x In Split(Ajustements, ","): Sheets(x).Unprotect: Next
For Each x In Split(Ajustements, ","): Sheets(x).Unprotect: Next
End Sub
Sub Protéger_tous_onglets()
' PROTÉGER TOUS LES ONGLETS
'
Dim x
For Each x In Split(MesBordereaux, ","): Sheets(x).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True: Next
For Each x In Split(Ajustements, ","): Sheets(x).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True: Next
For Each x In Split(AutresFeuilles, ","): Sheets(x).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True: Next
End Sub
sh.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = "B_" & i + 1