|
|
|
|
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 |
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. |
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. |
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...
|
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ésultats pour VBA EXCEL lire fichier sans l'ouvrir
Résultats pour VBA EXCEL lire fichier sans l'ouvrir
Résultats pour VBA EXCEL lire fichier sans l'ouvrir
Résultats pour VBA EXCEL lire fichier sans l'ouvrir
Résultats pour VBA EXCEL lire fichier sans l'ouvrir