Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Q] VBA Protéger-Déprotéger code VBA => comment acter tout de su it

5 réponses
Avatar
JCF
Bonjour à tous!
Je commande un changement de type de calcul depuis un menu VBA. Ce menu
fonctionne avec un If (affichage différencié selon la valeur d'une
constante), et lance une macro qui va modifier du texte dans mes fonctions
de calcul (basé sur le code d'Hervé Rechercher-Remplacer ici:
http://www.excelabo.net/xl/macros.php#rechercheremplacer ).
Le principe est donc le suivant:
- Le menu affiche "Passer en Calcul Rapide" ou "Passer en Calcul approfondi"
selon la valeur 1 ou 0 d'une constante 'CalComplet'.
- Cela lance la macro Rechercher-Remplacer qui :
- Change la valeur de la constante CalComplet,
- Ajoute ou retire selon le cas dans le code de mes fonctions vba
"Application.Volatile"

J'ai choisi cette solution de Rechercher-Remplacer parce que insérer un If
dans ma formule, basé sur la valeur de la constante CalComplet par exemple,
me fait perdre 5 minutes sur 18 minutes de calcul lorsque je lance de gros
tests...

Pour que mon menu se mette à jour au fur et à mesure des basculements, je le
quitte et rouvre, ainsi il affiche "Passer en Calcul Rapide" lorsque
Application.Volatile est activé dans mon code.

Bon, tout ça marche bien, le problème auquel je me trouve confronté à
présent, c'est que je souhaite que mes macros soient protégées.
Mais lorsque le code VBA est protégé, il n'accepte plus le
rechercher-remplacer...
J'ai donc ajouté le code proposé par Bill ici:
http://www.excelabo.net/xl/protection.php#protecdeprotecVBA

Ca marche même si ça s'applique à lui même (puisqu'il doit déprotéger le
code VBA dans lequel il se trouve).

Mais je rencontre deux problèmes :
- pour la déprotection, ça marche très bien quand j'utilise TestUnProtect,
puis que je lance rechercher-remplacer. En revanche, quand j'intègre la
commande de déprotection à mon code rechercher-remplacer (en tout début bien
sur), ou que dans mon menu je spécifie carrément de lancer d'abord
TestUnProtect puis Rechercher-Remplacer, et bien ça bloque, Excel me dit que
les macros sont protégées!
-pour la reprotection, les macros restent accessibles tant que le classeur
n'a pas été refermé, bonjour la cague, pour ce qui est de la protection du
code, c'est raté!! Existe t'il une instruction pour que ça soit acté tout de
suite?

Donc voilà, si vous avez eu le courage de me suivre jusqu'ici et que vous
avez des solutions pour pallier à ces deux problèmes, et bien je suis
preneur! :-)
A moins que vous ayez carrément une technologie alternative à me proposer!
Merci d'avance,
Jean-Christophe

5 réponses

Avatar
JpPradier
Bonjour JCF

Une autre solution qui résoud tes deux problèmes: Tu fais des macros différentes avec et sans
Application.volatile. Et suivant calcul rapide ou Approfondi, tu lance les unes ou les autres.

j-p
Avatar
JCF
"JpPradier" wrote:
Une autre solution qui résoud tes deux problèmes: Tu fais des macros différentes avec et sans
Application.volatile. Et suivant calcul rapide ou Approfondi, tu lance les unes ou les autres.
Bonjour JP,

et bien en fait ça me semble difficile, parce que Application.volatile se
trouve dans une FONCTION VBA, massivement utilisée dans mon classeur. Il est
donc difficile de changer la fonction à la volée.
Quant à lancer une macro contenant le code, depuis la fonction, ça
m'obligerait à mettre un if et donc perdre du temps, j'imagine.
Non, sinon une solution, mais je ne sais pas si c'est faisable, j'ai vu que
ça se faisait pour les feuilles du classeur, c'est de mettre simplement tout
mon projet en veryhidden, ça suffirait j'imagine à le protéger un minimum des
utilisateurs, mais quel syntaxe faudrait-il alors utiliser?
Merci et à +
JC

Avatar
JpPradier
Ben ça peut etre rapide de changer dans chaque feuille le nom de la fonction avec un truc du style :

application.Displayalertsúlse
For each sh in Worksheets
sh.Cells.Replace What:="maFonction(", Replacement:="maFonctionVolatile("
next

En tout cas, ça peut etre une solution de rechange.

j-p
Avatar
Michel Pierron
Bonsoir JCF;
Puisque Application.Volatile admet le paramètre False ou True (True par
défaut), pour quoi ne pas utiliser:
Application.Volatile CalComplet

MP

"JCF" a écrit dans le message de
news:
Bonjour à tous!
Je commande un changement de type de calcul depuis un menu VBA. Ce menu
fonctionne avec un If (affichage différencié selon la valeur d'une
constante), et lance une macro qui va modifier du texte dans mes
fonctions

de calcul (basé sur le code d'Hervé Rechercher-Remplacer ici:
http://www.excelabo.net/xl/macros.php#rechercheremplacer ).
Le principe est donc le suivant:
- Le menu affiche "Passer en Calcul Rapide" ou "Passer en Calcul
approfondi"

selon la valeur 1 ou 0 d'une constante 'CalComplet'.
- Cela lance la macro Rechercher-Remplacer qui :
- Change la valeur de la constante CalComplet,
- Ajoute ou retire selon le cas dans le code de mes fonctions vba
"Application.Volatile"

J'ai choisi cette solution de Rechercher-Remplacer parce que insérer un If
dans ma formule, basé sur la valeur de la constante CalComplet par
exemple,

me fait perdre 5 minutes sur 18 minutes de calcul lorsque je lance de gros
tests...

Pour que mon menu se mette à jour au fur et à mesure des basculements, je
le

quitte et rouvre, ainsi il affiche "Passer en Calcul Rapide" lorsque
Application.Volatile est activé dans mon code.

Bon, tout ça marche bien, le problème auquel je me trouve confronté à
présent, c'est que je souhaite que mes macros soient protégées.
Mais lorsque le code VBA est protégé, il n'accepte plus le
rechercher-remplacer...
J'ai donc ajouté le code proposé par Bill ici:
http://www.excelabo.net/xl/protection.php#protecdeprotecVBA

Ca marche même si ça s'applique à lui même (puisqu'il doit déprotéger le
code VBA dans lequel il se trouve).

Mais je rencontre deux problèmes :
- pour la déprotection, ça marche très bien quand j'utilise TestUnProtect,
puis que je lance rechercher-remplacer. En revanche, quand j'intègre la
commande de déprotection à mon code rechercher-remplacer (en tout début
bien

sur), ou que dans mon menu je spécifie carrément de lancer d'abord
TestUnProtect puis Rechercher-Remplacer, et bien ça bloque, Excel me dit
que

les macros sont protégées!
-pour la reprotection, les macros restent accessibles tant que le classeur
n'a pas été refermé, bonjour la cague, pour ce qui est de la protection du
code, c'est raté!! Existe t'il une instruction pour que ça soit acté tout
de

suite?

Donc voilà, si vous avez eu le courage de me suivre jusqu'ici et que vous
avez des solutions pour pallier à ces deux problèmes, et bien je suis
preneur! :-)
A moins que vous ayez carrément une technologie alternative à me proposer!
Merci d'avance,
Jean-Christophe


Avatar
JpPradier
Bonjour Michel

Et oui, pourquoi faire simple quand on peut faire compliqué :-))

j-p