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 :

Suppression de doublons sur deux colonnes via VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut Suppression de doublons sur deux colonnes via VBA
    Bonjour,

    Je dois créer un module excel permettant de supprimer les doublons sur deux colonnes afin de pouvoir ensuite extraire les deux colonnes sans doublons. Mon soucis repose sur la suppression des doublons. Je ne connais pas du tout le VBA et ai suivi les tutoriels d'un site en ligne pour apprendre les bases, j'espère que mon code ne piquera pas trop les yeux ...
    A savoir : les valeurs de ma première colonne sont sur N et les valeurs de la seconde sont sur M, toutes mes valeurs commencent à la ligne 2 et peuvent aller jusqu'à 150 approximativement.

    Voici mon code :

    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 doublon()
     
    i = 2
     
    While i < 150
     
    If Range("M2").Value = Range("N" & i).Value Then
     
    Range("M2").Delete
    Range("N" & i).Delete
    i = 2
     
    End If
     
    Wend
     
    End Sub
    L'algorythme que j'ai voulu appliqué :

    On teste la valeur de la case M2 avec toutes les valeurs des cases Ni (avec i commençant à 2), si on trouve une correspondance, il y a suppression des deux cases, sinon on passe à i+1. Vu que la valeur de la cellule M2 a été supprimée, une nouvelle valeur à tester a pris sa place donc réinitialisation de i à 2.
    Le code fonctionne quand deux valeurs identiques sont l'une en face de l'autre, mais quand il faut commencer à chercher une valeur plus loin dans la colonne N, le module mouline dans le vide, je dois arrêter le process et le débogage pointe la ligne "End if".

    Pour tester le code j'ai tapé quelques valeurs dans les deux colonnes :
    10 10
    12 12
    15 5
    22 105
    5 100
    7 15
    Tout se passe bien pour les 10 et les 12, mais le programme bug sur le 15.

    J'espère avoir bien résumé mon problème, merci d'avance pour vos réponses !!

    P.S. : N'hésitez pas à me poser des questions, je reste disponible.
      0  0

  2. #2
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Il te faut tout simplement une boucle imbriquée dans ta première boucle, voici l'algorithme :

    Pour i allant de Début à Fin
    ____Récupère ValeurAI de la Colonne A, Ligne i
    ____Pour j allant de Début à Fin
    ________Récupère ValeurBJ de Colonne B, Ligne i
    ________Si ValeurAI = BJ alors
    __________Supprimer ValeurBJ
    ________Fin Si
    ____Next j
    Next i
      0  1

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Tout d'abord merci de ta réponse !

    Voici le code que j'ai tapé en suivant l'algorithme (le code est à applique à des suites des lettres et de chiffres, je ne sais pas si ça a un réél impact mais je préfère préciser au cas où...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub doublon2()
     
    For i = 2 To 100
        ValeurMI = Range("M" & i).Value
        For j = 2 To 100
            ValeurNJ = Range("N" & j).Value
            If ValeurMI = ValeurNJ Then
                Range("M" & i).Delete
                Range("N" & j).Delete
            End If
        Next j
    Next i
     
    End Sub
    Le code ne supprime pas tous les doublons et fini en boucle infinie, une idée ?

    J'ai testé sur cette séquence :
    10 10
    12 12
    15 5
    22 105
    5 100
    7 15

    Et il reste :
    12 12
    22 105
    7 100

    Quand j'essaie sur la vraie liste d'une centaine de lignes, il n'y quasiment aucune suppression de doublon, avant que le programme se mette à mouliner dans le vide.
      0  0

  4. #4
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Oui, tu n'as pas fait totalement attention à ce que j'ai noté :
    Il ne faut supprimer que la valeur d'une seule colonne. Sinon forcément tu te retrouves avec une cellule vide dans chaque colonne, et du coup tu boucles à l'infini.

    En un peu plus performant, tu peux décaler les cellules vers le haut plutôt que faire une suppression, ce qui t'évites les cellules vides. Mais attention à ne pas dépasser le nombre de valeurs.
      0  0

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Je pense que j'ai mal exprimé mon problème, toutes mes excuses. Mon but est en fait de supprimer les valeurs égales non seulement sur une mais sur les deux colonnes, car normalement, après le programme il ne reste plus que deux colonnes desquelles on a "purgé" toutes les valeurs qui se retrouvaient auparavant dans les deux colonnes. Encore merci pour ton aide et la rapidité de tes réponses !!
      0  0

  6. #6
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Citation Envoyé par Instinct Voir le message
    Je pense que j'ai mal exprimé mon problème, toutes mes excuses. Mon but est en fait de supprimer les valeurs égales non seulement sur une mais sur les deux colonnes, car normalement, après le programme il ne reste plus que deux colonnes desquelles on a "purgé" toutes les valeurs qui se retrouvaient auparavant dans les deux colonnes. Encore merci pour ton aide et la rapidité de tes réponses !!
    Une question alors :
    Peux-tu avoir la même valeur plusieurs fois dans une même colonne? Si oui, comment cela doit-il être pris en compte?
      0  0

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Citation Envoyé par Instinct Voir le message
    Je dois créer un module excel permettant de supprimer les doublons sur deux colonnes afin de pouvoir ensuite extraire les deux colonnes sans doublons.
    La suppression dans les colonnes sources est donc tout à fait inutile ‼

    Soit l'utilisation du B-A-BA d'Excel pour un dictionnaire interne
    comme par exemple via la fonction de feuille de calculs EQUIV (Match en VBA) et une variable tableau;
    soit l'utilisation d'un dictionnaire externe, voir l'aide VBA de l'objet Dictionary et les exemples de ce forum …

    Ou encore recopie de chaque colonne dans une colonne unique puis utilisation de la méthode RemoveDuplicates

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, …
      1  1

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ceci dit tu peux toujours utiliser la méthode Highlander que je n'essai plus de vendre aux internaute du forum!
      0  0

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Instinct Voir le message
    […] supprimer les doublons sur deux colonnes afin de pouvoir ensuite extraire les deux colonnes sans doublons. Mon soucis repose sur la suppression des doublons. […] j'espère que mon code ne piquera pas trop les yeux ...
    A savoir : les valeurs de ma première colonne sont sur N et les valeurs de la seconde sont sur M, toutes mes valeurs commencent à la ligne 2 et peuvent aller jusqu'à 150 approximativement.
    Ce qui pique les yeux, c'est déjà la logique de l'explication, l'à peu près, voire même contradictoire !
    Cela demande une présentation initiale claire et exhaustive !

    Normal la lenteur car y-a-il vraiment besoin de supprimer les doublons dans la source pour les extraire ?
    La réponse est non si la destination n'est pas la plage d'origine !
    Au passage, les extraire vers où ?‼ Quel est le but, c'est pour quoi faire ?! Ce serait vraiment utile pour optimiser …

    La première colonne est la N, la seconde est la M ? Ben non c'est le contraire dans l'ordre de l'alphabet !
    Du reste si l'ordre compte, là encore aucune information précise …

    Il n'y aurait donc pas de doublon (sans s comme il n'y en a pas !) par colonne …
    Mais y-a-t-il toujours le même nombre d'éléments dans chaque colonne, vont-ils par paires ?
    Ou par exemple peut-il y avoir 5 nombres dans une colonne et 9 dans l'autre ?

    Bref, avec une présentation enfin digne de ce nom, aucun souci pour proposer une solution efficiente, (*)
    surtout que c'est le genre d'exercice que l'on donne à un niveau débutant, aucune difficulté particulière,
    d'autant plus si sont utilisées des fonctionnalités d'Excel, même en VBA …

    (*) Je vois plusieurs boucles ainsi que plusieurs tests dans le code précédent or
    un seul test au sein d'une boucle unique est nécessaire, donc forcément plus rapide …
      1  1

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Condition de NON doublon sur deux colonnes de facon simultanee :
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/01/2012, 14h28
  2. [XL-2007] Doublons sur deux feuilles avec 26 colonnes chacunes
    Par jimmycamelon dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/03/2011, 16h56
  3. excel vba condition sur deux colonnes
    Par Thibautrives dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/05/2008, 15h12
  4. [Débutant] doublon sur deux colonnes
    Par mephilith dans le forum Langage SQL
    Réponses: 8
    Dernier message: 28/01/2008, 19h28
  5. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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