Accueil – Le CFO masqué › Forums › VBA › Rendre compatible la protection d'une feuille avec une macro
Mots-clés : Protection
- Ce sujet contient 6 réponses, 2 participants et a été mis à jour pour la dernière fois par gino.thys, le il y a 4 années et 5 mois.
-
AuteurArticles
-
13 mai 2020 à 6 h 35 min #64602gino.thysParticipant
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 Integerligne = 24
colonne = 6
derniere_ligne = Cells.SpecialCells(xlCellTypeLastCell).RowWhile ligne <= derniere_ligne
If (Cells(ligne, colonne).Value = “Oui” And Cells(ligne, colonne).Value <> “”) ThenRange(Cells(ligne, colonne – 3), Cells(ligne, colonne + 4)).Select
Selection.ClearContents
End Ifligne = ligne + 1
WendRange(“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 WithRange(“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
13 mai 2020 à 6 h 37 min #64603gino.thysParticipant… avec le fichier attaché
13 mai 2020 à 6 h 40 min #64604gino.thysParticipant… fichier attaché en mode xlsx au lieu de xlsm (désolé)
Attachments:
You must be logged in to view attached files.23 mai 2020 à 4 h 44 min #64961LionelParticipantSalut,
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"
23 mai 2020 à 6 h 15 min #64962gino.thysParticipantHello 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 ?
23 mai 2020 à 7 h 18 min #64963LionelParticipantGino,
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.24 mai 2020 à 12 h 25 min #64985gino.thysParticipantQuestvba,
Merci, une bonne épine hors du pied pour moi.
-
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.