Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

VBA EXCEL lire fichier sans l'ouvrir

Kree, le jeudi 1 mai 2008 à 09:16:14
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
Répondre à Kree  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
michel_m, le jeudi 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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kree, le jeudi 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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
michel_m, le jeudi 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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kree, le jeudi 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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
michel_m, le jeudi 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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Kree, le jeudi 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

Résultats pour VBA EXCEL lire fichier sans l'ouvrir

VBA Excel - Ecrire dans fichier txt (Résolu) Bonjour à tous Je dois exécuter 2 macros en vba Excel, - une qui ouvre un fichier text et incrémente un tableau de variable, là pas de problème (voici le code épuré pour info) --------------------- Private Sub Command6_Click() On Error GoTo... www.commentcamarche.net/forum/affich-4854458-vba-excel-ecrire-dans-fichier-txt
[VBA Excel] activesheet.visible=false !HELP!! (Résolu) Bonjour, Je me dirige vers vous, car je crois que je viens de faire une belle boulette .... J'ai écrit un module en VBA Excel. Dans un module, j'enregistre dans un fichier "base e données" toutes les données que l'utilisateur vient... www.commentcamarche.net/forum/affich-4942514-vba-excel-activesheet-visible-false-help
[VBA Excel] Bouton Ouvrir (Résolu) J'ai créé un bouton "Ouvrir" dans une userform, dans cette même userform j'ai une textbox dans la laquelle le chemin du fichier à ouvrir est écrit (du style "P:\RDossier\monFichiers.pdf"). Les fichiers à ouvrir sont des .doc, .xls, .pdf,... www.commentcamarche.net/forum/affich-3267405-vba-excel-bouton-ouvrir

Résultats pour VBA EXCEL lire fichier sans l'ouvrir

Fichier utilisé - Le fichier est ouvert dans un autre programmeLorsque 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... www.commentcamarche.net/faq/sujet-10340-fichier-utilise-le-fichier-est-ouvert-dans-un-autre-programme
[Audio] Lecteur CD n'arrive plus à lire les CD audioSi votre lecteur de CD ou DVD n'arrive plus à lire vos supports : Ouvrir l'éditeur de la base de registre en cliquant sur Démarrer / Exécuter, puis en saisissant la commande suivante : regedit Rechercher et supprimer la clé suivante :... www.commentcamarche.net/faq/sujet-3826-audio-lecteur-cd-n-arrive-plus-a-lire-les-cd-audio

Résultats pour VBA EXCEL lire fichier sans l'ouvrir

Problème pour lire fichier de Open office org (Résolu)Bonjour, j'ai besoin d'envoyer un fichier (traitement de texte) par mail. Mais la personne à qui je dois l'envoyer n'arrive pas à lire (fichier odt) Avez vous des idées ? (à part faire copier coller : s merci www.commentcamarche.net/forum/affich-8545716-probleme-pour-lire-fichier-de-open-office-org
VBA excel formulaire de saisie - aide (Résolu)Bonjour, je suis débutant en VBA excel, et j'ai construis un formulaire de saisie (userform). Malheureusement je n'arrive pas à le finaliser... il me manque : a/ le numéro de transaction (TRANID) ne change pas lorsque j'appuie sur OK... www.commentcamarche.net/forum/affich-6740657-vba-excel-formulaire-de-saisie-aide
VBA excel insérer une ligne vide (Résolu)Bonjour, Je voudrais en vba excel insérer des lignes à chaque fois qu'une valeur d'une cellule change par rapport à celle du dessus. exemple : il faudrait que j'insére une ligne vide entre 15 et 20, entre 20 et 23, entre 23 et 26.... www.commentcamarche.net/forum/affich-4126535-vba-excel-inserer-une-ligne-vide

Résultats pour VBA EXCEL lire fichier sans l'ouvrir

Télécharger Avant DVD/DivX PlayerLe format DivX est le format de compression par excellence des fichiers DVDs. Il permet d'obtenir le tiers de la taille initiale du fichier vidéo DVD. Artisan DVD & DivX Player est un lecteur destiné au format DVD et DivX avec la technologie... www.commentcamarche.net/telecharger/telecharger-34056303-avant-dvd-divx-player

Résultats pour VBA EXCEL lire fichier sans l'ouvrir

Fichier CHMFormat 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. www.commentcamarche.net/contents/fichier/chm.php3