Erreur d'Execution 9 [Résolu]

Signaler
-
Messages postés
9550
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
1 septembre 2020
-
bonjour,

Etant débutante en VBA, je viens de créer à partir d'une macro que j'ai trouvé sur ce forum, une macro pour sécurisé une partie des mes feuilles excel de mon fichier.
Seulement quand je teste j'ai une "erreur d'execution '9' : l'indice n'appartient pas à la sélection".
Ci dessous mon code :
Sub AaaSectFeuille()
'
' AaaSectFeuille Macro
'
motpass = "Toto"
Groupe = Array("1(C)", "2(C)", "3(C)", "4(C)", "5(C)", "6(C)", "7(C)", "8(C)", "9(C)", "10(C)", "11(C)", "12(C)", "13(C)", "14(C)", "15(C)", "16(C)", "17(C)", "18(C)", "19(C)", "20(C)", "21(C)", "22(C)", "23(C)", "24(C)", "25(C)", "26(C)", "27(C)", "28(C)", "29(C)", "30(C)", "31(C)", "Para_CSH", "1(P)", "2(P)", "3(P)", "4(P)", "5(P)", "6(P)", "7(P)", "8(P)", "9(P)", "10(P)", "11(P)", "12(P)", "13(P)", "14(P)", "15(P)", "16(P)", "17(P)", "18(P)", "19(P)", "20(P)", "21(P)", "22(P)", "23(P)", "24(P)", "25(P)", "26(P)", "27(P)", "28(P)", "29(P)", "30(P)", "31(P)", "Para_PSL", "1(M)", "2(M)", "3(M)", "4(M)", "5(M)", "6(M)", "7(M)", "8(M)", "9(M)", "10(M)", "11(M)", "12(M)", "13(M)", "14(M)", "15(M)", "16(M)", "17(M)", "18(M)", "19(M)", "20(M)", "21(M)", "22(M)", "23(M)", "24(M)", "25(M)", "26(M)", "27(M)", "28(M)", "29(M)", "30(M)", "31(M)", "Para_MTE")
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur les feuilles", "")
If motpass = " " Then Exit Sub
If motpass <> "Toto" Then
MsgBox "Vous n'avez pas les droits"
Else
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For Each Feuille In Sheets(Groupe)
Feuille.Protect motpass
Next Feuille
Range("A1").Select
End If
End Sub.

Cela bloque ici : For Each Feuille In Sheets(Groupe)

J'ai vérifié tous les noms des feuilles et il n'y à pas d'erreurs.
A noter que ce code fonctionne sur un fichier qui contient moins de feuilles.

Pouvez-vous m'aidez s'il vous plaît?

9 réponses

Messages postés
9550
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
1 septembre 2020
1 896
Bonjour

Essaies ceci

Option Explicit

Sub AaaSectFeuille()
'
' AaaSectFeuille Macro
'
Dim motdepasse As String, motpass As String
Dim n As Long, nombre As Long
Dim groupe()
motpass = "Toto"
groupe = Array("1(C)", "2(C)", "3(C)", "4(C)", "5(C)", "6(C)", "7(C)", "8(C)", "9(C)", "10(C)", "11(C)", "12(C)", "13(C)", "14(C)", "15(C)", "16(C)", "17(C)", "18(C)", "19(C)", "20(C)", "21(C)", "22(C)", "23(C)", "24(C)", "25(C)", "26(C)", "27(C)", "28(C)", "29(C)", "30(C)", "31(C)", "Para_CSH", "1(P)", "2(P)", "3(P)", "4(P)", "5(P)", "6(P)", "7(P)", "8(P)", "9(P)", "10(P)", "11(P)", "12(P)", "13(P)", "14(P)", "15(P)", "16(P)", "17(P)", "18(P)", "19(P)", "20(P)", "21(P)", "22(P)", "23(P)", "24(P)", "25(P)", "26(P)", "27(P)", "28(P)", "29(P)", "30(P)", "31(P)", "Para_PSL", "1(M)", "2(M)", "3(M)", "4(M)", "5(M)", "6(M)", "7(M)", "8(M)", "9(M)", "10(M)", "11(M)", "12(M)", "13(M)", "14(M)", "15(M)", "16(M)", "17(M)", "18(M)", "19(M)", "20(M)", "21(M)", "22(M)", "23(M)", "24(M)", "25(M)", "26(M)", "27(M)", "28(M)", "29(M)", "30(M)", "31(M)", "Para_MTE")
motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur les feuilles", "")
If motpass = " " Then Exit Sub
If motpass <> "Toto" Then
  MsgBox "Vous n'avez pas les droits"
Else
  nombre = UBound(groupe)
  Application.ScreenUpdating = False
  For n = 0 To nombre
    Sheets(groupe(n)).Protect motpass
  Next n
  Range("A1").Select
End If
End Sub

Cdlmnt
Bonjour CCm81,

Merci pour votre retour.

J'ai testé votre macro mais elle bloque avec le même message d'erreur à ce niveau là :

Sheets(groupe(n)).Protect motpass

Petit précision, j'ai mis le code dans un module lié a un bouton d'activation.
Je ne comprends pas pourquoi cela bloque ???

Merci pour votre aide.

Cdt.
Messages postés
9550
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
1 septembre 2020
1 896
Bizarre, chez moi ça fonctionne
https://mon-partage.fr/f/ELzI1CCF/

Cdlmnt
Merci pour ce retour et votre dossier cela fonctionne dans le votre et sur le mien qui contient beaucoup de feuille des que je le teste sur le mien qui à 120 feuilles ( à noter que je n'en sécurise que 95), cela bloque toujours a cette endroit .

J'ai d'ailleurs copier coller votre code et modifier le groupe et cela bloque.

Soit il y a quelque chose qui m'échappe, soit c'est la parenthèse dans le nom de mes feuilles qui pose problème.
Qu'en pensez-vous?

un grand merci pour votre aide.
Messages postés
9550
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
1 septembre 2020
1 896
Vérifies que les noms de tes feuilles sont bien reportés dans ton tableau (attention aux espaces malheureux qui ne se voient pas forcément dans les onglets!)
https://mon-partage.fr/f/Ee8H2XG2/

Cdlmnt
Bonjour CCm81,

Après vérification du nom de toute les feuilles, le code fonctionne (un espace manquait) .
Merci pour ton aide.
Puis-je abuser en te posant une autre question?
J'ai copié coller ton code mais cette fois ci j'ai mis la fontion Unprotect sur cette ligne :

Sheets(groupe(n)).Unprotect motpass

Or lorsque je teste j'ai ce message d'erreur : "Erreur d'exécution '1004' - "Mot de passe non valide.." et au debogage c'est " Sheets(groupe(n)).Unprotect motpass" qui est en erreur jaune.
Je ne comprends pas pourquoi?

Encore un grand merci pour ton aide !!!
Messages postés
9550
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
1 septembre 2020
1 896
Peut être as tu oublié d'affecter Toto à la variable motpass ?
J'ai mis motpass en constante en début de code, mais ce n'est pas ça qui peut provoquer/supprimer l'erreur
https://mon-partage.fr/f/4dxePVqQ/

Cdlmnt
Merci beaucoup !
Tout fonctionne.
Merci pour votre patience d'autant que cela m'a permis de voir et de comprendre mes erreurs.
J'apprends doucement mais sûrement...
Messages postés
9550
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
1 septembre 2020
1 896
De rien

Bonne fin de journée

Penses à déclarer les variables (Dim ...) , la directive Option Explicit en début de module t'oblige à le faire
L'utilisation des constantes (Const motpass = "Toto") permet de les utiliser dans plusieurs procédures, et en cas de modification, tu n'as qu'une seule intervention à faire et sans toucher au code des procédures !

Cdlmnt