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

Macros et VBA Excel Discussion :

[ADO] Différents moyens de gérer plusieurs tables de plusieurs fichiers ?


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur réseaux / télécoms
    Inscrit en
    avril 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur réseaux / télécoms

    Informations forums :
    Inscription : avril 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [ADO] Différents moyens de gérer plusieurs tables de plusieurs fichiers ?
    Bonjour à tous,

    Assidu lecteur de vos articles et du forum de manière silencieuse depuis quelques années, aujourd'hui je vous demande un peu d'aide car je ne trouve pas ce que je souhaite sur le net.

    Voila, je suis dans une grosse boite, et tout le monde se sert d'Excel. On vient me voir pour de l'aide, et à chaque fois je me rend compte que les personnes ont des problématiques de base de données, qui seraient réglées en 2 secondes avec une requête SQL. Je n'ai pas les moyens de faire passer tout le département sur Access Et je me refuse de tout solutionner à coup de RECHERCHEV dans les cellules.

    Donc je cherche les différents moyens pour manipuler différentes tables, qui pourraient provenir de différents onglets - bien sûr - mais également de différents fichiers : et c'est là que je sèche.

    Je peux et je sais faire ouvrir plusieurs fichiers, soit avec le nom exact, soit en manipulant un Application.FileDialog(msoFileDialogFilePicker)
    Je peux et je sais (sûrement avec des grosses lacunes) manipuler quelques tables dans un fichier avec ADODB.Connection.

    Je connais le code, la logique objet, mais je suis très pauvre en VBA. Je connais très peu les classes, les ressources, ce qui est possible de faire.

    Solution 1, la plus sale selon moi :
    j'ouvre le fichier B --> Je copie l'onglet que je souhaite --> Je le colle dans le fichier A --> Je ferme le fichier B --> Je fais tout dans le fichier A --> Profit
    Inélégant mais ça marche

    Solution 2, je ne trouve pas comment faire : je déclare 2 sources ADODB.Connection de type "Excel 8.0" --> Je sais spécifier dans ma requête SQL quelle table vient de quel fichier (fichierA.feuil$ par exemple) --> Profit
    Je ne suis pas sûr qu'il existe une telle syntaxe... Sur le net je trouve comment gérer plusieurs csv (type "text") et ça me parait logique vu qu'il n'y a qu'un onglet. Mais plusieurs Excel 8.0 ?

    Solution 3, hypothèse alléchante : Je déclare une classe "table", peut être déjà existante, ou que j'écris --> Je charge chaque onglet as "table" de n'importe quel nombre de fichiers --> Je déclare ces objets "table" comme source pour ADODB --> je requête dessus --> Profit.
    C'est élégant, le code est réutilisable à l'infini, mais... ADODB est il fait pour ça ?

    Question bonus : J'apprécie la manière dont il détecte la plage de données n'importe où sur un onglet, mais si je déclare des objets "table", vais je devoir déclarer la plage de données "manuellement" ?

    Ou peut être n'ai je pas pensé la solution la plus propre ? Ou un mix subtil entre des notions de mes 3 solutions ? Qu'en pensez vous ?

    Exemple concret avec un cas d'école, qu'on parle la même langue ?
    fichier bdd1.xlsx
    --> onglet "Animal" : Colonnes "id", "race_id", "sexe", "date_naissance", "nom", "commentaires".
    --> onglet "Espece" : Colonnes "id", "nom_courant", "nom_latin", "description".
    fichier bdd2.xlsx
    --> onglet "Race" : Colonne "id", "nom", "espece_id", "description".

    Merci d'avance pour toute aide que vous pourriez m'accorder ou toute piste que je pourrais creuser. Disponible pour toute information plus précise et échange bien sûr

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 809
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 809
    Points : 51 206
    Points
    51 206
    Billets dans le blog
    94
    Par défaut
    Salut.

    Intéresse-toi à Power Query. j'ai écrit un billet là-dessus dans le cadre d'un "remplacement" de filtre avancé, mais Power Query est l'outil d'intégration de données par excellence pour Excel, qui permet notamment de fusionner des tables (=> recherchev amélioré => join du SQL) de les unir (rassembler plusieurs tables de même structure en une seule qui reprend tous les enregistrements => requête union du SQL), et plein d'autres choses encore...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur réseaux / télécoms
    Inscrit en
    avril 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur réseaux / télécoms

    Informations forums :
    Inscription : avril 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message

    Intéresse-toi à Power Query.
    Bonjour Pierre, et merci pour ta réponse,

    Je viens de passer un peu de temps à jouer avec PowerQuery. Il faut installer l'addon pour Excel 2010, ce qui peut me poser problème sur les postes utilisateurs (droits d'admin etc), mais pourquoi pas. Par contre, il ne me semble pas que les actions soient "macrotables", il nécessiterait donc que j'apprenne à tout le monde à faire une jointure avec, ce qui devient utopique. Mais peut être ai-je raté quelque chose.

    La jointure se fait par les interfaces, mais il n'est pas dur de le faire au travers de plusieurs fichiers, donc c'est pas mal du tout. Au final, j'ai ma jointure des 3 tables Animal/Espece/Race, mes colonnes, et désormais j'ai besoin de faire quelques travaux sur certaines colonnes. Par exemple, ajouter un jour à la date de naissance. Est ce que cette action peut être faite par Power Query ? Quelque part même directement en ligne de code "query" ? Ou bien faut-il le faire après avoir collé le résultat dans un onglet, par "Excel pur" ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2014, 21h46
  2. Réponses: 1
    Dernier message: 01/06/2010, 17h25
  3. Gérer plusieurs pages différentes simultanément
    Par Unreal Time dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2010, 09h44
  4. Réponses: 2
    Dernier message: 04/01/2010, 10h02
  5. comment gérer plusieurs locks sur une table?
    Par charluber dans le forum Oracle
    Réponses: 4
    Dernier message: 18/04/2006, 21h28

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