Bonjour,

J'ai parcouru le net à la recherche d'une solution mais celles proposées ne fonctionnent pas ou ne me renvoient pas exactement ce que je souhaite.

Voila mon probleme: j'ai réalisé une macro qui extrait les données de plusieurs classeurs fermés, et qui les range dans le classeur actuellement ouvert ("ActiWorkbook"). Tous ces classeurs ont le même format et normalement le même nom de feuille. J'aimerais néanmoins éviter les erreurs futures (si des versions américaines d'excel sont utilisées...) et pouvoir extraire le nom de la première feuille pour l'utiliser par la suite, et ce sans avoir à ouvrir les différents classeurs, étant donné qu'il y en a un certain nombre.

Voici le code utilisé pour extraire les données:

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
 
 
Function ExtraireValeur(ByVal Chemin As String, ByVal Feuille As String, ByVal Cellule As String)
 
'   Fonction permettant de récupérer des données d'une feuille excel sans l'ouvrir
 
Dim Argument As String
Dim Fichier As String
Dim Dossier As String
 
Fichier = Filename(Chemin)
Dossier = FilePath(Chemin)
    Fichier = Replace(Fichier, "'", "''")
    Argument = "'" & Dossier & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Address(, , xlR1C1)
    ExtraireValeur = ExecuteExcel4Macro(Argument)
 
End Function
Ma Variable "Feuille" étant pour l'instant toujours égale à "Feuil1".


J'ai tenté la solution proposée sur : http://silkyroad.developpez.com/VBA/...Fermes/#LIII-B
(Test sur le nom d'une feuille) sans succès.

La fonction Ocat.Tables(1).Name ne fonctionnant visiblement pas (je doit sans doute m'y prendre mal).

Si vous avez des idées?


Edit:

Le problème est résolu, l'initialisation de "Tables" est à 0 et non à 1

Voici donc mon code (inspiré en grande partie de :http://silkyroad.developpez.com/VBA/...Fermes/#LIII-B

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
 
 
Function VerifierExistenceFeuille(Fich As String) As String
 
    Dim Cn As ADODB.Connection
    Dim oCat As ADOX.Catalog
    Dim Fichier As String
    Dim Feuille As ADOX.Table
    Dim Nom As String
 
    Fichier = Fich
 
    Set Cn = New ADODB.Connection
    Set oCat = New ADOX.Catalog
 
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
            ";Extended Properties=Excel 8.0;"
 
    Set oCat.ActiveConnection = Cn
 
    On Error Resume Next
 
        Set Feuille = oCat.Tables(0)
 
 
    Nom = Feuille.Name
    VerifierExistenceFeuille = Replace(Nom, "$", "")
 
    Set Feuille = Nothing
    Set oCat = Nothing
    Cn.Close
    Set Cn = Nothing
 
End Function