Erreur d'Execution 9

Résolu/Fermé
CEMOI - Modifié le 18 août 2020 à 17:08
ccm81 Messages postés 10862 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 30 mai 2024 - 20 août 2020 à 18:26
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

ccm81 Messages postés 10862 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 30 mai 2024 2 409
18 août 2020 à 19:07
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
0
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.
0
ccm81 Messages postés 10862 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 30 mai 2024 2 409
19 août 2020 à 16:50
Bizarre, chez moi ça fonctionne
https://mon-partage.fr/f/ELzI1CCF/

Cdlmnt
0
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10862 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 30 mai 2024 2 409
Modifié le 19 août 2020 à 18:23
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
0
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 !!!
0
ccm81 Messages postés 10862 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 30 mai 2024 2 409
Modifié le 20 août 2020 à 15:24
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
0
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...
0
ccm81 Messages postés 10862 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 30 mai 2024 2 409
Modifié le 20 août 2020 à 18:40
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
0