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
| Private Function ValeurCaseGauche(P_Range As Range, P_MotRecherche As String, P_NbCaseAGauche As Integer) As Variant
'on recherc le text passé par le paramêtre "P_MotRecherche" dans la zone de sélection défini par "P_Range"
'Si on le trouve on remonte de "P_NbCaseAGauche" sur la gauche et on renvoie la valeur
'Si c'est une cellule fusionné on renvoie la valeur contenut dans la case la plus en haut à gauche de la fusion
'dans tous les cas on renvoie le nombre de valeur trouvé à l'adresse (0,2) du tableau de résultats
'dans tous les cas on renvoie le nombre de valeur de case à gauche <> "" à l'adresse (0,1) du tableau de résultats
Dim RGE_C As Range 'Permet de faire la recherche
Dim STR_FA As String 'contient l'adresse du premier résultat de la recherche
Dim STR_Cel As String 'récupère le contenut d'une cellule renvoié par la recherche
Dim TAB_Res(0 To 50, 1 To 4) As Variant 'contient la liste des tous les résultats de la recherche
Dim INT_i As Integer 'Incrément
Dim INT_Nb As Integer 'contient le nombre de fois que la chaine de caractère recherché à été trouvée
'MsgBox P_Range.Address
With P_Range
'on recherche le mot passé en paramêtre
Set RGE_C = .Find(P_MotRecherche, LookIn:=xlValues, LookAt:=xlPart)
INT_i = 0
INT_Nb = 0
If (Not RGE_C Is Nothing) Then
'on stock la première adresse pour ne pas rechercher en boucle
STR_FA = RGE_C.Address
'on récupère une première fois la valeurs contenut "P_NbCaseAGauche" puis on boucle tant qu'on trouve la chaine recherché
Do
'on incrément le nombre de fois que la chaine de caractère a été trouvé
INT_Nb = INT_Nb + 1
'on récupère le contenut de la cellule, Si c'est une cellule fusionné on récupère la valeur de la cellule la plus à gauche
STR_Cel = .Cells(RGE_C.Row, RGE_C.Column - P_NbCaseAGauche).MergeArea.Cells(1, 1).Value
If ((Not IsNull(STR_Cel)) And (STR_Cel <> "")) Then
INT_i = INT_i + 1
TAB_Res(INT_i, 1) = STR_Cel
TAB_Res(INT_i, 2) = RGE_C.Address
TAB_Res(INT_i, 3) = RGE_C.Row
TAB_Res(INT_i, 4) = RGE_C.Column
End If
Set RGE_C = .FindNext(RGE_C)
Loop While ((Not RGE_C Is Nothing) And (RGE_C.Address <> STR_FA))
End If
End With
'l'adresse du tableau (0.1) permet de stocker le nombre d'éléments actif dans le tableau
TAB_Res(0, 1) = INT_i
'l'adresse du tableau (0.2) permet de stocker le nombre de fois qu'a été trouvé la chaine de caractère
TAB_Res(0, 2) = INT_Nb
'on retourne le résultat
ValeurCaseGauche = TAB_Res
End Function |
Partager