|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 11 ![]() |
Bonjour,
après quelques recherches infructueuses, je m'adresse à vous pour essayer de résoudre mon problème. Le contexte : J'ai une extraction périodique de données de production (N°de lot, type de produit, couleur, résultat du contrôle qualité, etc...) dans un fichier excel (une colonne par caractéristique). Je voudrais stocker ces résultats à chaque réception du fichier (tous les mois) dans une base access. J'ai donc créé ma base access avec différentes tables pour faire çà à peu près proprement. Le souci que j'ai c'est que je ne sais pas comment gérer l'import de mon fichier excel dans ma base de manière simple. Je prends l'exemple de ma table "Résultats contrôle" qui est liée à ma table "N° de lot" par une liaison 1-n. (Chaque résultat est lié à un lot, et un lot peut avoir plusieurs contrôles. Pour importer, je vais donc parcourir toutes les lignes de mon fichier excel (1 ligne par résultat de contrôle) et c'est là que je bloque... Comment poru chaque résultat : - tester si oui ou non le N° de lot existe déjà dans la base (par exemple si un contrôel d'un autre typa a déjà été effectué sur ce lot) - si ce lot existe, comment récupérer le N° associé dans la table poru faire ma correspondance - s'il n'existe pas, comment l'ajouter dans la table N° de lot, et ensuite faire ma correspondance? Voilà en substance mes soucis. je susi certain que cela doit se faire couramment, mais je ne connais pas trop le VB sosu Access. Merci par avance de votre aide, Taz |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Bonjour,
Alors j'ai déjà poster quelques discussions sur le sujet de l'import de données excel vers access, tu pourrais allé voir sur mon profil pour les trouver (j'imagine). Je vais tout de même répondre aux différentes questions que tu poses ici. J'utilise les plateformes ADO afin d'extraire chaque feuille de chaque fichier et cela par champs. Il faudrait savoir si tes fichiers excel ont la même structure que ta base de données? (c'est-à-dire, les champs correspondent tous aux colonnes des feuilles excel) Ensuite pour tester si oui ou non le numéro de lot existe dans la base j'utiliserais : Code :
If IsNull(DLookup("[NomduchampNumérodelot]", "Nomdelatable", "[Champnumérolot] = '" & Numérolotexcel & "' ")) Then... Tu mets à jour simplement ta table pour le numéro existant. Bon j'ai galéré à trouver le code que tu demandes mais si tu as besoin d'aide quelque part, tu peux me demander : http://www.developpez.net/forums/d10...eme-structure/ Ce n'est qu'un bout du code que j'utilise...regarde le déjà et on en reparle ^^
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 11 ![]() |
Merci de ta réponse.
En fait, la structure de mon fichier excel n'est pas la même que ma base de données. Sous excel, je n'ai qu'un fichier global avec quinzaine de colonnes. Je souhaite le transférer dans une BDD avec 5 ou 6 tables pour faciliter la maintenance et l'ajout d'informations au cours du temps. Je vais regarder dans la direction de ton code, il me semble que je vais déjà y trouver quelques billes. En attenadnat d'éventuelles d'autres idées, je me mets à creuser ton code |
|
|
00
|
|
|
#4 | ||
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Bon voilà un peu de code qui te permettra sans doute de faire tout ce que tu veux faire ^^. (tu n'es pas obligé de prendre ça, il doit exister d'autres solutions plus simples mais c'est celle que j'utilise en bon débutant de VBA Access ^^)
Change juste certaines choses par rapport à tes données, je t'ai annoté les trucs que tu pourrais ne pas connaitre. Attention avec les noms des champs, des tables et des feuilles excel, de préférence sans espace et sans accents avec des _ . Si tu ne peux vraiment pas les changer par faute de je ne sais quoi, il faudra mettre des cotes à certains endroits il me semble. Code :
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
||
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Quentin D.Étudiant Inscription : avril 2011 Messages : 175 ![]() |
Ok donc comme tu veux transférer tes infos dans différentes tables, tu devras faire une connexion à chaque table que tu veux compléter.
Et mettre les infos que tu sélectionnes de ta feuille excel dans les différentes tables du genre : Ce qui veut dire que tu mets dans ton champs numéro 0 de ta table ouverte oPS, la valeur de la colonne 6 (en partant de 0) de ta feuille excel, et cela à mettre dans ta boucle sur les lignes : Do While Not (oProdRS.EOF)... En fait le fonctionnement est simple, tu parcours une ligne, tu manipules les données pour les stocker dans les différentes tables et tu passes à la ligne suivante (oProdRs.Movenext) et tu refais la même manip qu'a la ligne précédente.
__________________
Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : décembre 2006 Messages : 11 ![]() |
Bonjour,
je me suis fortement inspiré de ton code et çà a l'air de fonctionner à peu près comme je le souhaitais, nickel. Merci beaucoup pour ton aide ![]() TAZ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com