Rechercher : dans
Par :

VBA EXCEL lire fichier sans l'ouvrir

Dernière réponse le 1 mai 2008 à 12:51:06 Kree, le 1 mai 2008 à 09:16:14 
 Signaler ce message aux modérateurs

Bonjour,

Je recherche de l'aide pour lire les données d'un fichier sans l'ouvrir et importer ces données sous Excel. Monfichier Excel (Appelons XL) contient indirectement le nom du fichier où se trouvent mes données (Appelons le DN) via différentes colonne (disons que DN= Range ("A1") & "_a_" & Range("A2") ,avec un chemin toujours identique type v:\..\DN).

Le problème est que DN n'est pas un .xls. En demandant l'ouverture par Excel, je récupère les données que je souhaite travailler toujours dans la même colonne. Je voudrais donc savoir si il est possible d'effectuer une macro qui me permette de lire DN comme un document Excel mais sans l'ouvrir.
NB: DN est un .dbf

Cela me permettrait d'inclure une formule de type ="sumprod(subsitute('v:\..\[DN]feuil1'!$B2:$B1065,""."","","")*1)" et d'obtenir instantanément la somme dans XL sans avoir à ouvrir/fermer DN dans un nouveau doc Excel.

Novice en VBA, je demande votre aide, au moins savoir si c'est possible. Je me demandais également s'il était possible de récupérer directement l'emplacement des données sous dbf et transposer les "." en "," pour obtenir des nombres utilisables sous Excel (j'ai tenté de changer mon séparateur de décimale sous Excel, mais ça ne résout pas ce problème), si possible en ayant directement la somme de ces données de type "123.456".

J'espère avoir été assez clair et obtenir au moins quelques pistes. Désolé de vous faire travailler en ce 1er mai...
Merci

Meilleures réponses pour « VBA EXCEL lire fichier sans l'ouvrir » dans :
Fichier utilisé - Le fichier est ouvert dans un autre programme VoirLorsque vous souhaitez supprimer ou déplacer un fichier, Windows se plaint avec le message suivant : Fichier utilisé Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme Fermez l'application concernée Avant...
[Windows/Corbeille] Supprimer un fichier sans confirmation VoirVous en avez assez de vider continuellement votre corbeille ? Il est possible de supprimer les fichiers sans passer par la corbeille de deux façons différentes : Méthode manuelle Méthode automatique Méthode manuelle Pour ne plus avoir à...
Fichier CHM VoirFormat CHM Les fichiers avec l'extension .CHM sont des fichiers d'aide de Windows. Il suffit de double-cliquer sur le fichier pour ouvrir l'aide associée.

1

michel_m, le 1 mai 2008 à 09:40:41

Bonjour,

un exemple qui insère dans ton classeur les données d'un champ d'une base DBF en utilisant la technologie ADO
en gras éléments à personnaliser

Sub importer_champDBF()
'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library (dans VBE outils-référence)
Dim source As ADODB.Connection
Dim Requete As ADODB.Recordset
Dim Chemin As String, fichier As String, texte_SQL As String

Chemin = "F:\emplacement de tabase"
'Chemin = ThisWorkbook.Path si ta base est dans le m^répertoire
fichier = "tabase.dbf"

Set source = New ADODB.Connection
source.Open _
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
Chemin & ";"

texte_SQL = "SELECT tonchamp FROM " & fichier & ";" 'si tu importe tout met * au lieu de tonchamp

Set Requete = New Recordset
Requete.Open texte_SQL, source, adOpenKeyset, adLockOptimistic

If Requete.EOF Then
MsgBox "Table vide..."
Exit Sub
End If

Application.ScreenUpdating = False
Range("B2").CopyFromRecordset Requete

Requete.Close
source.Close

End Sub


d'après MichelXLD sur www.excel-downloads.com

Michel

Répondre à michel_m

2

Kree, le 1 mai 2008 à 10:11:20

Bonjour Michel,

Waooh, je ne comprends pas tout au code et n'ai pas les moyens de le tester aujourd'hui, mais ça a l'air suffisament complexe pour que ça marche...
Et moi qui cherchais un code simple, je pouvais y rester ancore des lunes avant d'avoir une ébauche de la solution.
Si je comprends bien, j'importe toute ma base ou plutôt toute la plage que je désire mais ne peux y faire une opération.
Et si je comprends toujours bien, Source s'ouvre aussi mais là je ne suis pas sûr de bien comprendre parcequ'il serait plus simple de l'ouvrir en tant que fichier Excel, non?
En tout cas, merci beaucoup pour l'aide, je vais tester le code le plus vite possible pour voir vraiment ce que ça donne et tenter de comprendre un peu mieux le fonctionnement de la chose.

Répondre à Kree

3

michel_m, le 1 mai 2008 à 10:30:31

Re,

bin.. si la source est un dbf, ce n'est pas un xls

tu te connectes à Source mais tu ne l'ouvres pas car c'est un fichier séquentiel indexé; SQL te permet d'avoir des données-sources très rapidement (voir exemple fichier secu ou ta banque)

tu peux faire des calculs (opérations ?) avec la syntaxe SQL

par exemple
SELECT [nbre]*[px_unit] AS total FROM....

crée un champ "total" en multipliant les valeurs des champs nombre et prix unitaire...

si tu veux filtrer sur une variable tu ajoutes WHERE nom="toto"

Je te concèdes que ce n'est pas forcément évident et qu'à chaque fois, j'y pique pas mal de prises de tête avec chorales occitanes.

Répondre à michel_m

4

Kree, le 1 mai 2008 à 10:52:29

Oula, ça commence vraiment à sortir de ma compréhension tout cela, à la base je voulais juste me simplifier un peu la vie, mais le problème étant lancé, je crois que le résoudre va la compliquer...
OK (ou à peu près) pour les calculs sous SQL et d'accord (je te crois sur parole) pour la rapidité SQL.
J'ouvrais mon dbf de la façon suivante:

Dim AppXL As Excel.application
Dim ClassR As Excel.workbook
Dim Feuye As Excel.worksheet
Set AppXL = createObject("Excel.application")
Dim a As string
a= Range ("A1") & "_a_" & Range("A2") 'Nom de mon fichier
Dim b As string
b = "v:\..\" & a
Workbook.opentext filename: = b

Et mon dbf apparaissait sous forme classeur Excel dans lequel je pouvais tranquillement jouer avec mes cellules avant de le refermer.
Le souci résidait surtout dans le temps que cela prenait d'ouvrir et fermer un doc excel pour chaque référence de fichier dbf.
En conclusion, si je veux gagner en vitesse, je dois apprendre le SQL en plus du VBA...

Répondre à Kree

5

michel_m, le 1 mai 2008 à 11:52:09

Re,

Oui, mais si tu dis commencer en VBA, utilises ce que tu sais et ce que tu comprends en découvrant de nouvelles techniques; tu sais maintenant que c'est possible de lire ou d'écrire dans un fichier fermé, tu arriveras 1 de 4 à aborder ces notions... On utilise ADO-SQL pour des fichiers volumineux ou pour consolider N données de P fichiers dans un récapitulatif.

Pour moi, c'est pas venu tout de suite et encore maintenant, j'hésite et me plante souvent (9/10)

Cordialement

Michel

Répondre à michel_m

6

 Kree, le 1 mai 2008 à 12:51:06

Re,

Ce que je sais c'est que j'ai encore beaucoup à comprendre et que le plus sûr moyen d'avancer c'est d'y aller pas à pas.

Ce que je crois comprendre: quand je demande à ouvrir mon fichier par la commande workbook.opentext filename:=b je crée ledit classeur en l'ouvrant cela sous entend que d'une part je crée le classeur b (ou plutôt "a" dans mon exemple) et d'autre part, je l'ouvre, le tout en une seule commande.
Ce que je ne comprends pas c'est que je ne puisse pas simplement le créer et m'y référer (il doit sûrement y avoir une technique à découvrir). Car, une fois créé, je devrais pouvoir accéder à son contenu et faire mes calculs sans avoir à l'ouvrir (ce que je sais faire avec un.xls classique tant que le chemin est connu). Ca, c'est ce que je commence à comprendre comme illusoire.
- Où bug mon raisonnement? - Vraisemblablement dans mes préceptes VBA et le potentiel d'ADO-SQL (pour le moment très obscur) pour ce que je cherche à faire.

En tout cas, un grand merci pour la piste SQL que je vais tester et pour le reste.

Répondre à Kree