Rendre compatible la protection d'une feuille avec une macro

Accueil – Le CFO masqué Forums VBA Rendre compatible la protection d'une feuille avec une macro

Mots-clés : 

7 sujets de 1 à 7 (sur un total de 7)
  • Auteur
    Articles
  • #64602
    gino.thys
    Participant

    Bonjour de Belgique,

    Je me permets de vous demander conseil car je souhaite rendre compatible la protection d’une feuille de calcul Excel, composée de cellules protégées et d’autres non protégées (surlignées en vert), avec l’exécution d’une macro activée par un bouton de commande. La macro efface le contenu de certaines cellules lorsqu’une condition est remplie, à savoir la mention “Oui” dans le colonne intitulée “Débité ?” de la feuille “5. Sorties non fixes”.

    En mode feuille non protégée, la macro fonctionne très bien 🙂
    En mode feuille protégée, la macro ne fonctionne pas du tout 🙁

    Pourriez-vous m’aider à trouver la solution svp (voir fichier en attaché).

    Voici la macro :

    Sub efface_débité_0ui()

    Dim ligne As Integer
    Dim colonne As Integer
    Dim derniere_ligne As Integer

    ligne = 24
    colonne = 6
    derniere_ligne = Cells.SpecialCells(xlCellTypeLastCell).Row

    While ligne <= derniere_ligne
    If (Cells(ligne, colonne).Value = “Oui” And Cells(ligne, colonne).Value <> “”) Then

    Range(Cells(ligne, colonne – 3), Cells(ligne, colonne + 4)).Select
    Selection.ClearContents
    End If

    ligne = ligne + 1
    Wend

    Range(“C25”).Select
    ActiveWorkbook.Worksheets(“5. Sorties non fixes”).ListObjects(“Tableau6”).Sort. _
    SortFields.Clear
    ActiveWorkbook.Worksheets(“5. Sorties non fixes”).ListObjects(“Tableau6”).Sort. _
    SortFields.Add2 Key:=Range(“Tableau6[D?bit? ?]”), SortOn:=xlSortOnValues, _
    Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(“5. Sorties non fixes”).ListObjects(“Tableau6”). _
    Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With

    Range(“C24”).Select

    End Sub

    Quelques explications supplémentaires :
    Comme il se doit, l’objectif de la protection est d’éviter que l’utilisateur n’efface ou ne tronque accidentellement des formules, la structure d’une feuille de calcul ou même du classeur. Dès lors, seules les zones surlignées vertes sont éditables par l’utilisateur ; elles sont constituées de cellules non protégées, c’est-à-dire éditable après protection de la feuille de calcul.

    La feuille « 1. Situation » est complétée en premier lieu pour recevoir le solde des avoirs en banque ou en caisse à une date déterminée, ici le 11/05/2020 ; date à partir de laquelle la prévision de trésorerie est établie. Cette date va aussi servir à dérouler un calendrier dynamique dans la feuille intitulée « 5. Sorties non fixes ».

    La feuille « 5. Sorties non fixes » est la feuille de travail du trésorier dans laquelle il complète les champs éditables (surlignés en vert pour mémoire).
    Lorsque la dette est débitée du compte en banque, il l’indique à la feuille de calcul en mettant le statut « Oui » dans le champ « Débité ? » de la table. La macro derrière le bouton « Supprimer Débité ? = Oui » efface les données entre la colonne intitulée « Fournisseur / Créancier » et « Échéance prévue par trésorier » chaque fois que le champ « Débité ? » a pris la valeur « Oui » et ensuite replace les autres données correctement.
    Pour info, les champs des colonnes intitulées 1, 2, 3, etc. comprtent des formules ; ils sont protégés.

    Enfin, et pour mémoire, la dernière feuille comporte les listes de validation à usage technique.

    Je serais très heureux de recevoir vos commentaires critiques et votre solution à mon problème.

    Belle journée à vous.

    Très cordialement,

    Gino Thys

    #64603
    gino.thys
    Participant

    … avec le fichier attaché

    #64604
    gino.thys
    Participant

    … fichier attaché en mode xlsx au lieu de xlsm (désolé)

    Attachments:
    You must be logged in to view attached files.
    #64961
    questvba
    Participant

    Salut,
    Je n’ai pas pris la peine d’étudier ton code car il me semble approximatif. Exemple : Pourquoi parcourir des lignes vides ?

    Mais bon, ton problème, c’est la protection.

    En début du code, tu mets cette ligne
    ActiveSheet.Unprotect "MDP" 'ou MDP est ton Mot De Passe

    Et en fin de code, tu ajoutes ceci :
    ActiveSheet.Protect "MDP"

    #64962
    gino.thys
    Participant

    Hello Questvba,

    Merci pour ta réponse.

    Ca marche évidemment, néanmoins l’utilisateur de l’outil connaitra le MDP en allant dans l’éditeur VBA. Comment éviter cet écueil ?

    #64963
    questvba
    Participant

    Gino,
    Avec ALT F11, tu arrives sur la fenêtre VBA. Onglet ‘Outils’ → ‘Propriétés de VBAProject…’ → Onglet ‘Protection’, Cocher ‘Verrouiller le projet pour affichage’ → encoder ton MDP (un autre que celui de la feuille) et le confirmer → OK → Quitter → Enregistrer → Fermer le fichier.
    À la prochaine ouverture, il faudra mettre ce MDP pour aller modifier le code des macros.

    #64985
    gino.thys
    Participant

    Questvba,

    Merci, une bonne épine hors du pied pour moi.

7 sujets de 1 à 7 (sur un total de 7)
  • Vous devez être connecté pour répondre à ce sujet.