Effacer les doublons.

Le
Alex
Bonjour,
je cherche a effacer des doublons tout en gardant un exemplaire. C'est
des purs doublons ou tous les champs sont identiques.
Je me suis inspiré de ça :
http://groups.google.com/group/microsoft.public.fr.access/browse_thread/thr=
ead/659ed2a7d30395d1/b0177465bb1efd9a?lnk=gst&q=effacer+doublon&rnum==
2&hl=fr#b0177465bb1efd9a

Quand je fais un simple listage j'obtiens ce que je veux :
SELECT Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1));

Mais quand j'essaie de l'effacer alors y a aussi les originaux qui
s'envolent
DELETE Last(TcdeDetailEncaisse.CodeCommande) AS Expr1,
TcdeDetailEncaisse.CodeCommande
FROM TcdeDetailEncaisse
WHERE (((TcdeDetailEncaisse.CodeCommande) In (SELECT
Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1)))));

J'ai essayé de décomposer en deux requetes mais je n'y arrive pas.
Je me dis que je pourrais 1) mettre juste les "simplets" dans une
table temp 2)effacer doublons et simplets 3) rajouter les simplets et
vider la table temp mais je sens que je peux faire plus élégant (et
fiable)

Merci

Alex
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien
Le #6275051
Bonjour,
je cherche a effacer des doublons tout en gardant un exemplaire. C'est
des purs doublons ou tous les champs sont identiques.
Je me suis inspiré de ça :
http://groups.google.com/group/microsoft.public.fr.access/browse_thread/thread/659ed2a7d30395d1/b0177465bb1efd9a?lnk=gst&qïfacer+doublon&rnum=2&hl=fr#b0177465bb1efd9a

Quand je fais un simple listage j'obtiens ce que je veux :
SELECT Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1));

Mais quand j'essaie de l'effacer alors y a aussi les originaux qui
s'envolent...
DELETE Last(TcdeDetailEncaisse.CodeCommande) AS Expr1,
TcdeDetailEncaisse.CodeCommande
FROM TcdeDetailEncaisse
WHERE (((TcdeDetailEncaisse.CodeCommande) In (SELECT
Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1)))));

J'ai essayé de décomposer en deux requetes mais je n'y arrive pas.
Je me dis que je pourrais 1) mettre juste les "simplets" dans une
table temp 2)effacer doublons et simplets 3) rajouter les simplets et
vider la table temp... mais je sens que je peux faire plus élégant (et
fiable)...

Merci

Alex

Bonjour Alex

Et si la solution serait de créé une table avec les données de ta
requête de dédoublonnage.
Ensuite tu efface ta table original, tu renomme ta table temporaire, et
le tour est joué.
Voilà
@+

Alex
Le #6275031
Bonjour,
dans ce cas il me faudrait créer une requête classique avec
regroupement, (ma requête de dédoublonnage ne listant que les
doublons). Mais je crains les opérations d'effaçage et renommage de
tables à cause des problèmes de relations et de fiabilité (un crash au
mauvais moment et le programme ne repartira sans que les bonnes
opérations ne soient faites).
Merci

On 3 mai, 11:47, Fabien

Bonjour,
je cherche a effacer des doublons tout en gardant un exemplaire. C'est
des purs doublons ou tous les champs sont identiques.
Je me suis inspiré de ça :
http://groups.google.com/group/microsoft.public.fr.access/browse_thre...

Quand je fais un simple listage j'obtiens ce que je veux :
SELECT Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1));

Mais quand j'essaie de l'effacer alors y a aussi les originaux qui
s'envolent...
DELETE Last(TcdeDetailEncaisse.CodeCommande) AS Expr1,
TcdeDetailEncaisse.CodeCommande
FROM TcdeDetailEncaisse
WHERE (((TcdeDetailEncaisse.CodeCommande) In (SELECT
Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1)))));

J'ai essayé de décomposer en deux requetes mais je n'y arrive pas.
Je me dis que je pourrais 1) mettre juste les "simplets" dans une
table temp 2)effacer doublons et simplets 3) rajouter les simplets et
vider la table temp... mais je sens que je peux faire plus élégant (et
fiable)...

Merci

Alex


Bonjour Alex
Et si la solution serait de créé une table avec les données de ta
requête de dédoublonnage.
Ensuite tu efface ta table original, tu renomme ta table temporaire, et
le tour est joué.
Voilà
@+



Raymond [mvp]
Le #6274991
Bonjour.

je viens de re-tester cette requête sur une table et je n'ai pas vu de
disfonctionnement. je te la redonne ci-dessous par copie en laissant toutes
les paranthèses, les seules obligatoires sont sur le In, le Last et le
Count.
mais attention quand tu vérifies, le fait de dire Last ne veut pas dire le
dernier de la table mais le dernier positionné dans la requête Select, ce
qui peut être différent ou alors faudrait rajouter un tri sur un champ date
quelconque.
(numero est la clé primaire dans mon exemple)

DELETE Table1.Numero
FROM Table1
WHERE (((Table1.Numero) In (SELECT Last( table1.Numero) AS DernierDeNuméro
FROM table1 GROUP BY table1.LeNom
HAVING Count(table1.LeNom)>1 )));

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windows
http://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4fed-861f-bb587f7ef413


"Alex"
Bonjour,
je cherche a effacer des doublons tout en gardant un exemplaire. C'est
des purs doublons ou tous les champs sont identiques.
Je me suis inspiré de ça :
http://groups.google.com/group/microsoft.public.fr.access/browse_thread/thread/659ed2a7d30395d1/b0177465bb1efd9a?lnk=gst&qïfacer+doublon&rnum=2&hl=fr#b0177465bb1efd9a

Quand je fais un simple listage j'obtiens ce que je veux :
SELECT Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1));

Mais quand j'essaie de l'effacer alors y a aussi les originaux qui
s'envolent...
DELETE Last(TcdeDetailEncaisse.CodeCommande) AS Expr1,
TcdeDetailEncaisse.CodeCommande
FROM TcdeDetailEncaisse
WHERE (((TcdeDetailEncaisse.CodeCommande) In (SELECT
Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1)))));

J'ai essayé de décomposer en deux requetes mais je n'y arrive pas.
Je me dis que je pourrais 1) mettre juste les "simplets" dans une
table temp 2)effacer doublons et simplets 3) rajouter les simplets et
vider la table temp... mais je sens que je peux faire plus élégant (et
fiable)...

Merci

Alex
Alex
Le #6274441
On 3 mai, 12:38, "Raymond [mvp]" wrote:
Bonjour.

je viens de re-tester cette requête sur une table et je n'ai pas vu de
disfonctionnement. je te la redonne ci-dessous par copie en laissant tout es
les paranthèses, les seules obligatoires sont sur le In, le Last et le
Count.
mais attention quand tu vérifies, le fait de dire Last ne veut pas dire le
dernier de la table mais le dernier positionné dans la requête Select , ce
qui peut être différent ou alors faudrait rajouter un tri sur un cham p date
quelconque.
(numero est la clé primaire dans mon exemple)

DELETE Table1.Numero
FROM Table1
WHERE (((Table1.Numero) In (SELECT Last( table1.Numero) AS DernierDeNum éro
FROM table1 GROUP BY table1.LeNom
HAVING Count(table1.LeNom)>1 )));

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum:http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windowshttp://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-32 60-4f...

"Alex"
Bonjour,
je cherche a effacer des doublons tout en gardant un exemplaire. C'est
des purs doublons ou tous les champs sont identiques.
Je me suis inspiré de ça :http://groups.google.com/group/microsoft.pu blic.fr.access/browse_thre...

Quand je fais un simple listage j'obtiens ce que je veux :
SELECT Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1));

Mais quand j'essaie de l'effacer alors y a aussi les originaux qui
s'envolent...
DELETE Last(TcdeDetailEncaisse.CodeCommande) AS Expr1,
TcdeDetailEncaisse.CodeCommande
FROM TcdeDetailEncaisse
WHERE (((TcdeDetailEncaisse.CodeCommande) In (SELECT
Last(TCdeDetailEncaisse.CodeCommande) AS Tmp
FROM TCdeDetailEncaisse
GROUP BY TCdeDetailEncaisse.CodeProduit,
TCdeDetailEncaisse.CodeCommande
HAVING (((Count(TCdeDetailEncaisse.CodeProduit))>1)))));

J'ai essayé de décomposer en deux requetes mais je n'y arrive pas.
Je me dis que je pourrais 1) mettre juste les "simplets" dans une
table temp 2)effacer doublons et simplets 3) rajouter les simplets et
vider la table temp... mais je sens que je peux faire plus élégant (et
fiable)...

Merci

Alex


Bonjour,
Je joins une micro base de test (32ko en .Rar), je savais pas trop ou
la mettre dites le si vous préférez un autre site moins polluant.
http://www.megaupload.com/?dJTRPDX6
Y a le résumé de tous mes tests avec les résultats en commentaire...
En gros j'arrive à lister pile ce que je veux effacer, mais si je veux
effacer j'en efface toujours trop. Si quelqu'un peut m'aiguiller...
Merci

Raymond [mvp]
Le #6274381
Bonsoir.

Effectivement on supprime bien les bons doublons mais tous les doublons sans
conserver le 1er enregistrement.
je vais regarder ça demain et voir si je peux trouver une solution directe.
le problème c'est que je pars 8 jours et que je risque de ne pas pouvoir
terminer mais je te tiens au courant.

pour te dépanner:
faire une requête regroupement de création de table qui va créer une
nouvelle table qui remplacera l'ancienne:
SELECT Table1.[CodeProduit], Table1.[Quantite], Table1.[PrixU],
Table1.[Ristourne], Table1.[TVA], Table1.[CodeCommande],
Table1.[CodeDetail], Table1.[Operateur] INTO TCdedetailEncaisse_groupe
FROM Table1
GROUP BY Table1.[CodeProduit], Table1.[Quantite], Table1.[PrixU],
Table1.[Ristourne], Table1.[TVA], Table1.[CodeCommande],
Table1.[CodeDetail], Table1.[Operateur];

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windows
http://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4fed-861f-bb587f7ef413


"Alex"
On 3 mai, 12:38, "Raymond [mvp]" wrote:

Bonjour,
Je joins une micro base de test (32ko en .Rar), je savais pas trop ou
la mettre dites le si vous préférez un autre site moins polluant.
http://www.megaupload.com/?dJTRPDX6
Y a le résumé de tous mes tests avec les résultats en commentaire...
En gros j'arrive à lister pile ce que je veux effacer, mais si je veux
effacer j'en efface toujours trop. Si quelqu'un peut m'aiguiller...
Merci
Willi2004
Le #6274321
Bonjour Raymond.
Huit jours? Tu vas nous manquer énormément!


"Raymond [mvp]" de news: %
Bonsoir.

Effectivement on supprime bien les bons doublons mais tous les doublons
sans
conserver le 1er enregistrement.
je vais regarder ça demain et voir si je peux trouver une solution
directe.
le problème c'est que je pars 8 jours et que je risque de ne pas pouvoir
terminer mais je te tiens au courant.

pour te dépanner:
faire une requête regroupement de création de table qui va créer une
nouvelle table qui remplacera l'ancienne:
SELECT Table1.[CodeProduit], Table1.[Quantite], Table1.[PrixU],
Table1.[Ristourne], Table1.[TVA], Table1.[CodeCommande],
Table1.[CodeDetail], Table1.[Operateur] INTO TCdedetailEncaisse_groupe
FROM Table1
GROUP BY Table1.[CodeProduit], Table1.[Quantite], Table1.[PrixU],
Table1.[Ristourne], Table1.[TVA], Table1.[CodeCommande],
Table1.[CodeDetail], Table1.[Operateur];

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windows
http://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4fed-861f-bb587f7ef413


"Alex"
On 3 mai, 12:38, "Raymond [mvp]" wrote:

Bonjour,
Je joins une micro base de test (32ko en .Rar), je savais pas trop ou
la mettre dites le si vous préférez un autre site moins polluant.
http://www.megaupload.com/?dJTRPDX6
Y a le résumé de tous mes tests avec les résultats en commentaire...
En gros j'arrive à lister pile ce que je veux effacer, mais si je veux
effacer j'en efface toujours trop. Si quelqu'un peut m'aiguiller...
Merci




Raymond [mvp]
Le #6274311
mais non, mais non, je vais vous laisser digérer votre nouveau (elle)
président(e).

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windows
http://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4fed-861f-bb587f7ef413


"Willi2004"
| Bonjour Raymond.
| Huit jours? Tu vas nous manquer énormément!
|
Alex
Le #6274301
On 4 mai, 21:00, "Raymond [mvp]" wrote:
mais non, mais non, je vais vous laisser digérer votre nouveau (elle)
président(e).

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum:http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windowshttp://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-32 60-4f...

"Willi2004"
| Bonjour Raymond.
| Huit jours? Tu vas nous manquer énormément!
|


Merci,
Y a aucun soucis, c'est pas un bout de code vital a mon applis même si
c'est quelque chose que je souhaite implémenter !
Et sinon bon huit jours !
A bientot et merci.
Alex

Raymond [mvp]
Le #6274291
au lieu de passer par une requête doublons il est plus facile de passer par
du code vba.
sur un formulaire tu places un bouton avec la procédure suivante sur le
click:

Private Sub Commande0_Click()
Dim ancien_CodeProduit As Long
Dim ancien_CodeCommande As Double
ancien_CodeProduit = 0
ancien_CodeCommande = 0
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Set Db = CurrentDb
Set Rs = Db.OpenRecordset("SELECT CodeProduit, CodeCommande FROM
TCdeDetailEncaisse ORDER BY CodeProduit, CodeCommande;")
If Not Rs.EOF Then
Do Until Rs.EOF
If Rs("CodeProduit") = ancien_CodeProduit And _
Rs("CodeCommande") = ancien_CodeCommande Then
Rs.Edit
Rs.Delete
Else
ancien_CodeProduit = Rs("CodeProduit")
ancien_CodeCommande = Rs("CodeCommande")
End If
Rs.MoveNext
Loop
End If
Set Db = Nothing
Set Rs = Nothing
End Sub

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windows
http://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4fed-861f-bb587f7ef413


"Alex"
On 4 mai, 21:00, "Raymond [mvp]" wrote:
Merci,
Y a aucun soucis, c'est pas un bout de code vital a mon applis même si
c'est quelque chose que je souhaite implémenter !
Et sinon bon huit jours !
A bientot et merci.
Alex
Jean-Paulo
Le #6274241
Oui, je suis d'accord avec Raymond. Du code VBA c'est beaucoup plus souple.
On peut améliorer
les critères, même garder le dernier double au lieu du premier, et c'est
rapide..

--
Jean Paulo
"Alex"
On 4 mai, 21:00, "Raymond [mvp]" wrote:
mais non, mais non, je vais vous laisser digérer votre nouveau (elle)
président(e).

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum:http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windowshttp://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4f...

"Willi2004"
| Bonjour Raymond.
| Huit jours? Tu vas nous manquer énormément!
|


Merci,
Y a aucun soucis, c'est pas un bout de code vital a mon applis même si
c'est quelque chose que je souhaite implémenter !
Et sinon bon huit jours !
A bientot et merci.
Alex

Publicité
Poster une réponse
Anonyme