IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Supprimer doublons de ma table en VBA ou autre ? [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    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

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    bonsoir,
    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 ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Je voudrais en conservé qu'une à chaque fois

    si le champ réf contient un doublons en garder qu'une ligne

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

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


  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    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

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    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 ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    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

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    l’histoire ne disant pas ce qu’on doit faire et quelle ligne on doit conserver dans la cas:
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    );

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    bonjour,

    entre crochets [ ] la date, à cause de l’<espace>:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...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.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  14. #14
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strDelete="DELETE FROM " & strTable & " D WHERE D.Id NOT IN bla bla bla bla…"
    currentdb.execute strDelete,dbFailOnError

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 );"

  17. #17
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    ...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 ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut
    Merci sa fonctionne

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM Debutant10 D
    WHERE D.Id IN
    à partir d'une requête et non pas de ma table Debutant10 D




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ...

  20. #20
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    bonjour,

    quel message d'erreur ?

    Tu parles du SELECT... WHERE D.id IN...ou bien du
    DELETE FROM...WHERE D.id NOT IN...?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Supprimer doublons dans une table !
    Par S.Lay dans le forum BIRT
    Réponses: 4
    Dernier message: 25/08/2011, 12h17
  3. pour supprimer les doublons d'une table qcq
    Par lamjed dans le forum Oracle
    Réponses: 7
    Dernier message: 19/12/2008, 16h42
  4. [VBA-A] supprimer les doublons d'une table
    Par desdenova dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/02/2007, 16h30
  5. Comment supprimer les doublons d'une table?!
    Par JauB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/01/2006, 08h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo