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

Macros et VBA Excel Discussion :

Identifier les doublons dans une base


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    C
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : C
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par défaut Identifier les doublons dans une base
    Bonsoir à tous,

    Je requiers votre aide pour avancer sur un problème sur lequel je n'arrive pas à avancer.

    Ma problématique est somme toute assez simple mais je bute quand même dessus :

    J'ai une base de donnée de quelques colonnes sur plusieurs dizaines de milliers de lignes avec bien sûr des doublons qui trainent dans le lot...
    Je pourrais il est vrai passer par la suppression des doublons directement via le bandeau mais je souhaite pouvoir les isoler afin de les traiter.

    Ma piste initiale était de constituer deux boucles qui travailleraient l'une dans l'autre.

    Pour vous donner une idée de la structure de mon fichier :
    - la plage sur lequel je dois faire la comparaison est sur les 5 premières colonnes
    - je souhaite avoir dans une colonne n°6 le ou les numéros de lignes sur lesquels se trouvent les autres doublons (ou une référence unique pour chaque doublon).

    Je suis ouvert à toutes vos idées !
    Merci d'avance pour votre aide

    End_Sub
      0  0

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Nécessité (une fois de plus) d'être TRES précis :
    - la plage sur lequel je dois faire la comparaison est sur les 5 premières colonnes
    et
    J'ai une base de donnée de quelques colonnes sur plusieurs dizaines de milliers de lignes avec bien sûr des doublons qui trainent dans le lot...
    Lorsque je lis ces deux seules déclarations, j'ignore totalement si les "doublons" sont des données identiques sur la totalité des 5 colonnes concernées d'une ligne ou s'ils sont identifiés par une donnée identique dans l'une (et laquelle ?) de ces colonnes.
      0  1

  3. #3
    Futur Membre du Club
    Homme Profil pro
    C
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : C
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par défaut
    Bonsoir Unparia

    Effectivement- ca prête à confusion.

    Les 5 premières colonnes de chaque ligne doivent être considérées comme un bloc - et comparées au reste de la base

    Merci pour ton aide
    End Sub
      0  0

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Tu n'as dans ce cas d'autre solution que deux lentes boucles imbriquées pour comparer ce qui est comparable.
    Avec deux choix, car une simple concaténation des valeurs ne serait qu'une présomption :
    - choix 1 : comparaison (une à une, donc) de chaque cellule des 5 colonnes concernées de chacune des lignes
    - choix 2 : comparaison de leur concaténation, mais chaque valeur étant alors séparée de l'autre par un séparateur unique (et non risquant d'être présent dans chacune des cellules) !
    Commence par cette étape liminaire du travail à faire. On verra ensuite.

    maintenant, mais selon ta version Excel (et donc non forcément valable pour toutes versions si fichier à distribuer) :
    et puisque les 5 colonnes en cause ne sont pas discontinues : tu peux toujours utiliser (si disponible sur ta version) l'outil Excel de suppression des doublons, appliqué à la sélection de ces 5 colonnes)
    MAIS : cela ne te donnera pas les N°s de lignes que tu veux recenser par doublon !
      0  1

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonsoir,

    Personnellement je choisirai la 2ème option, avec la concaténation (après c'est un choix) mais je l'a trouve plus pratique à gérer

    j'avais créer un post sur les doublons dont le code marche aussi bien sur PC que Mac (je suis sur MAC et de temps en temps sur PC) :

    - l'une des options de ma macro (Code créer par @Marc-L) est de rassembler les doublons sur une feuil2, les doublons se suivant bien entendu
    sur une colonne supp à coté des doublons, les n° de ligne correspondant au doublons; il suffit alors de laisser apparaitre seulement les n° de ligne que l'on veut effacer (les n° lignes que l'on garde sont effacés)
    pour mieux voir les doublons dans cette option j'ai créé une macro surlignant les doublons en 1 sur 2 à chaque changement de doublons

    - une des autres options et d'avoir le choix, soit d'effacer les derniers doublons, soit d'effacer les 1er doublons (Code créer par @Marc-L)

    Le Post complet
    au final 1 et 2 (corrections apportées)

    Je pense qu'après avoir fait la concaténation les codes dans les liens données sont utilisables il faudra faire quelques modifs

    Voilà

    Edit : Sachant qu'à ce moment là j'avais le niveau d'un bon débutant, il serait intéressant de lire le post en entier car pour ma part je le trouve très enrichissant (si le coeur vous en dit)

    Coucou Jacques
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)
      0  1

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour ryuautodidacte
    C'est très astucieux.
    Il faut bien entendu alors ajouter sur la feuille de départ une colonne reprenant les N°s de ligne avant d'en faire une copie sur la feuil2, puis ;
    - traiter cette feuil2 en la triant
    - utiliser une boucle de parcours et écrire dans une autre additionnelle les N°s des lignes des doublons (séparées par un séparateur ";" par exemple)
    - lire ensuite les deux colonnes (disons X et Y) et porter en colonne de Feuil1, pour chaque ligne de N° lu en colonne X, la valeur correspondante de la colonne Y
    - effacer la feuil2
    Rigolo, mais fonctionnel
      0  1

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Bonsoir comme visiblement le contexte des doublons n'est pas vraiment très clair
    mais que j'ai entendu parler de concaténation je supposé que ca concerne plusieurs colonnes dans une ligne a comparer avec les autre lignes sur les mêmes colonnes

    tout du moins c'est ce que j'ai compris apres qu'elles soit contigues ou pas cela se gère dans le join de l'array

    le principe c'est de boucler sur toute les lignes et concatener les colonnes voulues pour les comparer a un dicionnaire
    si il n'esiste pas on le met avec le numero de ligne
    et si il existe déjà on ajoute le numero de ligne qu'il contiens déjà

    une 2d boucle sur le tableau en concaténant les colonnes voulues
    et a chaque ligne mettre la valeur de l'item de dico correspondant a la clé(chaine)

    somme toute rien de bien complexe

    on se rtrouve a la fin avec la colonne 6("F") ou dans chaque ligne on a les numéro de ligne de la concaténation des colonnes prises en compte
    si il y a 1 seul chiffre il est tout seul si il y plusieurs chiffre séparés par "|" alors la concaténation 'est un doublons

    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
    Sub test()
    'on prend les 5 colonne dans une variable tableau
    tableau = Range("A1:f" & Cells(Rows.Count, 1).End(xlUp).Row)
    Set d = CreateObject("scripting.dictionary")
    For i = LBound(tableau) To UBound(tableau)
    chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-")
    If Not d.exists(chaine) Then
    d(chaine) = i
    Else
    d(chaine) = d(chaine) & "|" & i
    End If
    Next
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    chaine = Join(Array(Cells(i, 1), Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 5)), "-")
    Cells(i, 6) = d(chaine)
    Next
    End Sub
    demo en image
    Nom : demo2.gif
Affichages : 1911
Taille : 256,6 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      1  1

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Identifier les doublons dans une requete
    Par totor92290 dans le forum IHM
    Réponses: 2
    Dernier message: 27/10/2016, 12h08
  2. Comment réperer les doublons dans une base de données?
    Par Marc31 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/07/2015, 16h29
  3. [Débutant] Eviter les doublons dans une base access
    Par gilles_906 dans le forum VB.NET
    Réponses: 24
    Dernier message: 29/08/2011, 16h46
  4. Réponses: 0
    Dernier message: 09/02/2011, 09h13
  5. les images dans une base de données
    Par houhou dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/06/2004, 14h27

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