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
Partager