Erreur d'exécution sur macros protégées excel

Résolu
alain -  
Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai fait un petit programme excel d'appariement pour les tournois d' échecs qui marche très bien, mais si je protège les feuilles, les macros indiquent l'erreur d'exécution suivante :
" la méthode sort de la classe range a échoué"

D'près ce que j'ai lu sur le net, je pense que c'est à cause des tris qui sont enregistrées dans mes macros !!!

Avez-vous une méthode simple pour remédier à ce PB. Je ne connais rien en VBA.

Merci d'avance pour votre aide

alain

3 réponses

  1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Bonjour
    si vous protégez les feuilles, commencer les macros par:
    Activecsheet.Unprotect
    après la ligne de sélection de la feuille
    et terminez la par:
    Activesheet.Protect
    crdlmnt
    0
    1. alain
       
      Vous m'avez déjà rendu un grand service avec la mise en forme conditionnelle (+SI(OU ......)
      J'ai fini ce programme, mais la seule manip que je connaisse sur les macros est de leurs attribuer un nom, d'enregistrer des actions sur excel (tris , liaisons, formules, etc;...).
      Après l'enregistrement des actions, j'affecte la macro à mon objet (image).
      Je ne sais pas ou insérer le texte ci-dessus.
      Pourriez vous me donner la procédure à suivre pour rentrer votre texte.
      Excusez mon ignorance!!!

      Merci encore de votre aide
      Alain
      0
    2. alain
       
      J'ai pris une version antérieure de mon fichier, non protégée, en validant les cellules que je voulais dévérouiller.
      La manip pour modifier les macros est longue mais cela a bien marché.
      Finalement, les feuilles étaient bien protégées et les macros fonctionnaient.
      Mais je n'ai pas eu de demande de mot de passe??
      Avant de faire la manip sur la derniere version, je voulais savoir s'il y avait une procédure pour déprotéger.

      Merci de votre support
      Alain
      0
  2. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Re

    si vous commandez vos macros par bouton, au plus simple
    clic droit sur le bouton
    "affecter une macro" et choisir "modifier"
    la macro s'affiche
    . Je ne connais pas le libellé et mes explications vont être très hasardeuses!!!
    à vos risques et périls:
    mais dans le texte affiché:

    si votre macro s'adresse à plusieurs feuilles, à chaque sélection de feuille indiquée par:
    Sheets ("xxxx").select
    placez le curseur au bout de cette ligne et taper ENTER
    il se crée la place pour une nouvelle ligne.
    placez y le texte:
    activesheet.unprotect
    en finj de macro si elle n'a qu'une seule feuille(donc jusqte avant End Sub
    ou avant de passer à la feuille suivante dans le texte si c'est las, même opération avec cette fois:
    activesheet.protect

    pour info: entrez vos textes en minuscules, si vos libellés sont corrects, VBA mettra les majuscules, sinon c'est que la frappe n'est pas bonne. N'oubliez pas le point au bon endroit.

    Si difficultés, éditez ici le texte de cette macro.
    Bonne chance

    *PS: pour des macros par enregistrement vous pouvez aussi:
    protéger la feuille avant de lancer l'enregistrement
    commencer l'enregistrement en enlevant la protection et le terminer en la remettant. La macro prendra ces opérations en compte.

    Demandons nous si nous ne sommes pas seuls à comprendre ce que l'on explique?
    0
    1. alain
       
      bonsoir,

      j'ai fait l'essai sur la bonne version et les résultats sont différents; a savoir, après insertion des textes de modification des macros, j'ai protégées mes feuilles mais à chaque action de macro une fenêtre s'ouvre me demandant le mot de passe pour ôter la protection. si j'annule la fenêtre, j'ai encore le message 1004.
      Ci-joint détails des codes macros, en espérant que puissiez trouver une solution.
      Merci

      Sub validerR1()
      '
      ' validerR1 Macro
      ' Macro enregistrée le 10/02/2012 par asp
      '

      '
      Sheets("classR1").Select
      ActiveSheet.Unprotect
      Range("C5:F29").Select
      Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Selection.Sort Key1:=Range("F6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Range("M16").Select
      ActiveSheet.Protect
      End Sub
      Sub validerR2()
      '
      ' validerR2 Macro
      ' Macro enregistrée le 10/02/2012 par asp
      '

      '
      Sheets("classR2").Select
      ActiveSheet.Unprotect
      Range("C5:H29").Select
      Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Selection.Sort Key1:=Range("H6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Range("T16").Select
      ActiveSheet.Protect
      End Sub
      Sub validerR3()
      '
      ' validerR3 Macro
      ' Macro enregistrée le 10/02/2012 par asp
      '

      '
      Sheets("classR3").Select
      ActiveSheet.Unprotect
      Range("C5:J29").Select
      Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Selection.Sort Key1:=Range("J6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Range("T15").Select
      ActiveSheet.Protect
      End Sub
      Sub validerR4()
      '
      ' validerR4 Macro
      ' Macro enregistrée le 10/02/2012 par asp
      '

      '
      Sheets("classR4").Select
      ActiveSheet.Unprotect
      Range("C5:L29").Select
      Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Selection.Sort Key1:=Range("L6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Range("T19").Select
      ActiveSheet.Protect
      End Sub
      Sub validerR5()
      '
      ' validerR5 Macro
      ' Macro enregistrée le 10/02/2012 par asp
      '

      '
      Sheets("classR5").Select
      ActiveSheet.Unprotect
      Range("C5:N29").Select
      Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Selection.Sort Key1:=Range("N6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Range("T15").Select
      ActiveSheet.Protect
      End Sub
      Sub validerR6()
      '
      ' validerR6 Macro
      ' Macro enregistrée le 10/02/2012 par asp
      '

      '
      Sheets("classR6").Select
      ActiveSheet.Unprotect
      Range("C5:P29").Select
      Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Selection.Sort Key1:=Range("P6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Range("T18").Select
      ActiveSheet.Protect
      End Sub
      Sub validerR7()
      '
      ' validerR7 Macro
      ' Macro enregistrée le 10/02/2012 par asp
      '

      '
      Sheets("classement R7").Select
      ActiveSheet.Unprotect
      Range("C6:R29").Select
      Selection.Sort Key1:=Range("C6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Selection.Sort Key1:=Range("R6"), Order1:=xlDescending, Header:=xlGuess, _
      OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1 _
      :=xlSortNormal
      Range("T24").Select
      ActiveSheet.Protect
      End Sub
      0
    2. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      Bonjour
      vous n'aviez pas parlé de mot de passe! et ce n'est pas obligatoire
      vos codes sont donc:
      ActiveSheet.Unprotect "votre mot de passe"
      ActiveSheet.Protect "votre mot de passe"

      mais si vous mettez un mot de passe,, il faut aussi protéger VBA sinon le mot de passe est visible dans les macros qui restent éditables:

      dans une feuille d'édition de macro en VBA donc:
      barre d'outil / outil / Propriètès de VBA projet
      dans la nouvelle fenêtre onglet: Protection
      cohcher :"verrouller lep rojet pour affichage"
      entrez un mot de passe à ne pas oublierr et OK

      Vous pouvez aussi accéder à l'affichage VBA via le ruban (à partir de 2007) sinon outil / macro
      onglet développeur et icone VBA tout à gauche.

      crdlmnt

      une petite prime
      si vous voulez que les opérations s'exècutent de manière plus "calme" à l'écran, commencez vos macro par:
      application.screenupdating=False
      0
  3. alain
     
    Bonjour,

    C'est Super!!!
    la manip avec activesheet"mot de passe"....a bien marché!!!
    Sur Excel 2003 je n'ai pas (propriété de VBA) dans barre outls/outils

    Tanpis pour le risque de connaitre mon mot de passe, l'important était que mes collegues n'endomagent pas des formules pendant l'utulisation de ce programme.

    Mille fois merci, Vaucluse
    Alain (le varois)
    0
    1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      re

      Pas de quoi et pour info:

      1°) le mot de passe n'est pas obligatoire, même si Excel le demande systématiquement. Il suffit de cliquer sur OK sans entrer de mot de passe dans la fenêtre de protection.
      2°) même si vous n'avez pas le chemin, vous avez accès à l'onglet outil de VBA dans la barre des tâches en haut de la fenêtre VBA lorsque vous affichez un texte de macro!

      bonne route
      0