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. 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
    0
    1. 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
      0
      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.
        0
    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 ?
      0
      1. le mot de passe est visible en en J4
        0
    3. merci beaucoup PHILOU10120 cela a parfaitement fonctionné mais je n'ai toujours pas compris...

      merci
      0
      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.
        0
      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
        0
    4. 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.
      0
      1. re bonjour est-il possible dans ma feuille de calcul de faire une macro qui renverrais le fichier (rempli) a mon adresse mail
        0
        1. Re,

          Oui bien sur, mais quel serait le critère déclenchant, un bouton, une saisie dans une cellule ?
          0
          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
            0
            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)
              0
          2. 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
            0
            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.
              0
              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 ?
                0
                1. 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
                  0
                  1. moi c'est Gmail => spmt.gmail.com
                    0
                    1. apparement cela ce limiterai à
                      hotmail.fr
                      hotmail.com
                      hotmail.be
                      gmail.com
                      0
                  2. 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.
                    0
                    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 ...
                      0
                      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"
                        0
                        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)
                          0