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

Access Discussion :

Suppression_Quasi_Doublons excel ou access


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Suppression_Quasi_Doublons excel ou access
    Bonjour,

    je travaille sur une liste des contacts à peu prés 8000 lignes.

    chaque ligne de contact est composée de plusieurs champs ( adresse en "A" , nom, prénom, D,E etc...).

    sachant qu'il y a forcément des doublons, est ce qu'il y une façon "requête SQL " ou autre pour supprimer uniquement les doublons qui ont le moins d'information?

    ma clé est le mail.
    par ex: si j'ai le même code postal et les mêmes nom et prénom mais j'ai D qui est qui est renseigné pour un contact"1"mais pas pour l'autre"2", alors je veux supprimer celui qui a plus d'info en l'occurrence ici "2".

    l'objectif ici est de garder les doublons ou quasi-doublons qui ont un max d'info.
    merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Autant que je sache, il n'y a pas de fonction toute faite pour faire cela.

    Voici comment je procéderai :

    Créer un champ "NbChampRempli" de type Entier Long dans la table de données.

    Executer le code suivant pour compter les champs utiles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    dim db as dao.database: set db=currentdb
    dim r as dao.database: set r=db.openrecordset("NomTaTable", dbopenDynaset)
    dim cptChamp as long
    dim f as dao.database 
     
    do while not r.eof
       cptChamp=0
     
       for each f in r.fields
     
          if trim(f.value & "") <> "" then
             cptChamp = cptChamp+1
          end if
     
       next f
     
       r.edit
       r![CptChampUtile]=CptChamp
       r.update
     
       r.movenext
    loop
     
    r.close: set r=nothing
    db.close: set db=nothing
    faire une requête de regroupement qui va prendre les courriels et le max de CptChampUtile (rMax).

    faire une requête de suppression qui prend en jointure ta table et rMAX sur Courriel et CptChampUtile et qui supprime tous les enregistrement où CptcHampUtile est null dans rMAX.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut SUPPR_QUASI_DOUBLONS
    MERCI marot r pour ta repense rapide.
    le souci c'est que si je comprends bien ta requête me permet de supprimer les doublons ou y a pas du tout d'informations, alors que moi je cherche à supprimer les doublons ou il y un minimum d'info!!
    et j'ai une autre question par rapport à ta requête je l'insert où?
    je suis sur access pour info et je maitrise que la création de rêquette.
    merci encore!!

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    le souci c'est que si je comprends bien ta requête me permet de supprimer les doublons ou y a pas du tout d'informations, alors que moi je cherche à supprimer les doublons ou il y un minimum d'info!!
    Non, ma requête supprime les enregistrements qui ne sont pas ceux qui ont le plus d'information ... donc ceux qui ont un minimum d'information.
    rMax te donne la liste des enregistrements qui ont le plus de champs renseignés.

    et j'ai une autre question par rapport à ta requête je l'insert où?
    je suis sur access pour info et je maitrise que la création de rêquette.
    Pas certain, de comprendre donc je vais détailler pas à pas.

    1. Aller dans la table de données, ajouter le champ cptChampUtile de type entier long*.
    2. Créer un module.
    3. Dans le module copier

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      public sub CompterChamp()
       
      dim db as dao.database: set db=currentdb
      dim r as dao.database: set r=db.openrecordset("NomTaTable", dbopenDynaset)
      dim cptChamp as long
      dim f as dao.database 
       
      do while not r.eof
         cptChamp=0
       
         for each f in r.fields
       
            if trim(f.value & "") <> "" then
               cptChamp = cptChamp+1
            end if
       
        next f
       
        r.edit
        r![CptChampUtile]=CptChamp
        r.update
       
        r.movenext
      loop
       
      r.close: set r=nothing
      db.close: set db=nothing
       
      end sub
      Changer NomTaTable pour le nom de la table que tu utilises.
    4. Faire une copie de sauvegarde de la base.
    5. Exécuter la procédure en cliquant dans le code et en appuyant sur [f5]
    6. Dans l'interface Access choisir "Créer une requête", la nommer rMax.
    7. Choisir ta table qui contient les données.
    8. Ajouter le champ courriel.
    9. Ajouter le champ cptChmapUtile.
    10. Appuyer sur la l'icône Sigma (celle qui ressemble à 3 à l'envers).
    11. Sur la ligne qui apparait, garder "regroupement" pour courriel et choisir Max pour cptChampUtile.
    12. Vérifier que la requête donne bien les résultats attendu.
    13. Faire une copie de sauvegarde de la base.
    14. Créer une nouvelle requête de type sélection, la nommer rSupprimerNonMax
    15. Ajouter la table des données
    16. Ajouter rMAx
    17. Cliquer le champ Courriel de la table de données, le glisser jsuqu'au champ Courriel de la rMAX
    18. Cliquer droit sur le trait de jointure, choisir "Propriété" de la jointure, cliquer 2
    19. Répeter avec cptChampUtile et MaxDeCptChampUtile
    20. Ajouter à la requête les champs Courriel et cptChampUtile de la table de données et le champ MaxDeCptChampUtile de rMAX.
    21. Mettre Is Null sur la ligne de critère dans la colonne MaxDeCptChampUtile
    22. Vérifier que la reequête donne bien la liste des enregistrements qui ne sont pas "Max".
      Noter le nombre d'enregistrements,
    23. Faire une copie de sauvegarde de la base.
    24. Changer le type de rSupprimerNonMax pour "Suppression".
    25. Exécuter la requête et accepter la suppression des enregisttrements si le nombre correspond bien à celui attendu.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    merci pour tes réponses.
    j'ai essayé de suivre les étapes.
    j'ai un problème lors de l'exécution du code, le message d'erreur est le suivant : membre de méthode ou de données introuvable, qui met l'accent sur r.OEF la 6 eme ligne du code.
    merci

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Peux-tu poster ton code ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public sub CompterChamp()
     
    dim db as dao.database: set db=currentdb
    dim r as dao.database: set r=db.openrecordset("GLOBAL_n14", dbopenDynaset)
    dim cptChamp as long
    dim f as dao.database 
     
    do while not r.eof
       cptChamp=0
     
       for each f in r.fields
     
          if trim(f.value & "") <> "" then
             cptChamp = cptChamp+1
          end if
     
      next f
     
      r.edit
      r![CptChampUtile]=CptChamp
      r.update
     
      r.movenext
    loop
     
    r.close: set r=nothing
    db.close: set db=nothing
     
    end sub
    email nom prenom fonction adresse .. .. .. ... ... ... ... ... ... ... ... ...

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    C'est curieux mais le compilateur ne semble pas avoir reconnu le code.

    dao devrait être automatiquement mis en majuscule et là il est en minuscule.
    même chose pour database qui devrait être Database.

    Peux-tu vérifier si tu n'as pas une référence manquante.

    Va dans ton code, dans le menu Outils, choisir références.
    Si tu pouvais poster une copie d'écran de tes références, cela aiderai aussi.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    MERCI vraiment pour ton aide, finalement j'ai trouvé une fonction Excel qui calcule les champs vide pour chaque adresse mail et j'ai fait une requête qui maximise le nombre de champs utiles,
    Le problème maintenant c'est que j'ai des cas de doublons où j'ai le même nombre de champs utile qui sont pas forcément les mêmes, je me demande c'est ce n'est pas possible pour chaque doublons de compléter le champs vide par l'information de l'autre champs si ça existe??
    je c pas si je suis claire.
    J'ai aussi du mal à faire une requête suppression.
    cordialement

Discussions similaires

  1. comment fermer un fichier Excel depuis Access?
    Par audrey_desgres dans le forum Access
    Réponses: 14
    Dernier message: 21/06/2005, 12h43
  2. Ouvrir un fichier excel depuis access
    Par ptitegrenouille dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 03/05/2005, 11h47
  3. imprimer feuille excel depuis access
    Par Jean Bonnisme dans le forum Access
    Réponses: 3
    Dernier message: 18/11/2004, 08h46
  4. insert entre excel et access
    Par patmich2 dans le forum ASP
    Réponses: 6
    Dernier message: 06/10/2004, 13h24
  5. Applications de reporting : Excel ou Access ?
    Par Aurelien38 dans le forum Access
    Réponses: 3
    Dernier message: 02/10/2003, 08h31

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