IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Connection ODBC + export avec TransfertSpreadSheet (Access 2000)


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut Connection ODBC + export avec TransfertSpreadSheet (Access 2000)
    Bonjour à tous,

    J'ai déjà essayé de chercher une solution à mon problème un peu partout mais en vain.

    J'utilise une connexion ODBC vers une bdd oracle. Tout fonctionne bien avec ADODB.
    Mais j'aimerais que le résultat d'une requête de sélection exécutée sur cette base soit exporté vers Excel.
    Je vous rassure, j'ai réussi avec un recordset et écrire ligne par ligne les résultats dans un fichier, mais c'est juste un peu trop lourd et assez lent pour des grosses requêtes

    y-a-t'il un moyen de passer par la methode TransfertSpreadSheet? qui lui n'accepte que les requêtes ou tables des BDD Access apparemment.

    J'ai regardé CopyFromRecordset mais c'est limité sur une seule feuille aussi et je n'arrive pas à gérer cette méthode si le résultat de la requête ferait plus de 65k de lignes.

    Merci à tous.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Au lieu de passer par Access, n'as-tu pas essayé de passer par MSQuery d'Excel qui se connecte à une base Oracle sans problème (à condition d'avoir tous les identifiants).

    Dans la boite où je travaillais avant, ils procédaient souvent de cette manière.

    Philippe

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Merci pour la réponse mais je ne trouve que çà à propos de MS query sur le site et pas grand chose que je puisse exploiter sur google.

    y-a-t'il un moyen d'exploiter çà en VBA que je puisse tester svp (un ptit lien)?

    J'ai oublié de préciser ce que fais l'appli Access: il parcourt un dossier (inclus ses sous dossiers) et éxécute toutes les requêtes (.txt ou .sql) qui s'y trouvent avec quelques paramètres à modifier via VBA (rentrés dans un formulaire access).

    Le résultat de chaque requête est exporté vers un fichier Excel.

    Aussi, je n'ai aucun problème de connexion (avec les bons login et mdp) mais j'ai peut-être mal compris la solution que tu as proposé.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    salut,
    vu que la limitation à 65536 lignes dans Excel n'est pas "naturellement chuintable", avec des combinaisons successives pour ajouter une feuille dans le workbook, pourquoi ne pas faire d'export vers un .txt ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re

    Malheureusement, je n'ai plus d'exemple sous la main, car je ne fais plus parti de cette société.

    On se connectait à des vues par l'intermédiaire de MSQuery (comme le lien que tu as vu).

    Hors là, c'est différent dans ton cas, car tu interprètes des fichiers SQL.

    Je ne peux donc pas t'en dire plus, mais je sais que c'est possible.

    C'est vrai que MSQuery est peu documenté

    Philippe

  6. #6
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Encore merci pour vos réponses.

    jpcheck, les "besoins" veulent que les résultat soient en Excel donc j'y peux rien.

    sinon, serait-il possible de diviser/limiter les résultats d'une requête oracle?
    Genre les 65k premier (çà c'est possible avec LIMIT je crois), puis les 65k à 130k suivants (à partir de là je suis perdu), ...
    au moins çà sera un peu plus rapide avec la méthode CopyFromRecordset.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    Tu pourrais limiter l'export de deux manières :

    Tu utilises la méthode de jpcheck pour passer ton résultat dans un fichier Texte, et faire une boucle de lecture dans ce fichier pour que tes données soient réparties dans différentes feuilles.

    Tu peux également, mais là c'est une hypothèses c'est d'utiliser du PL/SQL qui te permet de faire des tests pour à chaque quantité de 65 000 tu passes des requêtes différentes, mais là c'est hors de mes connaissances.

    Philippe

  8. #8
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    ok,

    mais pour la première solution, çà reviendrai presque à faire ce que j'arrive déjà à faire: écrire ligne par ligne les résultats (inclut l'ajout d'une nouvelle feuille à chaque portion de 65k de ligne). Mais c'est juste super super lent

    La deuxième solution pourrait m'aider si j'arrive à la réaliser (diviser par tranche de 65k en utilisant des requêtes). Je vais faire un tour du coté du forum PL SQL pour voir si c'est possible.

  9. #9
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    C'est reglé, j'ai trouvé sur le chat une requête (+ sous-requête) qui utilise "rownum" et qui va me permettre de diviser les résultats par tranche: donc utiliser la methode CopyFromRecordset directement. J'espère juste que ce sera un peu moins lent.
    Merci à tous

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    pense à nous poster ta solution, ca pourra aider un grand nombre de personnes à mon avis
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut

    Je viens de le faire mais si je met tout en détail ici, çà va faire très lourd.
    Le principe: utiliser ce genre de requête pour diviser la grosse requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (select rownum as toto, table.* from table where test=true) where (toto>65350 and toto <=130700) /*toto à modifier à chaque fois*/
    Donc je lance çà autant de fois qu'il y a de part de 65k dans le résultat et j'utilise ensuite CopyFromRecordset pour chaque feuille créée.
    Et puis, de toute façon je n'ai pas encore codé ni testé çà sur l'appli en question elle même donc... mais çà fonctionne sur des simples test que j'ai fais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ODBC] odbc & php avec base access .mdb
    Par jeff67 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/07/2012, 22h33
  2. Export pdf sous ACCESS 2000
    Par _Drama dans le forum Access
    Réponses: 2
    Dernier message: 22/02/2010, 14h27
  3. [AC-2007] Fonction Export avec fichier access en format accdr
    Par amazon dans le forum Runtime
    Réponses: 8
    Dernier message: 15/01/2010, 16h19
  4. exportation XML via access 2000
    Par dpie dans le forum Access
    Réponses: 3
    Dernier message: 11/04/2007, 15h52
  5. Envoyer mail avec runtime access 2000
    Par Tierisa dans le forum Runtime
    Réponses: 7
    Dernier message: 07/11/2005, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo