Bonjour à tous,

Bon cette fois ci je vais essayé d'être clair car la dernière fois j'ai pas fait des merveilles (en plus l'intitulé est déjà obscure)

Bon j'ai un code assez standard qui fait une recherche sur une plage donnée et renvoie de l'info à chaque fois qu'il trouve quelque chose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
With InitDetail.Columns(ColDetail.Inv) 'plage de donnée pour la recherche
    Set DetailFoundRange = .Find(What:="Sandwich", LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        True, SearchFormat:=False)
    If Not DetailFoundRange Is Nothing Then
        DetailFirstAddress = DetailFoundRange.Address
        Do
            MsgBox "JambonBeurre" 'a chaque fois qu'on trouve, on renvoie jambonbeurre           
 
            Set DetailFoundRange = .FindNext(DetailFoundRange)
        Loop While Not DetailFoundRange Is Nothing And DetailFirstAddress <> DetailFoundRange.Address
    End If
End With
Un basique, qui marche très bien (je vous rassure je ne cherche pas à créer un programme qui renvoie JambonBeurre, je préfére clairement le saucisson ).
Le souci c'est que j'utilise ce bloc de recherche, assez volumineux, à plusieurs endroits et que j'aimerais donc l'enregistrer comme une routine dans un module que je puisse ensuite l'appeler :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'Dans mon Module Public :
Public Function FindInfo(LookRange As Range, LookWhat As Object, LocalEvent as Function)
 
With LookRange
    Set FoundRange = .Find(What:=LookWhat, LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        True, SearchFormat:=False)
    If Not FoundRange Is Nothing Then
        FirstAddress = FoundRange.Address
        Do
            LocalEvent
            Set FoundRange = .FindNext(FoundRange)
        Loop While Not FoundRange Is Nothing And FirstAddress <> FoundRange.Address
    End If
End With
End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 'Dans ma procédure :
Call FindInfo(InitDetail.Columns(ColDetail.Inv),"Sandwich",...)
où les "..." serait la définition de ma fonction LocalEvent (LocalEvent As Function n'existe pas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
LocalEvent=MsgBox "JambonBeurre"
En résumé, je n'arrive pas à interrompre une routine appelée pour dérouler une partie de code local

C'est clair ou pas ?