Bonjour.

J'ai un soucis lors du parcour d'un fichier Excel depuis VBA Access.

En effet j'utilise la fonction "Find" pour trouver une valeur dans mon fichier. Une fois cette valeur trouvée je récupère le contenut de la case à ça gauche. (Ex : je recherche "Test" contenut dans la case A3. Je veux la valeur de la case A2).

Tout fonctionne à merveille jusqu'au moment où je décide de définir un "range" ne commençant pas par la cellule "A1". A partir de ce moment il trouve bien les valeur mais me renvoie toujours une valeur "" pour le contenut de la cellule ...

Voici ma fonction :
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
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
Voici l'appel de la fonction qui fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
TAB_Titre = ValeurCaseGauche(.Range("A1:AA69"), "Titre", 1)
Voici l'appel de la fonction qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
TAB_Titre = ValeurCaseGauche(.Range("A2:AA69"), "Titre", 1)
J'avoue ne pas comprendre le pourquoi du comment ...
Si quelqu'un à une explication rationnel à me fournir ce serai vraiment très simpa!!!

Merci d'avance!!!