Bonjour,

J'ai un petit soucis, je travaille en effet sur une macro qui permettrait d'extraire des information de fichiers Excel fermés à une place précise. La requête m'a été fait par une personne qui devait recensé des informations à une case précise sur plusieurs fichiers similaire d'un même répertoire assez régulièrement.
Donc suite à des recherches, je me suis retourné vers ADODB que je ne vous cache pas, je maîtrise assez mal. On fournit à la fonction : adresse, nom de fichier, nom de feuille, cellule. Comme cela la fonction est plus flexible.

Je ne vous cache pas que la méthode est très bien documenter pour les anciennes versions de Excel mais que pour 2013 j'ai eu du mal à faire fonctionner le code. Voici le code adapté à ma situation.

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
50
Function extractionValeurCelluleClasseurFerme(Adresse As String, NomWb As String, FeuilleCible As String, CelluleCible As String)
    Dim Source As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim ADOCommand As ADODB.Command
    Dim Fichier As String, Cellule As String, Feuille As String
 
    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = CelluleCible & ":" & CelluleCible
      'Pour une plage de cellules, utilisez:
      'Cellule = "A4:C10"
 
    Feuille = FeuilleCible & "$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
 
    If Not Right(Adresse, 1) = "/" And Not Right(Adresse, 1) = "\" Then 'Cette partie du code permet d'ajouter le / ou \ si non mis par l'utilisateur à la fin de l'adresse
        If InStr(1, Adresse, "\", 1) = 0 Then
            Adresse = Adresse & "/"
        Else
            Adresse = Adresse & "\"
        End If
    End If
 
    Fichier = Adresse & NomWb
 
    Set Source = New ADODB.Connection
    With Source
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
        .Open
    End With
 
    Set ADOCommand = New ADODB.Command
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
    End With
 
    Set Rst = New ADODB.Recordset
    Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
 
    Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
    extractionValeurCelluleClasseurFerme = Rst.Fields(0).Value
 
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
End Function
La fonction fonctionne correctement et est assez rapide. Par contre, elle ne fonctionne que sur des fichiers situer sur des arborescences Disque dur/Serveur (\\f-renoutet\... par exemple chez moi) alors que sur un fichier situé sur un Doc Center j'ai le message #Valeur. Hors dans mon entreprise, mes collègues travaillent beaucoup sur des Workspace et des Doc Center. Et je voulais savoir s'il était possible tout bonnement d'adapter la requête pour qu'elle fonctionne sur des fichiers archivés en Doc Center?

Merci d'avance, et si cela n'existe pas, ce n'est pas grave c'était pour un soucis de flexibilité et faire profiter de la fonction à d'autres collègues qui aurait pu en avoir l'utilité.

Si vous avez besoin de commentaires supplémentaires sur le code ou autres informations, n'hésitez pas à me questionner.

Cordialement,

DeathZarakai.

P.S. : Merci à SilkyRoad pour son Tutoriel sur lequel je me suis aidé (lien)