Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Récupérer des données dans un fichier Excel avec ADO

nak

XLDnaute Occasionnel
Bonjour,

Je viens de récupérer une macro sur le très bon site de Frederic Sigonneau.
Celle-ci permet de récupérer l'ensemble des données d'un feuille Excel dans un classeur fermé. J'arrive à l'adapter pour mes besoins sauf que je viens de remarquer un "bug".
Lorsque j'ai une colonne avec plusieurs formats de cellule un des formats n'est pas récupéré.
Dans mon exemple en PJ la date n'est pas récupérée dans le fichier donnee.xls

Pouvez vous m'apporter votre aide SVP.

Merci

 

Pièces jointes

  • nako.zip
    18.1 KB · Affichages: 55

chris

XLDnaute Barbatruc
Re : Récupérer des données dans un fichier Excel avec ADO

Bonjour

Je n'ai pas testé mais de façon générale ADO se basant sur les principes des bases de données, les colonnes sont supposées de contenu homogène : si tu mélanges des dates avec des textes tu risque effectivement des problèmes.
 
G

Guest

Guest
Re : Récupérer des données dans un fichier Excel avec ADO

Bonjour

Hello Chris

Cris a raison, mais en changeant un peu la chaine de connexion, on peut forcer MSADO à lire toute les données des colonnes hétérogènes comme du texte. Après, comment excel va interpréter les chaines retournées, c'est un autre problème! Parfois il interprète bien les dates, suivant les configurations, parfois non à toi de faire les rectifications necessaires.


Code:
 szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & NomFichier & ";" & _
        "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"

Il retournera toutes les données y compris l'entête malgrè HDR=No, avec HDR=Yes il ne renvoit pas l'entête.

A+
 
Dernière modification par un modérateur:

tototiti2008

XLDnaute Barbatruc
Re : Récupérer des données dans un fichier Excel avec ADO

Bonjour nak, Bonjour Chris , Bonjour Hasco

Alors là, chapeau Monsieur Hasco, j'ignorais qu'on pouvait contourner cette limite
J'essaierais de retenir cette option "IMEX=1"
 

Theze

XLDnaute Occasionnel
Re : Récupérer des données dans un fichier Excel avec ADO

Bonjour,

Il y a plus facile pour récupérer des valeurs dans un classeur fermé. Il faut juste savoir quelle plage on veut récupérer. Un exemple (adapter le chemin du dossier et le nom du classeur, plage en A1:F17) :
Code:
Sub Recup()

    Dim Fichier As String
    Dim Chemin As String
    
    Chemin = "D:\Mon Dossier\"
    
    Fichier = "Classeur1.xls"
    
    
    'récupère les valeurs par formules
    Range("A1:F17").Formula = "='" & Chemin & "[" & Fichier & "]Feuil1'!A1:F17"
    
    'et ne garde que les valeurs
    Range("A1:F17").Value = Range("A1:F17").Value
    
End Sub

Hervé.
 
G

Guest

Guest
Re : Récupérer des données dans un fichier Excel avec ADO

Re,

Hello tototiti,

Oui, mais avec d'autres limites.
exemple dans une colonne source qui aurait des dates, des textes, des valeurs 'VRAI', 'FAUX'
les résultats peuvent être inattendus. VRAI par exemple est importé comme TEXTE et n'est plus numérique (1). Quant au dates, cela dépend plus du système et des langues régionnales.

A++
 

Jam

XLDnaute Accro
Re : Récupérer des données dans un fichier Excel avec ADO

Bonjour à tous,

Je m'étonne que vous vous étonniez sur le résultat et plus spécifiquement le format de la requête ?
En fait ce n'est pas si surprenant car bon nombre d'entre nous confondent base de données et tableau Excel. C'est pourtant bien différent. Une base de données est pour faire simple et comme le fait remarquer Chris, composées de tables ayant des champs de données ayant un format bien défini à l'origine (texte, numérique...) avant même d'y stocker une donnée quelconque. Un tableau Excel est composé de cellules ordonnées comme bon nous semble avec un contenu/format très hétérogène. Bref, tout le contraire d'une base de données.
Au final il faut donc savoir que le résultat renvoyé par la requête, et par conséquent le format appliqué aux données, est analysé par le moteur (il est quand même sympa le p'tit moteur de nous aider un petit peu ) sur la base du contenu des premiers enregistrements lus, puis appliqué à la totalité des autres enregistrements.
Au final, et si je puis dire, ne demandez pas à un boucher de vous faire de la pâtisserie, ce n'est tout simplement pas son métier.

Bonne journée à tous.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…