Problème de doublon sous excel

Résolu
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012 - 6 sept. 2012 à 09:33
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012 - 6 sept. 2012 à 15:17
Bonjour
Bonjour
je poste sur cette page car je rencontre un problème sur Excel. J'ai un tableau dans lequel j'ai des doublons un peu particulier c'est à dire, que la valeur de la colonne A correspond à la valeur de la colonne B d'une autre ligne et inversement la valeur de la colonne B correspond à la valeur de la colonne A d'une autre ligne.
par exemple
colonne A colonne B
83837 82838
82838 82837
Autre point important, les lignes ne se suivent pas.
exemple j'ai une ligne à la ligne 1 et l'autre à la ligne 1500.
Est-il possible à l'aide d'une macro ou autre, de parcourir toute les lignes, de rechercher les doublons et ensuite,de supprimer une des 2 lignes.

26 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 14:23
Non ! pas de countif dans un tel cas.
Regarde ===>>>
Dim plage As Range, macol As New Collection, toto, i As Long
  toto = Range("A1:B8") ' ici la plage à épurer des doublons. Mets la tienne
  For i = 1 To UBound(toto)
    On Error Resume Next
    macol.Add i, toto(i, 1) & "@" & toto(i, 2)
    If Err = 0 And toto(i, 1) <> toto(i, 2) Then
      macol.Add i, toto(i, 2) & "@" & toto(i, 1)
    End If
    If Err <> 0 Then
      If plage Is Nothing Then Set plage Rows(i) Else Set plage Union(plage, Rows(i))
    End If
    On Error GoTo 0
  Next
  If Not plage Is Nothing Then plage.EntireRow.Delete


Très rapide.
J'aurais préféré personnellement l'utilisation d'un dico (et éviter la gestion d'erreur), mais me suis dit qu'une collection était plus à ta portée.
Je vais au dodo.________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 sept. 2012 à 10:16
Salut

Oui, c'est possible.
As-tu commencé quelque chose ?
Sur quoi bloques-tu ?
Enumérer les lignes : quelle difficulté ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 10:21
Bonjour,
Parcours en boucle les valeurs de la colonne A et :
- pour chaque valeur ===>> utilise CountIf sur la colonne B
- si Countif retourne > 0 : supprime la ligne où se trouve la valeur dans A.
Pour utiliser CountIf :
Ouvre ton aide VBA sur WorkSheetFunction ===>> membres ===>> Countif
Tu as là les éléments suffisants pour travailler.
Reviens avec ton code d'essai, si encore en difficulté.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 10:28
En fait je ne veux supprimer que lorsque dans la colonne A j'ai la valeur de la colonne B et en B la valeur de la colonne A
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 10:30
j'ai commencé avec ce code
Sub test()
Dim i As Long, c As Range
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
Do While Cells(i, 1).Value <> "" And Application.CountIf([B:B], Cells(i, 1).Value) > 0
[B:B].Find(Cells(i, 1).Value, , , xlWhole).Delete xlShiftUp
Loop
Next i
End Sub
mais il ne fonctionne pas. Il me supprime toute la colonne B et pas les lignes en doublons
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 10:34
Ah !
CountIf ....CountIf... Countif...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 10:54
Et on réfléchit un peu avant d'écrire des choses telles que :

En fait je ne veux supprimer que lorsque dans la colonne A j'ai la valeur de la colonne B et en B la valeur de la colonne A


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:03
C'est quoi le souci avec ce que j'ai écris.
tu préfères que je mette
dans la colonne A la valeur d'une des colonnes B et dans la colonne B la valeur d'une des colonnes A.
par exemple
colonne A colonne B
ligne 1 83837 82838
ligne 100 82838 82837
du coup je veux supprimez soit la ligne 1 soit la ligne 100
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 11:10
1) Tu commences à y voir moins mal. Ce sera parfait lorsque tu auras compris la différence entre le et et le ou, hein ...
2) Je t'ai répondu : Countif



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:13
J'ai compris il faut les deux conditions pour supprimez la ligne donc un ET
0
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:14
Qu'est-ce qui ne va pas dans mon code pour faire cela
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 11:14
Et j'insiste :
Seule la colonne A a à être parcourue. Le Countif est à faire sur la colonne B.
Car une chose est claire : si lune valeur de A est dans B, il y a forcément une valeur de B se trouvant dans A !!!
Réfléchis


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 11:19
Qu'est-ce qui ne va pas dans mon code pour faire cela


- si Countif retourne > 0 : supprime la ligne où se trouve la valeur dans A


Et quand on supprime une ligne et qu'on ne veut pas se faire des crocs en jambes dans la numérotation :
On parcourt (et supprime donc) de bas en haut et non de haut en bas.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:20
C'est ce que j'ai mis dans mon code mais pourquoi il ne me supprime que les valeurs de la colonne B et pas la ligne complète
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 11:39
Regarde dans ton aide VBA ce qu'est entirerow et ce qu'est delete.

Par ailleurs (et avant que l'on aille trop loin). Je me suis "amusé", car j'en ai un peu marre (je suis vieux) des demandes mal formulées.

Alors ===>>

Tu vas peut-être commencer à mesurer l'importance d'une pensée et d'une expression bien ordonnées.
La réponse que je t'ai faite l'était sur la base de ton expression. Il est en effet clair que son résultat conduit à l'absence de toute valeur de A dans la colonne B et vice-versa.

Elle aurait bien évidemment été autre, ma réponse, si ta demande avait été exprimée autrement, par exemple ainsi :
Supprimer toutes les lignes contenant en colonne B une des valeurs de la colonne A et vice-versa.

Pas pareil du tout

Cette remarque ne se veut pas ironique, hein ... Elle est juiste le rappel de l'absolue nécessité d'exposer les choses avec clarté et concision.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 11:44
Et ce serait encore différent si les lignes à supprimer n'étaient que celles dont la combinaison des valeurs de A et B se retrouvait sur une autre ligne, entre la colonne A et la colonne B
Tu vois ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 11:47
Ok excuse moi d'avoir mal formulé ma question.
Peux tu alors m'indiquer comment modifier mon code pour que cela fonctionne.
Pour le cas que tu expose c'était moins compliqué
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 12:05
Je veux bien, mais ...
Quel est donc le cas exact ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_slayer07 Messages postés 24 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 13:30
Supprimer toutes les lignes contenant en colonne A une des valeurs de la colonne B et vice-versa
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2012 à 13:36
Et si le cas 3 (éviter les doublons de combinaisons) : j'aurai forcément d'autres questions à te poser, car tu pourrais aller directement dans le mur, dans certains cas de figure.
Certains "cas de figure" ? ===>>> ouais ... par exemple (et j'espère que tu n'es pas dans ce cas là) : si tes "doublons" peuvent concerner les combinaisons de nom et prénom. Car moi, par exemple, je connais entre autres un Monieur Jean PIERRE et un Monsieur Pierre JEAN !
Erreur de conception (précipitation vers le développement au lieu de consacrer plus de temps à la conception) qui ne serait alors vraiment "rattrapable" sans aucune faille que si la casse du Prénom est différente de celle du nom !
Tu vois ?
Dis-nous tout, maintenant, si tu veux éviter mille et une questions et mille et une surprises.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous