Bonjour tout le monde


J'ai trouvé sur ce site une fonction dévellopé par Caféine qui me serait très utile : (XRECHERCHEV) (http://www.developpez.net/forums/d42...erme-variable/)


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
Public Function XRECHERCHEV(ByVal valRecherchee As Variant, _
                            ByVal TabMatrice As Variant, _
                            ByVal colonneIndex As Integer)
 
 
If TypeName(TabMatrice) = "Range" Then
    XRECHERCHEV = Application.WorksheetFunction.VLookup(valRecherchee, _
                                                        TabMatrice, _
                                                        colonneIndex, _
                                                        True)
Else
    Dim oDAO As Object
    Dim db As Object 'DAO.Database
    Dim rs As Object 'DAO.Recordset
    Dim sRange As String
    Dim sSheet As String
    Dim sWbook As String
    Dim sFPath As String
    Dim sSQL   As String
 
    sRange = Replace(Split(TabMatrice, "!")(1), "$", vbNullString)
    sSheet = Split(Split(TabMatrice, "]")(1), "'")(0)
    sWbook = Split(Split(TabMatrice, "[")(1), "]")(0)
    sFPath = Mid(Split(TabMatrice, "[")(0), 2)
 
    valRecherchee = "'" & Replace(valRecherchee, "'", "''") & "'"
 
    sSQL = "SELECT [F" & colonneIndex & "] " & _
           "FROM [" & sSheet & "$" & sRange & "] " & _
           "WHERE [F1] = " & valRecherchee
 
 
    Set oDAO = CreateObject("DAO.DBEngine.36")
    Set db = oDAO.Workspaces(0).OpenDatabase(sFPath & sWbook, False, False, "Excel 8.0;HDR=NO;")
    Set rs = db.OpenRecordset(sSQL)
 
    If rs.EOF And rs.BOF Then
        XRECHERCHEV = "no match"
    Else
        XRECHERCHEV = rs.Fields(0)
    End If
    Set oDAO = Nothing
    Set rs = Nothing
    Set db = Nothing
End If
 
End Function
Mais je n'arrive pas à la faire fonctionner (j'ai comme retour sur excel : #valeur!)...

mon fichier source est de la forme "BD-base données horaires_AAAA"
AAAA=année

je l'appel avec "=XRECHERCHEV(B$3;"'C:\Documents and Settings\remcar\Bureau\dimensionnement\[BD-base données horaires_"& ANNEE($A$1) &".xls]CC'!$A$2:$I$366";2)" --> #valeur!

(j'ai une base "BD-base données horaires" par an et je veux biensûr automtiser le remplissage d'un autre fichier selon l'année)

j'ai aussi essayé sans variable "=XRECHERCHEV(C$3;"'C:\Documents and Settings\remcar\Bureau\dimensionnement\[BD-base données horaires_2010.xls]CC!$A$2:$I$366";2)

ou encore avec "=XRECHERCHEV(C$3;"'C:\Documents and Settings\remcar\Bureau\dimensionnement\[BD-base données horaires_2010.xls]_CC!$A$2:$I$366";2)

mais ca ne marche pas non plus...

La recherchev simple marche :=RECHERCHEV(B$3;'C:\Documents and Settings\remcar\Bureau\dimensionnement\[BD-base données horaires_2010.xls]CC'!$A$2:$I$366;2;FAUX)


J'ai fait des tests avec des msgbox sur les sRange, sSheet, sWbook, sFPath, et le données semblent bonnes.

J'ai activé la réf "Microsft DAO 3.6 objects library"

Dois-je activer d'autres choses?

Si quelqu'un a une idée, je suis prenneur!

Si besoin d'informations complémentaires, faites le moi savoir.

merci d'avance!