Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2011, 22h51   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Supprimer doublons de ma table en VBA ou autre ?

Bonjour,

J'ai une table importé d 'un fichier excel avec 1000 lignes et 60 colonnes. J'ai un champ nommé
Références qui est en doublons. Comment supprimer les lignes en doublons de ma table ?

Références heures date
AF9999 - 25898 -69885
AD8888- etc ..
AF9999- etc ...
AE6547-

Comment faire simple ? car j'ai regardé dans le forum pas très clair.
Merci de votre aide
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 23h40   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonsoir,
Citation:
Références heures date
AF9999 - 25898 -69885
AD8888- etc ..
AF9999- etc ...
AE6547-
On doit supprimer les deux lignes ?
On en conserve qu'une ? Laquelle ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/08/2011, 23h52   #3
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Je voudrais en conservé qu'une à chaque fois

si le champ réf contient un doublons en garder qu'une ligne
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 05h09   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 619
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 619
Points : 30 959
Points : 30 959
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Citation:
Envoyé par f-leb Voir le message
Laquelle ?
Philippe

__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/08/2011, 11h26   #5
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut supprimer le doublon dans le champ réf

supprimer le doublon dans le champ réf et garder que la ligne si le champ ENT est renseigné et avec les données commancant par un S.

Donc pour garder une des lignes en doublons si j'ai le choix je souhaiterais garder celle ou le champ ENT renseigné avec les données commancant par un S. Surtout bien supprimmer les doublons


AF9999- POIU
AF9999- SPER
AF9999-

MERCI
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 21h33   #6
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Bonsoir,

supprimer, supprimer …Est-ce que les deux cas suivants peuvent se présenter ?

Citation:
Envoyé par avec S deux fois
AF9999- POIU
AF9999- SPER
AF9999- SPIP
Citation:
Envoyé par pas de S
AF9999- POIU
AF9999- TOTO
AF9999- RIRI
Et si oui, que doit-on faire ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/08/2011, 22h44   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Bonjour,

non généralement c que le cas 1 ci dessous et parfois le cas 2

cas 1

avec S une fois
AF9999- POIU
AF9999- SPER

cas 2 (parfois)
AF9999- POIU
AF9999- TOTO
AF9999- RIRI


c compliqué à faire ? pouvez vous essayé avec le cas 1 ? merci pour votre aide
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 10h23   #8
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Bonjour,

l’histoire ne disant pas ce qu’on doit faire et quelle ligne on doit conserver dans la cas:
Citation:
cas 2 (parfois)
AF9999- POIU
AF9999- TOTO
AF9999- RIRI
en supposant également qu’il y ait un identifiant [id] pour ces lignes, on peut essayer :

Code sql :
1
2
3
4
5
6
7
SELECT * FROM Debutant10 D
WHERE D.Id IN
(
   SELECT TOP 1 T.Id FROM Debutant10 T
     WHERE T.Ref=D.Ref
        ORDER BY  iif(T.ENT LIKE "S*",0,1), T.id
);
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/08/2011, 15h14   #9
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Très bien pour le Cas 1 pour le cas 2 garder le 1 er enregistrement

Bonjour

MERCI cela fonctionne très bien pour le Cas 1 !!


pour le cas 2 je viens de vérifier je voudrais garder le 1 er enregistrement des 3 doublons, est possible ? si oui comment faire dans le sql ?

cas 2 (parfois)
AF9999- POIU
AF9999- TOTO
AF9999- RIRI

ci-dessou sql pour le cas 1 et comment injécter dans le même sql le cas 2

MERCi pour votre aide

Code :
1
2
3
4
5
6
7
SELECT * FROM Debutant10 D
WHERE D.Id IN
(
   SELECT TOP 1 T.Id FROM Debutant10 T
     WHERE T.Ref=D.Ref
        ORDER BY  iif(T.ENT LIKE "S*",0,1), T.id
);



L' identifiant [id] pour ces lignes est-il obligatoire ?
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 18h59   #10
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Citation:
Envoyé par Debutant10
pour le cas 2 je viens de vérifier je voudrais garder le 1 er enregistrement des 3 doublons, est possible ?
le 1er en triant suivant quel ordre ? Les lignes d’une table Access ne sont pas numérotées comme dans Excel.

Dans ton 1er post, tu semblais avoir une date :
Citation:
Envoyé par Debutant10
Références heures date
AF9999 - 25898 -69885
AD8888- etc ..
AF9999- etc ...
On peut utiliser la date pour trier ? (s’il n’y a pas de ref qui commence par S, on prendrait la ligne qui a la date la plus récente/ancienne)

Code sql :
ORDER BY  iif(T.ENT LIKE "S*",0,1), T.LaDate DESC, T.id

Citation:
Envoyé par Debutant10
L' identifiant [id] pour ces lignes est-il obligatoire ?
S’il n’existe pas, il faut d’une manière ou d’une autre en créer (ou calculer) un.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/08/2011, 21h54   #11
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Très bien l'analyse

Oui on peut utiliser le champ "date deb" pour trier s’il n’y a pas de ref qui commence par S, aucun pb. on prendrait la ligne qui a la date la plus anciènne
sa me va très bien.


si je résume : le trie s'éffectura par le champ "date deb"


Code :
1
2
3
4
5
6
7
SELECT * FROM Debutant10 D
WHERE D.Id IN
(
   SELECT TOP 1 T.Id FROM Debutant10 T
     WHERE T.Ref=D.Ref
        ORDER BY  iif(T.ENT LIKE "S*",0,1), T.date deb DESC, T.id
);
c bon ce que j'ai ajouté ? que signifie DESC ?


Je reviens sur l'aspect clé primaire, je génère un import automatique ce la peut poser un pb ?

ou dois-je créer un champ sup pour la clé primaire car j 'ai jamais essayé d'ajouter de champ id clé primaire ect....

MERCI pour votre aide
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 10h54   #12
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour,

entre crochets [ ] la date, à cause de l’<espace>:
Code sql :
...ORDER BY  iif(T.ENT LIKE "S*",0,1), T.[date deb] DESC, T.id
DESC pour les tris par ordre décroissant, mais pour obtenir la date la plus ancienne il faut trier par ordre croissant==> supprimer DESC

Citation:
Envoyé par Debutant10
Je reviens sur l'aspect clé primaire, je génère un import automatique ce la peut poser un pb ?
ou dois-je créer un champ sup pour la clé primaire car j 'ai jamais essayé d'ajouter de champ id clé primaire ect....
Aucun problème, dans les spécifications d’importation proposées par l’assistant on peut demander d’ajouter automatiquement un numéroAuto comme clé primaire.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/08/2011, 20h44   #13
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut OK peut on pas lancer cette requête automatiquement dans mon code VBA

Merci pour l'info,

Très bien sa marche. Pour éviter de lancer manuellement sur un bouton pour supp les doublons avec la requête sui fonctionne à chaque fois etc...., peut on pas lancer cette requête automatiquement dans mon code VBA après chaque import.

Voici mon import

Code :
1
2
3
4
5
For Each strFeuille In varFeuilles
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
      strTable, strChemin, blnNoms, strFeuille & "!"
 
  Next
comment puis-je mettre le lancement de la requête

MERCI pour votre aide
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 22h08   #14
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Si je comprends bien tu veux supprimer physiquement les doublons une fois l’importation terminée.

Pour supprimer physiquement les doublons dans la table, il faut une requête DELETE avec un NOT IN:
Code sql :
1
2
3
4
5
6
7
DELETE * FROM Debutant10 D
WHERE D.Id NOT IN
(
   SELECT TOP 1 T.Id FROM Debutant10 T
     WHERE T.Ref=D.Ref
        ORDER BY  iif(T.ENT LIKE "S*",0,1), T.[date deb], T.id
);

Pour lancer la requête en VBA:
Code :
1
2
strDelete="DELETE FROM " & strTable & " D WHERE D.Id NOT IN bla bla bla bla…"
currentdb.execute strDelete,dbFailOnError
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/08/2011, 22h27   #15
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut comment retranscrire le sql qui marche très bien en VBA ?

OUI supprimer physiquement les doublons une fois l’importation terminée.
est ce possible.
mais comment in blabla ??? comment retranscrire le sql qui marche très bien en VBA ?


Code :
1
2
3
4
5
6
7
8
For Each strFeuille In varFeuilles
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
      strTable, strChemin, blnNoms, strFeuille & "!"
 
  Next 
 
strDelete="DELETE FROM " & strTable & " D WHERE D.Id NOT IN bla bla bla bla…"
currentdb.execute strDelete,dbFailOnError
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 10h07   #16
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour,

ben bla bla bla pour la suite de la requête :

Code :
1
2
3
strDelete = "DELETE  FROM " & StrTable & " D WHERE D.Id NOT IN " & _
"( SELECT TOP 1 T.Id FROM " & StrTable & " T WHERE T.Ref = D.Ref " & _
"ORDER BY iif(T.ENT LIKE ""S*"",0,1), T.[date deb], T.id );"
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/08/2011, 15h11   #17
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
...sinon ça en est où l'histoire ?

tes doublons sont bien supprimés ?
Le NOT IN a la réputation de faire traîner les requêtes, les délais restent raisonnables ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/09/2011, 22h01   #18
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Merci sa fonctionne
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 16h09   #19
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Petit détail même chose mais à partir d'une requête SELECT * FROM et non d'une table

Bonjour,

un petit Détail

Est il possible d'utiliser le même code sql mais cette fois ci je vourdais utiliser mon
Code :
1
2
SELECT * FROM Debutant10 D
WHERE D.Id IN
à partir d'une requête et non pas de ma table Debutant10 D




Code :
1
2
3
4
5
6
7
SELECT * FROM Debutant10 D
WHERE D.Id IN
(
   SELECT TOP 1 T.Id FROM Debutant10 T
     WHERE T.Ref=D.Ref
        ORDER BY  iif(T.ENT LIKE "S*",0,1), T.date deb DESC, T.id
);

car j'ai un message d 'erreur .... quand je fais cela depuis une table ...
Debutant10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2011, 15h04   #20
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour,

quel message d'erreur ?

Tu parles du SELECT... WHERE D.id IN...ou bien du
DELETE FROM...WHERE D.id NOT IN...?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h33.


 
 
 
 
Partenaires

Hébergement Web