Import Excel et tables multiples

Résolu/Fermé
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021 - Modifié le 3 mai 2021 à 17:20
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 1 juin 2021 à 10:59
Bonjour à tous,
Je bloque sur un problème et ne sait pas comment le retourner :(
J'ai une base de données avec plusieurs tables : STRUCTURES, CONTACT, RDV

Pour simplifier, une structure peut contenir plusieurs contacts, qui peuvent avoir plusieurs date de rdv de posées... les relations entre les tables se font donc sur les clé primaires des structures et des clients. Jusque là, rien de bien méchant, et je gère.

Je sais importer de nouvelles structures sans problème, mais par contre j'ai un énorme souci pour l'import suivant :

Un fichier Excel sont les colonnes sont :
nom_struct, adresse_struct, cp_struct, nom_contact, tel_contact, date_rdv

Donc si une structure à 2 contacts, il y aura donc 2 lignes avec les mêmes infos dans les 3 premières colonnes, et des infos de contact différents... idem pour les RDV...

J'ai fait un import de ce fichier dans une table TEMP, et souhaitais, par requêtes distribuer les données dans mes différentes tables... mais comment puis-je gérer les clés étrangères dans mes bases CONTACTS et RDV ?
puisque pour savoir à quelle structure un contact appartient, je dois d'abord créer l'enregistrement dans la base STRUCTURE, et c'est la clé primaire de cet enregistrement que je dois utiliser dans un des champs de ma table CONTACT ?

Je sèche... :(

Auriez-vous des pistes, des idées ?

Merci à vous.
A voir également:

7 réponses

Skratus Messages postés 12 Date d'inscription mercredi 28 avril 2021 Statut Membre Dernière intervention 4 mai 2021
3 mai 2021 à 18:09
Bonjour,

a mon avis, il va falloir que tu utilise un peu le VBA pour:
1 - Lire le fichier CSV
2 - Vérifier si la structure existe, et la créer avec les infos du csv si ce n'est pas le cas
3 - importer les données du csv dans les bonnes tables

Il y a peut être une façon plus simple, mais je ne la connais pas...

A+
0
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
4 mai 2021 à 07:26
Merci pour le retour Skratus ;)

Je pensais bien devoir en passer par là, cela ne me dérange pas trop, mais je ne sais pas comment créer un enregistrement dans une table et récupérer la clé primaire de cet enregistrement créé...

Je vais essayer de regarder de ce côté là.
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
4 mai 2021 à 13:22
bonjour,
ceci montre comment créer un enregistrement et en récupérer la clé primaire: https://docs.microsoft.com/fr-ca/office/client-developer/access/desktop-database-reference/recordset-lastmodified-property-dao

rs.AddNew 
rs!FirstName = "Roger" 
rs!LastName = "Harui" 
rs.Update 
     ' Move current record pointer to the most recently 
     ' changed or added record. 
rs.Bookmark = rs.LastModified
nouvellecleprimaire = rs!id
0
Skratus Messages postés 12 Date d'inscription mercredi 28 avril 2021 Statut Membre Dernière intervention 4 mai 2021
4 mai 2021 à 10:17
Bonjour Kref01,

Voici un lien de téléchargement sur une base access faite rapidement.
https://www.cjoint.com/c/KEeinqTvPui

Jette un oeil du coté du VBA pour voir comment lire un csv (séparateur ;) et insérer les données dans une table. Mon fichier CSV ne se limitait qu'a deux colonnes, que l'on récupère avec le tableau tblign(0) (dans mon csv, ca correspond au nom de la strcuture) et tblign(1) (correspond à l'adresse de la structure)
je compare les données du fichier avec ce qu'il y a dans la table structure grace à la fonction Dlookup (colonne à chercher,nomde la table, filtre à appliquer)

Bon courage
0
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
20 mai 2021 à 15:30
Désolé pour mon retour tardif... couché/malade :(

En fait maintenant, je fais mes imports sans problème (merci Skratus et yg_be).

Le problème se pose sur mes exports que je fait directement par un :

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "R_Synchro_STRUCTURES", "X:\TOTAL_" & Me.fiche_qui & ".xls", True


par contre, j'aimerais récupérer les données, dans un seul fichier de mes 3 tables : STRUCTURES/CONTACTS/RDV

sachant que CONTACTS est lié à STRUCTURES par la clé primaire de STRUCTURES, et que RDV est liée à CONTACTS par la clé primaire de CONTACTS

Chaque fiche STRUCTURE est associé à un employé (donc implicitement, les contacts et les rdv aussi).

Pour faire ma requête, je suis passé par la création de requête sur Access, et j'ai sélectionné les champs qui m’intéressent, et posé un critère dans nom_agent=Me.Fiche_qui

Par un choix d'employé dans une liste déroulante (Me.fiche_qui) , si je lance ma requête pour récupérer les STRUCTURES et les CONTACTS, cela marche nickel, mais si je demande en plus les RDV associés... je ne récupère rien... :(

Une idée de "comment faire" ?
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
20 mai 2021 à 15:56
le point de départ serait de nous montrer la source SQL des deux requêtes.
ainsi que la liste des champs de tes tables, surtout les champs qui servent à lier les tables.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
20 mai 2021 à 17:33
Les 3 tables : STRUCTURES / CONTACTS / RDV
STRUCTURES
-structure_num*
-structure_nom
-agent_nom
-structure_adresse
-structure_cp
-structure_ville

CONTACTS
-contact_num*
-structure_nom => lié à structure_num de la tables STRUCTURES
-contact_nom
-contact_prenom
-contact_mail
-contact_tel_fixe

RDV
-rdv_num*
-contacts_nom => lié à contact_num de la table CONTACTS
-rdv_date
-rdv_commentaire

J'ai un formulaire avec une liste déroulante de nom de personne : fiche_qui et je veux extraire toutes les infos sur les structures, les contacts et rdv associés pour lesquels agent_nom = fiche_qui

mon code SQL est celui là (généré automatiquement par la création de requête) :

SELECT AGENT.agent_num, STRUCTURES.structure_nom, STRUCTURES.agent_nom, STRUCTURES.structure_adresse, STRUCTURES.structure_cp, STRUCTURES.structure_ville, CONTACTS.contact_nom, CONTACTS.contact_prenom, CONTACTS.contact_mail, CONTACTS.contact_tel_fixe, RDV.rdv_date, RDV.rdv_commentaire
FROM (AGENT INNER JOIN STRUCTURES ON AGENT.agent_num = STRUCTURES.agent_nom) INNER JOIN (CONTACTS INNER JOIN RDV ON CONTACTS.contact_num = RDV.contacts_nom) ON STRUCTURES.structure_num = CONTACTS.structures_nom
WHERE (((AGENT.agent_num)=[Formulaires]![F_Synchro]![fiche_qui]));


Qui ne me retourne aucune info :(

Mais si je fais cette requête en supprimant les RDV, cela fonctionne très bien.

J'ai besoin de cet export total :(
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
20 mai 2021 à 22:10
je ne vois pas la source SQL de la requête qui fonctionne (sans les RDV).
0
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021 > yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
Modifié le 21 mai 2021 à 08:04
Oupsss désolé je pensais l'avoir mise.
Voila la requete qui me retourne bien une liste de structures et les contacts associés :

SELECT AGENT.agent_num, STRUCTURES.structure_nom, STRUCTURES.agent_nom, STRUCTURES.structure_adresse, STRUCTURES.structure_cp, STRUCTURES.structure_ville, CONTACTS.contact_nom, CONTACTS.contact_prenom, CONTACTS.contact_mail, CONTACTS.contact_tel_fixe, CONTACTS.contact_tel_portable
FROM (AGENT INNER JOIN STRUCTURES ON AGENT.agent_num = STRUCTURES.agent_nom) INNER JOIN CONTACTS ON STRUCTURES.structure_num = CONTACTS.structures_nom
WHERE (((AGENT.agent_num)=[Formulaires]![F_Synchro]![fiche_qui]));


comme pour l'autre requête, elle est construite "graphiquement" dans Access. La différence, c'est que je ne fais pas apparaitre la table des RDV... mais je sèche (ce qui n'est pas évident avec le temps dehors aujourd'hui... :D)
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 mai 2021 à 10:58
tu écris que tu as trois tables, j'en vois quatre.
0
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
21 mai 2021 à 09:58
dans mes tests je suis allé plus loin...

En fait, ce qui pose souci avec ma requête, c'est qu'en fait, je ne récupère les Structures que si il y a un Contact, et idem pour les RDV.... c'est pour cela que tout est vide :(

Du coup, dans ma requête, je ne sais pas du tout comment lui dire de remonter les structures MEME SI il n'y a pas de contact, et donc pas de RDV...

Le problème ne se situait donc pas réellement ou je pensais :(
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 mai 2021 à 10:52
J'espérais qu'il s'agissait de cela, c'est le plus facile à comprendre.
Tu as probablement utilisé un outil graphique pour spécifier les relations entre tes tables (avec des lignes reliant les tables).
Dans cet outil, en cliquant "à droite" sur une jointure (ligne), tu peux gérer les propriétés de cette jointure. Cela devrait faire apparaitre les options dont tu as besoin.
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
21 mai 2021 à 10:57
cela devrait remplacer les "inner join" de tes requêtes par des "left join" ou des "right join".
0
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021 > yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
21 mai 2021 à 11:38
oui, j'ai bien utilisé l'outil graphique, et toutes mes relations sont de type "1 à plusieurs"

Une structure peut avoir plusieurs contacts
1 contact peut avoir plusieurs RDV

donc je pense que de ce côté là, c'est ok, mes relations sont bien mises en place.

Je pense que mon problème vient vraiment de ma requete SQL car je demande à sortir les infos d'une structure, d'un contact, et de rdv... mais si il n'y a pas de rdv créé pour ce contact... il zappe l'info :(
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
21 mai 2021 à 11:58
le problème est, bien sûr, dans la requête SQL. comme tu ne l'écris pas toi-même, Access utilise les informations des relations pour la créer.
et tu dois donc adapter ces informations, comme expliqué ici: https://support.microsoft.com/fr-fr/office/joindre-des-tables-et-des-requ%C3%AAtes-3f5838bd-24a0-4832-9bc1-07061a1478f6

il ne s'agit pas du type de relation, il s'agit du type de jointure.
suivant la version d'Access, il faut peut-être cliquer un bouton "type de jointure" pour visualiser ces options.
0
Bonjour,
J'ai lu très vite ta question et les réponses qu'on t'a données. Si j'ai compris ton problème est très classique; il s'agit d'aller de 1 à plusieurs, mais dans les 2 sens, de la structure vers les RV, et inversement. Si c'est bien cela la question, la réponse est assez simple, il te faut une table relai entre les deux tables, qui te donne dans un sens de 1 à plusieurs, et aussi dans l'autre.
Réfléchis, c'est la même chose que la gestion d'un hôtel. Dans une chambre il passe plusieurs clients, mais si un client vient plusieurs fois il ne sera pas toujours dans la même chambre. La solution est alors d'avoir cette table relai (Séjours?) qui permet d'appeler soit la chambre soit le client, et d'obtenir qui est passé dans la chambre, et quelle chambre a eu tel ou tel client.
En espérant avoir aidé à résoudre ta question
Cordialement
0
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
27 mai 2021 à 13:37
Merci pour ton retour Tessel75, mais je pense que mes relations entre tables sont bien OK. Il ne peut s'agir de plusieurs à plusieurs dans les deux sens :(

J'ai bien un contact qui ne peut faire partie que d'une structure, mais une structure peut avoir plusieurs employés (=contacts).

J'avoue que je me penche sur les problèmes de jointure évoqués par yg_be... mais j'ai plus l'impression de me perdre qu'autre chose :(
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
27 mai 2021 à 14:19
quelle version de Access? ne vois-tu pas le type de jointure, comme expliqué dans la page dont j'ai donné le lien?
0
Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021 > yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
1 juin 2021 à 07:34
beaucoup de boulot en ce moment, je n'ai pu m'y remettre qu'hier... effectivement, il s'agissait bien du type de jointure... mais bon, j'ai du me taper pas mal de lecture pour m'y retrouver :)

Merci beaucoup à vous pour toute l'aide apportée sur mon problème
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Kref01 Messages postés 10 Date d'inscription lundi 3 mai 2021 Statut Membre Dernière intervention 1 juin 2021
1 juin 2021 à 10:59
cela prend du temps de se former, et cela en fait gagner ensuite.
0