Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Effacer les doublons.

11 réponses
Avatar
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=E9 de =E7a :
http://groups.google.com/group/microsoft.public.fr.access/browse_thread/thr=
ead/659ed2a7d30395d1/b0177465bb1efd9a?lnk=3Dgst&q=3Deffacer+doublon&rnum=3D=
2&hl=3Dfr#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=E9 de d=E9composer 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 =E9l=E9gant (et
fiable)...

Merci

Alex

10 réponses

1 2
Avatar
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_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à
@+

Avatar
Alex
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 wrote:

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à
@+



Avatar
Raymond [mvp]
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" a écrit dans le message de news:

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
Avatar
Alex
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" a écrit dans le message de news:

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

Avatar
Raymond [mvp]
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" a écrit dans le message de news:

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
Avatar
Willi2004
Bonjour Raymond.
Huit jours? Tu vas nous manquer énormément!


"Raymond [mvp]" a écrit dans le message
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" a écrit dans le message de news:

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




Avatar
Raymond [mvp]
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" a écrit dans le message de news:

| Bonjour Raymond.
| Huit jours? Tu vas nous manquer énormément!
|
Avatar
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-32 60-4f...

"Willi2004" a écrit dans le message de news:

| 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

Avatar
Raymond [mvp]
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" a écrit dans le message de news:

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
Avatar
Jean-Paulo
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" a écrit dans le message de news:

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" a écrit dans le message de news:

| 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

1 2