[ACCESS] Comparaison de deux tables

Résolu/Fermé
Signaler
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
-
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
-
Bonjour tout les ccmistes et les gens de passage.
J'aurais besoin de savoir si il existe un moyen non barbare de préférence, pour comparer le contenu de deux tables de même structures. Sachant que :
- ces tables n'ont pas de clef (import pur et dur de fichiers excels)
- elles contiennent beaucoup de lignes (environ 2400)
- la comparaison doit se faire sur 4 champs au moins

J'ai bien un algo en tête, enfin un début qui va se préciser cet ap midi, mais le problème, c'est que mon appli est déjà une belle usine a gaz, rien que pour traiter un fichier excel depuis access sa commence a faire du gros code pas beau, mais sa fonctionne.
Je précise enfin que je suis sous Access 97 (pas le choix), que je ne peut pas faire évoluer cette version (pas le choix j'ai dit ^^), et que mes recherches sur le net ne me conduisent qu'à des résultats partiels, voire même hors sujet.
J'ai pas retrouvé le système de recherche dans les posts ici, et je suis désolé d'avance si j'ai doublonné ...

Mes premières pistes: faire un genre de SELECT ... EXCEPT, mais a pas voulu access, reconnait pas!! :/
Faire une fusion des deux tables, en omettant les doublons: beuh ouaip sa peut lfaire mais a part un INSERT TO en chaine , je vois pas (pi un insert to sur 2400 lignes, j'en ai pas terminé)



Merci de votre aide (la plus rapide sera la meilleure, je fini lundi prochain, après sa ne me sera plus utile certes, mais sa pourra toujours aider).

8 réponses

Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
163
bah je te remercie pour ta solution, mais sa sera pas complet en fait: ce n'est pas ta solution qui est incomplete, mais les données du problèmes: il se peut qu'il manque des lignes d'un coté comme de l'autre, ou bien qu'il y aie des modifications d'un coté ou de l'autre. Donc j'ai décidé de regler le probleme de cette manière: deux requetes entre les tables, qui ont comme clef primaire l'ensemble de leurs champs. Chaque requete fait une jointure dans chaque sens, et n'affiche que les lignes différentes. Comme sa, sa indique les changements dans une table, et dans l'autre. Cela résout en partie le problème, et de toute manière, faire mieux reviendrais a faire une usine a gaz pour pas grand chose.
Merci encore pour ta piste, cela peut etre utile dans le cas ou il n'y a des changements que dans une seule table.
6
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
163
Cette solution m'intéresse au plus haut point, seulement je ne comprend pas toute la démarche a faire:
Pour l'importation, je doit me farcir du vba, et j'utilise un DoCmd.TransferSpreadsheet pour importer mes fichiers excels dans deux tables (1 par fichier).
Sachant qu'il se peut que plusieurs fichiers se retrouvent dans une seule table : en effet, d'un coté ya des données brutes qui représentent 80 000 lignes, et suite a un traitement y en a plus que 2400. Donc vu que les 80 000 passent pas dans un seul tableau, il risque d'y avoir plusieurs fichiers: qu'à cela ne tienne, je commencerais par récupérer ces données la.
Une fois que j'ai ma première table, l'idée serait donc selon toi, de rajouter le deuxième fichier à la suite, en le modifiant légèrement pour qu'access vire les doublons par lui même? ou alors de l'ajouter dans une autre table et ensuite de tenter de copier cette table dans l'autre?
3
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
163
Je peut pas, et ce pour deux raison:
- pas accès au wizard => fodrait réinstaller access, pis je n'ai pas les droits
- mon appli doit automatiser ce genre de choses: en gros, l'utilisateur doit indiquer a l'extreme limite le chemin des deux fichiers ou plus, et cliquer sur un bouton. Après sa doit sortir le résultat de la comparaison.
Moi j'en suis a faire la comparaison: donc a plus qu'à.
Je viens de mijoter une belle requete SQL mais elle ne fonctionne pas. Sa vous donnera d'ailleurs une idée des tables tiens
SELECT BDDHyper.Matricule, BDDHyper.Début, BDDHyper.Fin, BDDHyper.Evénnement, BDDHyper.Durée
FROM BDDHyper
WHERE BDDHyper.Matricule, BDDHyper.Début, BDDHyper.Fin, BDDHyper.Evénnement, BDDHyper.Durée NOT IN (SELECT [Copy Of BDDHyper].Matricule, [Copy Of BDDHyper].Début, [Copy Of BDDHyper].Fin, [Copy Of BDDHyper].Evénnement, [Copy Of BDDHyper].Durée FROM [Copy Of BDDHyper]);

Il me sort une belle n'erreur à la virgule qui se trouve après le WHERE BDDHyper.Matricule,
Normal, je tente une chose quasi impossible, surtout que ma table ne peut pas contenir de clef primaire (chaque champ contient au moins un doublon). En fait, l'ensemble des champs forment la clef primaire....
Sa me donne une idée....
2
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
163
Bon bah j'ai presque réussi: j'ai défini tout mes champs comme étant des clefs primaires dans les deux tables, et fait une requete avec une jointure, comme sa il me sort parfois des lignes a moitié remplies: ce sont ces lignes qui sont différentes
Reste plus qu'à traiter cela en pouvant ressortir l'oublis ou l'erreur....a va pas etre de la tarte...:/
1
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Freto,

Une dernière solution
- Faire une requête sur regroupement (sur le champ qui ne doit pas contenir de doublon)
- La liste obtenue exclut les éventuels doublons.

En SQL voila ce que ça donne :
Exemple simplifié réel :


SELECT First(VALEURS.RéfValeur) AS PremierDeRéfValeur, VALEURS.Valeur
FROM VALEURS
GROUP BY VALEURS.Valeur;

A toi de voir
La science ne fait que trouver ce qui existe depuis toujours.
REEEVES Hubert.
1
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Bonjour,

Une des possibilités consiste à transformer un des fichiers excel en table ACCESS pure race.
- Il suffit de sélectionner ce fichier Excel et d'activer le mode modification
- Définir les champs qui ne doivent pas contenir de doublons.
- Copier/coller l'ensemble des données de la 2ème table Excel à la suite de la première Table ACCESS nouvellement créée.

Pas à pas les doublons seront supprimés par ACCESS et une table d'erreur sera générée automatiquement qui contiendra les doublons.

NB : Pour éviter toute manip irréversible, faire une sauvegarde préalable des informations à manipuler.

J'arrête là, pour le moment, afin de ne pas embrouiller
A+
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
0
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Freto,

Procédons par ordre :
Je préconise, dans un premier temps, d'importer manuellement dans ACCESS les fichiers en provenance de EXCEL.

Fichier/données Externes/importer ( démarche pas à pas )

A toute
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Huder.
0
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
freto,

Bon, je reviens à ma solution sauvage, à la machette, genre Koh lenta ...

Créer une table ACCESS avec tous les champs requis et en spécifiant bien les champs interdits aux doublons
et l'alimenter par un copier coller en provenance de EXCEL.

C'est pas propre du tout, mais le résultat sera là ....
- Je sais faire mieux mais je ne me sens pas capable de diriger les manips en aveugle et en plus par écrit.

Voyons déjà le résultat de cette étape

A+
La science ne fait que trouver ce qui existe depuis toujours
REEVES Hubert.
0