Trouver une instruction VBA

cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007 - 22 févr. 2007 à 12:54
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007 - 23 févr. 2007 à 11:30
Bonjour à tous

A vrai dire, je poste ce message bien qu'a priori, il ne relève pas véritablement de la programmation. Je vous expose donc ma requête qui n'est pas trop simple à expliquer. Je me demande comment on peut retrouver une isntruction VBA. J'ai divers fichiers excel. Ils sont tous indépendants les uns des autres. Chacun de ses fichiers contient une macro.

Par exemple, le fichier bidule.xls contient ce code:
Range("A1:L1").Select
'Sélectionner la plage A1:L1
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, Orientation:=xlLeftToRight
        'Trier les valeurs de la ligne par ordre croissant

Le fichier machin.xls contient le code suivant:
............
If Cells(i, j + 1) = Cells(1, 1) Then
Cells(i, j + 1).Select
MsgBox "Gagné!"
Else
.......
 Les codes en eux-même n'ont aucune importance. C'est la raison pour laquelle, je ne donne que des morceaux et je n'expose pas l'objectif de ces macros.Comme je le spécifiais, je cherche à retrouver une instruction. Par exemple, je veux retrouver tous les codes ayant l'instruction Msgbox ou Selection.SortKey.Avec l'explorateur et à l'aide de Ctrl+F, je peux trouver tous les fichiers ayant tel ou tel texte ou encore tel nombre, à condition qu'il se trouve dans une cellule.Par exemple, si mon fichier truc.xls a en B4 le texte Plaisir, je tape Ctrl+F. Une petite fenêtre qui s'appelle Rechercher en utilisant le(s) critère(s) ci-dessous et dans le champ Un mot ou une pharse dans le fichier:"Plaisir", j'obtiendrais la liste de tous les fichiers contenant le mot plaisir.
Maintenant, si je veux rechercher non pas un texte se trouvant dans une cellule mais un code ou une instruction, là l'explorateur ne m'affiche aucun résultat et pour cause, les codes par définition sont dans l'éditeur de macros et donc cachés en quelque sorte.Par exemple, si je tape sort ou key je ne retrouve pas le fichier bidule.xls. Ma question est donc: "Existe-t-il un moyen pour retrouver une instruction parmi tous les fichiers sans les ouvrir bien entendu un par un et sans examiner à la loupe chacune des macros?
Pardon pour la longueur du post. J'espère avoir été clair en tout cas. Merci beaucoup pour vos conseils.Je parle bien de VBA et non de VB6 ou autre. Bonne fin de journée.

6 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 févr. 2007 à 13:38
En d'autres termes : tu veux faire en faisant mais sans faire.
Madame Soleil, alors ...
L'as-tu consultée ?
Une macro, pour rappel, peut-être inscrite dans un module et une autre macro peut appeler ce module.
Le module en cause peut lui-même appeler un autre module.
Il y a enfin des macros non éditables.
Quel est donc le but de ta "manoeuvre" ?
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
22 févr. 2007 à 15:53
Bonjour tu connais?

Appeler un module sans le connaître? Le but de la manoeuvre est tout simplement comme je l'ai dit de retrouver tous les fichiers avec une macro contenant telle ou telle instruction, rien d'autre. T'as déjà entendu parler de l'explorateur? Quand t'as des dizaines de fichiers,essaies de te souvenir de chacun d'eux et en particulier avec des macros.Avant de répondre par une ironie mal placée, il faut également lire les posts dans leur intégralité. Su tu lis mes post qui sont d'ailleurs relavtivement peu nombreux, tu constateras que je n'ai jamais rien exigé ni demandé qu'on fasse à ma place.Alors tes commentaires, tu peux te les garder.Je me suis permis une fois une petite blagounette, rien de plus.J'ai demandé des conseils et non exigé quelque chose.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 févr. 2007 à 16:00
Oui...
Relis bien ma réponse, également...
et tu verras que tu peux avoir des macros qui en utilisent d'autres et que ces dernières peuvent à la fois être cachées et en utiliser d'autres elles-mêmes.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 févr. 2007 à 18:55
Bonsoir Zanus,

J'ai maintenant un peu plus de temps pour t'expliquer plus précisément certains aspects.

Je ne connais pas VBA, mais j'imagine bien volontiers qu'il est au moins aussi performant que l'était, entre autres, Word Basic (bien longtemps avant l'apparitopn de VBA, donc).

Voici donc un mécanisme que nous mettions en place pour des applications distribuées dans de nombreux postes à l'étanger et éviter d'avoir sans cesse à intervenir pour réparer des dégâts faits par l'intervention, loin de France, de bidouilleurs divers qui croyaient apporter des "améliorations".
1) toutes les macros et modules esseniels : cachés et non éditable
2) travail en "miroir" (le document de base n'est pas celui de travail)
3) à l'ouverture du miroir (dont le nom est transformé) : ce nom est mis en variable publique dans un des modules innaccessible
4) depuis le document de travail, la seule macro accessible appelle toujours la même routine (appelons-la toto) du module et l'accompagne d'arguments, dont un chiffre.
Cette routine passe à une autre routine ou fonctions (selon le cas) : tous les arguments non vides, sauf le chiffre concerné, qui vient en dernier.
Comment se sert-on de ce chiffre ? en le retranchant du total des valeurs ascii des lettres composant le nom (variable publique en ce qui le concerne). Imaginons que cette soustraction donne 5 ... Un select case nous fera connaître quelle est la fonction ou routine à exécuter.
Le développeur n'a plus qu'à calculer cet argument à passer à toto en fonction de la routine ou fonctions que toto appellera à son tour.

Si un candodat bidouilleur tentait de lancer directement l'original, en admettant qu'il ait pu passer les freins de sécurité également assez complexes, .... eh bien... il se "cassait royalement les dents" puisque la fameuse soustraction, faite sur le total des valeurs ascii d'un nom différent (le nom debase) avait 99,99 % de chances de l'envoyer dans le Case Else du Select Case exposé plus haut... et je préfère ne pas te dire ce qu'il se passait alors...

Ce n'est là, ZANUS, qu'un seul des aspects qui devraient te permettre de comprendre ce que je voulais dire.


 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 févr. 2007 à 22:50
Zanus, je ne pense pas que tu puisses y arriver sans créer un petit programme qui ouvrira chaque classeur Excel et ira lire les bouts de codes de chaque feuille, classe, module,...

J'ai commencé quelque chose en ce sens, mais c'est encore à l'état d'embryon...
Si tu regardes du côté de VBE, ça pourrait te donner des pistes.

MPi
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
23 févr. 2007 à 11:30
Bonjour   MPI et jmfmarques et merci pour votre contribution. Lorsque j'aurai un moment, j'étudierais ça avec bienveillance. Bon week-end à tous les deux.
0
Rejoignez-nous