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

Nouvelle énigme : Scanner un projet VBA

11 réponses
Avatar
MichDenis
Bonjour à tous,

Pour ceux et celles qui aiment résoudre un énigme ...

Quel est le code qui permettrait de scanner tout le code d'un projet VBA
à la recherche d'une chaîne de caractères
La procédure devrait être capable non seulement de trouver les chaines
de caractères mais de faire ce que fait la commande rechercher du menu édition:
A ) Trouver la première occurrence
B ) Ouvrir le module concerné
C ) Sélectionner le texte de la chaîne recherchée
D ) Et sur demande, aller à l'occurrence suivante ...

Pour les plus futés, il est interdit d'utiliser la commande "Rechercher" du menu
pour résoudre l'énigme : la commande est : -> c'est trop facile !!!
Application.VBE.CommandBars.FindControl(ID:=141).Execute

Mais bien de trouver le code qui fasse ce que cette commande fait.

Il n'y a pas d'urgence, j'ai déjà le code (le mien) mais cette question pourrait
bien stimuler quelques curieux qui désirent en savoir plus sur le modèle objet
VBA d'excel !

Bonne journée,

Salutations.

1 réponse

1 2
Avatar
MichDenis
Merci pour vos commentaires ! le but recherché était surtout exploratoire
du modèle objet Excel que pour l'utilité de la chose.


Salutations



"Misange" a écrit dans le message de news:

Super !
C'est à adopter quand on veut changer une référence dans tous les
modules. Ca fait rigolo de voir une barre d'outil supplémentaire dans
VBE et pas dans excel.
En tous cas ça fonctionne très bien avec 2007 aussi.
Merci du cadeau forumesque :-) et tant pis pour ceux qui se réveilleront
trop tard pour le récupérer :-)
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Un petit exemple : http://cjoint.com/?kfn1qLdgvP


"Modeste" a écrit dans le message de news:

Bonsour® MichDenis avec ferveur ;o))) vous nous disiez :

Quel est le code qui permettrait de scanner tout le code d'un projet
VBA
à la recherche d'une chaîne de caractères
La procédure devrait être capable non seulement de trouver les chaines
de caractères mais de faire ce que fait la commande rechercher du
menu édition: A ) Trouver la première occurrence
B ) Ouvrir le module concerné
C ) Sélectionner le texte de la chaîne recherchée
D ) Et sur demande, aller à l'occurrence suivante ...

cette question pourrait bien stimuler quelques curieux qui désirent en
savoir plus sur le modèle objet VBA d'excel !


je pense qu'une bonne base de départ serait de s'inspirer de la procédure
Calltree de Stéphen Bullen
et que de toute façon il est hors de question de triturer le VBA sans avoir
auparavent bien assimilé ce qu'a écrit Chip Pearson :
http://www.cpearson.com/excel/vbe.aspx
notament :
;o)))
First, you need to set an reference to the VBA Extensibililty library.
!!!!! ce que je n'arrive pas à faire :-(((
Searching For Text In A Module

The CodeModule object has a Find method that you can use to search for text
within the code module. The Find method accepts ByRef Long parameters. Upon
input, these parameters specify the range of lines and column to search. On
output, these values will point to the found text. To find the second and
subsequent occurence of the text, you need to set the parameters to refer to the
text following the found line and column. The Find method returns True or False
indicating whether the text was found. The code below will search all of the
code in Module1 and print a Debug message for each found occurrence. Note the
values set with the SL, SC, EL, and EC variables. The code loops until the Found
variable is False.

Sub SearchCodeModule()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim FindWhat As String
Dim SL As Long ' start line
Dim EL As Long ' end line
Dim SC As Long ' start column
Dim EC As Long ' end column
Dim Found As Boolean

Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents("Module1")
Set CodeMod = VBComp.CodeModule

FindWhat = "findthis"

With CodeMod
SL = 1
EL = .CountOfLines
SC = 1
EC = 255
Found = .Find(target:=FindWhat, StartLine:=SL, StartColumn:=SC, _
EndLine:=EL, EndColumn:ì, _
wholeword:=True, MatchCase:úlse, patternsearch:úlse)
Do Until Found = False
Debug.Print "Found at: Line: " & CStr(SL) & " Column: " &
CStr(SC)
EL = .CountOfLines
SC = EC + 1
EC = 255
Found = .Find(target:=FindWhat, StartLine:=SL, StartColumn:=SC,
_
EndLine:=EL, EndColumn:ì, _
wholeword:=True, MatchCase:úlse, patternsearch:úlse)
Loop
End With
End Sub



--
--
@+
;o)))






1 2