Mettre une protection sans interferer avec VBA

Bonsoir,

j'aimerais savoir si il y'a un moyen de mettre une protection sur une feuille sans que cela n’empêche un code VBA de faire son travail

note:

les cellules dans lesquelles le code saisi des données (sous conditions bien-sur) ne sont pas verrouillés sauf qu'elle peuvent être dans des colonnes masquées

PS:

hors sujet =>> est-il possible même sous Excel sans vba (ou avec vba) de bloquer des colonnes spécifique en déplacement même si elles sont espacées ? exemple naviguer sur plusieurs colonnes tout en gardant les colonnes "B:B" ,"C:C" ,"F:F"" visible ?

oui tu peux il faut juste que dans ta macro tu dé vérouille la feuille au début et tu re vérouille a la fin du code

ActiveSheet.Unprotect Password:="mot de passe"

ou protect

Bonjour,

C'est également possible même sans jamais déverrouiller les cellules et sans jamais déprotéger les feuilles...

A+

82demoprotect.xlsm (23.31 Ko)

merci Funkyfarmer, merci galopin01

j'ai testé la méthode de Funkyfarmer et ca a l'air de bien fonctionner a première vu, mais je suis aussi intéressè par ce qu'a dit galopin01

puis-je avoir plus de détail si ça ne te dérange pas ?

Tout est dans le fichier... YA rien de caché... YAKA regarder dans ThisWorkbook

Il n'y a que 4 procédures dont 2 d'une ligne !

J'ai trouvé qu'elles sont suffisamment courtes et explicites pour ne pas avoir besoin de commenter...

La seule astuce est de mettre un Protect à chaque activation de feuille : Ce n'est pas strictement indispensable, cependant quand on bricole avec VBA on fait souvent de nombreuses erreurs de programmation qui font un peu perdre la boule à VBA... Alors je lui rafraichit très souvent les idées pour qu'il n'oublie jamais que c'est VBA qui commande...

Ça m'arrive même de placer un appel à Protect dans certaine procédure compliquée ou je sais que je risque de faire buguer très souvent (surtout dans la phase de test...) afin que VBA se souvienne toujours que quoiqu'il arrive la protection est UserInterfaceOnly = True.

Ce qui ne vous empêche pas de travailler librement si vous souhaitez déverrouiller des cellules ou même déprotéger des feuilles.

Rien ne vous empêche même de créer une macro de déprotection pour une feuille particulière...

Rappelez vous simplement qu'a chaque changement de feuille VBA protègera à nouveau la feuille ou vous accédez.

Dans Module1 il y a juste une Sub de Test pour montrer qu'on peut travailler dans VBA sans déprotéger les feuilles...

A+

Merci infiniment galopin,

je m'excuse j'avais pas bien scruté le fichier que tu as posté et j'ai pas vu les lignes de code dans l'objet thisworkbook

tu m'a vraiment aider , ta méthode est simple et efficace et tu m'a appris beaucoup en quelques lignes, du plus profond de mon cœur je te remercie

La difficulté ce n'est pas le système lui même (L'initialisation du WorkBook)

La difficulté réside dans la compétence du programmeur : Quand on est un programmeur lambda comme moi, on fait beaucoup d'erreurs qui font régulièrement planter VBA.

A l'occasion des erreurs les plus graves le classeur n'est pas sauvegardé lors de la fermeture (puisque Excel à planté) donc le BeforeCose n'a pas été exécuté. Donc à l'ouverture, l'une ou l'autre des Activation ne se fait pas.... Et régulièrement une des feuilles n'est pas protégée ou le UserInterface Only ne joue pas...

C'est pourquoi quand je programme certaines procédures sensibles, bien que ce ne soit pas indispensable, je glisse toujours cette ligne dans le code tout de suite après les Dim :

Ws.Protect Password:="galopin", UserInterfaceOnly:=True

Afin que s'il y a eu un incident de parcours VBA ne soit pas perturbé... J'aurai d'ailleurs très bien pu le glisser dans la Sub Test (mais je ne l'ai pas fait pour bien montrer ce qui est du ressort de l'indispensable et ce qui du ressort des précautions facultatives)

Après quand ton programme est stable tu peux retirer ou non ces lignes de précaution, ça n'a plus d'importance...

Merci pour l’explication, vous êtes au Top

Rechercher des sujets similaires à "mettre protection interferer vba"