Erreur d'Execution 9

Résolu
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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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...
      1. 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 !!!
        1. 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.
          1. 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.
            1. 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