1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
' METTRE un byRef a la fin pour tester
Public Function RechercheValeurPlagePart(ByVal valeurRecherchee As String, ByVal plageDeRecherche As Range) As Range
Dim cellulesTrouvees As Range, PremAdresse As String, CellulesFusionneesAdresses As String
' verifier si la plage recue en parametre n'est pas vide (auquel cas sortir)
If plageDeRecherche Is Nothing Then Exit Function
' on trouve la premiere cellule contenant la valeur
With plageDeRecherche
Set cellulesTrouvees = .Find(What:=valeurRecherchee, lookat:=xlPart, MatchCase:=False)
If Not cellulesTrouvees Is Nothing Then
PremAdresse = cellulesTrouvees.Address
Set RechercheValeurPlagePart = cellulesTrouvees
Do
'traitement du cas des cellules fusionnées : on ne les traite que lors du passage sur la premiere zone
If cellulesTrouvees.MergeCells Then
CellulesFusionneesAdresses = cellulesTrouvees.MergeArea.Address ' on mémorise la premiere adresse de la zone
'supprime la fusion
cellulesTrouvees.MergeCells = False
If cellulesTrouvees.Address = Split(CellulesFusionneesAdresses, ":")(0) Then ' premiere cellule de zone fusionnée identifiée
' puis-je factoriser ce bout de code ?
If cellulesTrouvees = valeurRecherchee Then
Set RechercheValeurPlagePart = Application.Union(RechercheValeurPlagePart, cellulesTrouvees)
End If
Set cellulesTrouvees = .FindNext(cellulesTrouvees)
' // fin puis-je factoriser ce bout de code ?
End If
'rétablissement de la fusion des cellules
Range(CellulesFusionneesAdresses).MergeCells = True
' puis-je factoriser ce bout de code ?
If cellulesTrouvees = valeurRecherchee Then
Set RechercheValeurPlagePart = Application.Union(RechercheValeurPlagePart, cellulesTrouvees)
End If
Set cellulesTrouvees = .FindNext(cellulesTrouvees)
' // fin puis-je factoriser ce bout de code ?
End If
Loop Until cellulesTrouvees.Address = PremAdresse
End If
End With
End Function |