cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007
-
22 févr. 2007 à 12:54
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 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.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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" ?
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 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.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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.
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 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.