Bonjour à toutes et tous !
Tout d'abord, histoire de poser le contexte et d'être le plus précis possible, voici une version épurée et minimaliste du code qui me pose problème. J'ai testé celle-ci, avec les mêmes résultat que l'originale (dont les détails, du coup, sont inutile à résoudre l'énigme) :
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 Public Function Requete(ByVal FichierSource As String, _ ByVal FeuilleSource As String, _ Optional ByVal ImporterEntetes As Boolean) Dim adoConnexion As ADODB.connection Dim adoRst As ADODB.Recordset Dim strSql As String Set adoConnexion = New ADODB.connection With adoConnexion .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0" & _ ";Data Source=" & FichierSource & _ ";Extended Properties=""Excel 12.0" & _ ";HDR=" & IIf(ImporterEntetes, "No", "Yes") & ";""" .Open End With strSql = "SELECT TOP 1 * FROM [" & FeuilleSource & "$]" Set adoRst = adoConnexion.Execute(strSql) Requete = Transpose(adoRst.GetRows) End Function Private Function Transpose(Recordset As Variant) As Variant ' Libère du contexte Excel, et pallie les problèmes générés par WorkseetFunction.Transpose() sur les valeurs Null Dim I As Long, j As Long ReDim varTransposed(LBound(Recordset, 2) To UBound(Recordset, 2), LBound(Recordset, 1) To UBound(Recordset, 1)) For I = LBound(Recordset, 1) To UBound(Recordset, 1) For j = LBound(Recordset, 2) To UBound(Recordset, 2) varTransposed(j, I) = Recordset(I, j) Next Next Transpose = varTransposed End Function
Mon problème est que certains champs remontent à Null alors qu'ils ne le sont pas, notamment lorsque je n'importe que la ligne d'entêtes.
En creusant, il apparaît que ce sont les entêtes de champs dont la priorité Recordset.Fied.Type = adDouble, autrement dit tous les champs contenant des valeurs numériques.![]()
ça n'étonnera personne si je trouve ça gênant ?
Pour mieux comprendre, imaginons la source Excel suivante :
A B C D E 1 Référence Libellé Qté Transport PUHT 2 XW254G4 Tarte à la Rouille 3 Oui 12,3
La requête va renvoyer :
- Référence
- Libellé
- Null
- Transport
- Null
Je me dis que c'est peut-être un problème de fournisseur (Connexion.Provider), mais j'ai cherché des heures et je n'ai rien trouvé de ce côté (ce qui n'exclue pas que j'ai mal cherché). J'aimerais bien, au-delà de la résolution de ce souci, que quelqu'un qui connait les différents fournisseurs compatibles me rencarde (et par la même occasion la communauté) sur le sujet.
Afin d'éviter à chacun de s'investir dans des solutions hors de mes attentes, merci de noter que je connais Power Query et que je développe autant en M qu'en VBA, et que c'est donc une solution basée sur l'exécution d'une requête SQL (type ADODB) que recherche et non un contournement utilisant une autre méthode.
Donc pour résumer et être précis :Merci par avance à quiconque saura contribuer de manière constructive à ce message.Je voudrais récupérer dans une Variant() certaines données d'un classeur fermé sans passer par Power Query, si possible sur la base du code ci-dessus. La solution doit pouvoir fonctionner sous W10 x64, packs Office 2007 > 365
Partager