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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| Sub Test2()
MsgBox Match_Line("Data 1", "Data 2", "Data 3", 2)
End Sub
' ==================================================================================
' ==== Match_Line Cette fonction permet de rechercher la 1ere ligne du tableau
' ==== ou se trouve les chaines V1 , V2 , V3 respectivement sur les colonnes 1 , 2 , 15
' ==== la recherche s'effectue a partir de la ligne Start_Line
' ==== particularite : la recursivite de la fonction jusqu'a trouver les 3 valeurs
' ==== la fonction considere la ligne 1 comme une ligne d'entete de colonne
' ==== donc Start_line doit etre >= 2 (Sinon ca plante ...... ;o)
' ==== La fonction renvoi 0 si pas trouvee
' ==================================================================================
Function Match_Line(V1 As String, V2 As String, V3 As String, Start_Line As Integer) As Integer
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
Match_Line = 0
' =======================================================
' A Partir de la Ligne "Start_Line" on cherche V1 sur la colonne 1
X = Match_Col(V1, 1, Start_Line)
If X = 0 Or X < Start_Line Then
Exit Function
End If
' =======================================================
' A Partir de la Ligne "X" on cherche V2 sur la colonne 2
Y = Match_Col(V2, 2, X)
If Y = 0 Then
Exit Function
End If
' =======================================================
' A Partir de la Ligne "Y" on cherche V3 sur la colonne 15
Z = Match_Col(V3, 15, Y)
If Z = 0 Then
Exit Function
End If
' =======================================================
' === La Ligne Matche Quand X = Y = Z
' =======================================================
If X = Y And Y = Z Then
Match_Line = X
Exit Function
End If
' =======================================================
' === Si X <= Y <= Z Alors on continue la recherche à partir de
' === la ligne "Z" en utilisant la recursivité de la fonction Match_Line
' =======================================================
If X <= Y And Y <= Z Then
A = Match_Line(V1, V2, V3, Z)
Match_Line = A
Exit Function
End If
End Function
' ==================================================================================
' ==== Cette fonction recherche la ligne ou se trouve la chaine VR dans la colonne VC
' ==== à partir de la ligne Start_Row
' ==== on renvoi 0 si pas trouvee
' ==================================================================================
Function Match_Col(VR As String, VC As Integer, Start_Row As Integer) As Integer
Dim C As Range
Dim S As Range
Match_Col = 0
Set C = ActiveSheet.Cells(Start_Row, VC)
Set S = C.EntireColumn.Find(VR, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, After:=C.Offset(-1, 0))
If Not S Is Nothing Then
Match_Col = S.Row
Exit Function
End If
End Function |
Partager