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

Résolu/Fermé
alain - 10 févr. 2012 à 16:57
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 - 11 févr. 2012 à 09:27
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
A voir également:

3 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
10 févr. 2012 à 17:09
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
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
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
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
Modifié par Vaucluse le 10/02/2012 à 18:22
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
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
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
Modifié par Vaucluse le 11/02/2012 à 06:47
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
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
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 419
Modifié par Vaucluse le 11/02/2012 à 09:29
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