Macro et protection feuille

Résolu
Bonjour,

Problème de macro simple tri

Deux macros sont crée, une de tri et l'autre pour remise a zéro du document.
Les cellules concernées sont déverrouillées les deux fonctionnent.

Quand je protège le document => la macro tri ne fonctionne plus ?

Visual basic => « la methode sort de la classe Range à échoué »
débogage =>
Range("B10:O45").Select
Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B10").Select
End Sub

Perso je nage...
Merci de m'éclairer.

19 réponses

Résumé de la discussion

Le problème porte sur une macro Excel de tri qui ne s’exécute pas lorsque la feuille est protégée, avec l’erreur « la méthode sort de la classe Range a échoué ». Des conseils préconisent soit de déprotéger la feuille avant le tri et de la reprotéger ensuite, soit d’autoriser explicitement le tri dans les options de protection. D’autres solutions indiquent d’utiliser une macro qui déprotège temporairement, effectue le tri, puis réactive la protection, ou encore d’insérer le mot de passe dans les commandes Unprotect et Protect. En cas de mot de passe, certaines configurations montrent que même avec la protection active, le tri peut être autorisé si l’option est cochée et la macro gère la séquence déprotéger, trier puis protéger.

Bobot (l’IA à votre service)
  1. Merci beaucoup cela va j'espère incité les entraîneurs a être plus sérieux pour les présences ils « disent » que cela prend trop de temps.
    J'espère qu'ils ne seront pas effrayés par le message d'avertissement pour envoi automatique, mais je suppose qu'il n'y a pas d'autre solution.
    Moi j'estime que c'est déjà parfait

    Merci encore
    Jean-Charles

    Pour le cercle gymnique : Enfants du Peuple de Saint-Nicolas (Liège, Belgique)
    1. Re,

      Et bien voila qui marche, j'ai reçu sur une adresse de secours le fichier,

      dans le module 1 mettre ton adresse mail et c'est tout bon

      ActiveWorkbook.SendMail Recipients:="jc.bortoletto@gmail.com"
      1. c'est pas possible je repart a zero

        https://www.cjoint.com/c/CLnxfxx3FXx

        Avec le doc tel qu'il est, cela fonctionne à moitié.
        Quand je clique sur le bouton envoie, la messagerie s'ouvre et attend que je tape l'adresse alors que mon adresse devrait simplement être inscrite par défaut c'est tout.
        Je ne comprends plus rien ...
        1. Re,

          pour ne pas faire d'erreur, remplace le code du module 2 par celui ci, j'ai rajouté une constante pour le numéro de port qui normalement pour Gmail est le 465
          renseigne dans le code la constante que j'ai mis en gras avec l'adresse du destinataire et teste

          Const Dest As Variant = "wwwwwww.ww@free.fr" '- adresse mail du destinataire

          https://www.cjoint.com/c/CLnwREIOIjo

          pour le SMTP Hotmail il faudra contrôler, je crois qu'il n'en existe qu'un SMTP.live.com par contre il existe plusieurs port 25 ou 587 et 995 si tu peux te renseigner auprès des différents expéditeurs

          A+
          Mike-31

          Une période d'échec est un moment rêvé pour semer les graines du savoir.
          1. moi c'est Gmail => spmt.gmail.com
            1. apparement cela ce limiterai à
              hotmail.fr
              hotmail.com
              hotmail.be
              gmail.com
          2. Re,

            à partir de leur adresse on peut automatiser le SMTP,

            pour modifier le code il me faut simplement la liste des fournisseurs d'accès comme FREE, ORANGE etc

            as tu correctement saisi dans les constantes entre guillemets ton adresse et toujours entre guillemet ton SMTP. Si oui il ne doit pas y avoir de problème

            quel est ton fournisseur d'accès internet
            1. Là, je suis bouche beee, et forcement nul en regard de ta macro.

              Apparemment je n'arrive pas faire fonctionner le bouton envoi.

              -Le destinataire c'est moi OK
              -l'adresse de l'expéditeur pose problème, en fait j'ai cinq entraîneurs qui tardent toujours a me renvoyer les présences et donc je pensais facilité en automatisant le doc qu'ils doivent me renvoyer, mais bien sûr ils on chacun des adresses différentes.
              -SMTP est en rapport avec leur adresse ?
              1. Re,

                récupère ton fichier que j'ai modifié à ma manière et qui travaille sous protection avec le mot de passe "tout"
                va dans le module2 et recherche en début de code ces 3 lignes que tu dois renseigner entre guillemets
                la première ligne adresse destinataire
                deuxième ligne éventuellement adresse expéditeur
                et troisième saisir le SMTP du fournisseur d'accès

                Const Dest As Variant = "jc.bortoletto@gmail.com" '- adresse mail du destinataire
                Const Exped As Variant = "www.xxxxxxx@free.fr" '----- adresse mail de l'expéditeur
                Const C_Ent As Variant = "SMTP.free.fr" '---------------- adresse du SMTP"

                pour un envoi anonyme mettre l'adresse destinataire
                Const BCC As Variant = "" '-------------------------- adresse mail destinataire pour envoi BCC ou BCI ou CCI

                pour tester utilise mes trois boutons, et si tu préfère recevoir le fichier en PDF il suffit de me le dire

                https://www.cjoint.com/c/CLnlzh7GjGt

                A+
                Mike-31

                Une période d'échec est un moment rêvé pour semer les graines du savoir.
                1. Re,

                  Merci pour l'invitation, mais Liège est un peu loin, je suis région Toulousaine.
                  Je te regarde le fichier et te le retourne
                  1. Re,

                    peux tu remettre ton fichier en ligne, ton lien n'est plus actif.

                    je te placerai la macro qui permet le tri sous protection
                    et l'envoi l'envoi de la feuille par mail
                    1. pour ce qui est du tri cela fonctionne c'est pour cette raison que dans un premier temps j'ai mis le problème résolu ... et fait un nouveau sujet mais comme personne ne répondait je me suis permit de revenir vers toi.
                      si tu habites du coté de Liège je t'enverrais une invitation quand les petites fond leur gymnastique .. (concours GRS)
                  2. Re,

                    Oui bien sur, mais quel serait le critère déclenchant, un bouton, une saisie dans une cellule ?
                    1. re bonjour est-il possible dans ma feuille de calcul de faire une macro qui renverrais le fichier (rempli) a mon adresse mail
                      1. Re,

                        sans toucher aux protections, coller ce code dans un module et l'activer
                        le tri se fera par la suite sous protection sans problème

                        Sub tri()
                        Worksheets("Feuil3").Unprotect Password:="tout"
                        Worksheets("Feuil3").Protect Password:="tout", UserInterfaceOnly:=True, _
                        AllowFiltering:=True, AllowUsingPivotTables:=True, AllowSorting:=True
                        End Sub

                        A+
                        Mike-31

                        Une période d'échec est un moment rêvé pour semer les graines du savoir.
                        1. merci beaucoup PHILOU10120 cela a parfaitement fonctionné mais je n'ai toujours pas compris...

                          merci
                          1. Contributeur
                            Le raisonnement la macro enlève la protection puis exécute le tri et finalement remets la protection
                            donc on se retrouve en fin de macro comme on était ou début avec une feuille protégée et le tri fait.
                          2. j'entends bien c'est l'idée simple et génial que vous avez eu mais pourquoi au départ le tri ne fonctionne pas alors que l'autre macro fonctionne
                        2. Bonjour le fil,

                          C'est joli de mettre à notre disposition un fichier mais ou est le mot de passe pour accéder à la feuille ?
                          1. le mot de passe est visible en en J4
                        3. Contributeur
                          Bonjour tous

                          vous avez raison Philou, toutefois:

                          Activesheet.Unprotect "mot de passe"

                          suffit, le reste se fait par défaut

                          Et pour rester logique, il faut rajouter le mot de passe à la fin

                          Activesheet.protect "mot de passe"

                          s"il y en a un bien sur

                          Petite question: chez moi la protection propose l'option autoriser le tri si on coche dans la, liste, mais cela ne fonctionne pas une fois la feuille protégée. Chez vous ça se passe comment?

                          crdlmnt

                          Errare humanum est, perseverare diabolicum
                          1. Contributeur
                            Même problème quand la feuille est protégée on ne peut pas trier, alors que j'ai bien coché tri.
                            Ok pour la protection avec mot de passe, j'ai l'habitude de juste protéger pour éviter d'écraser les formules, et je ne mets pas de mot de passe, Vaucluse tu as entièrement raison pour remettre la protection.
                        4. Contributeur
                          Bonjour Jcarl
                          Voilà la macro pour ôter la protection et la remettre

                          sub trie()

                          'déprotéger la feuille en début de macro, avec ces lignes de commande

                          Sheets("votre feuille").Select
                          ActiveSheet.Unprotect Password:="votre mot de passe"
                          Range("B10:O45").Select
                          Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
                          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                          DataOption1:=xlSortNormal
                          Range("B10").Select
                          'remettre la protection à la fin de la macro
                          ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                          End Sub