Suppression de doublons sous excel

Résolu
Elnono94 Messages postés 13 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 6 décembre 2005 - 22 août 2005 à 16:21
Elnono94 Messages postés 13 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 6 décembre 2005 - 23 août 2005 à 17:26
Bonjour à tous,
Voila je souhaiterais savoir s'il existe
un code vba afin de supprimer des doublons.



exp:
A B
32050 220
32050 220
33100 250
34550 120
34550 120
34550 120


La colonne A contient des références et la colonne B des valeurs.
Il faudrait en fait que les doublons de la colonne B soient supprimés
ou remplacer par 0.

Merci pour votre aide

9 réponses

sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 3
23 août 2005 à 14:01
Voila mon brave,

Entre deux coup de dents dans le sandwich en fait le soluce est tout con, que voila:

Sub doublons()
Dim i, j, DBL, NBV
NBV = Application.CountA(Columns("A"))
For i = 1 To NBV
DBL = Cells(i, "A")
tval = Cells(i, "B")
For j = i + 1 To NBV
If LCase(Cells(j, "A")) = LCase(DBL) Then
If LCase(Cells(j, "B")) = LCase(tval) Then
Cells(j, "B") = "0"
End If
End If
Next j

Next i
End Sub

j'ai testé et cela fonctionne, bien entendu avant tu dois trié les deux colonnes

Courage à toi surtout.
Sacha
\!/
00
!
3
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 3
22 août 2005 à 16:54
Salut

ici tu as de quoi faire
http://www.vbfrance.com/forum.v2.aspx?id=167978

Sacha

\!/
00
!
0
Elnono94 Messages postés 13 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 6 décembre 2005
22 août 2005 à 17:45
Merci Sacha mais il reste un problème
Dans le code vba suivant (le plus approprié) :

Sub doublons()
'Ce code efface tout les doublons de la colonne B
Dim i, j, DBL, NBV
NBV = Application.CountA(Columns("B"))
For i = 1 To NBV
DBL = Cells(i, "B")
For j = i + 1 To NBV
If LCase(Cells(j, "B")) LCase(DBL) Then Cells(j, "B") "0"
Next j
Next i
End Sub

Le probleme c'est que celui-ci ne prend pas en compte les valeurs de la colonne A.
Du coup le code effecera automatiquement la valeur 120 qui se rapporte à la référence 34551 de la dernière ligne qui n'est pas un doubon...

A B
32050 220
32050 220
33100 250
34550 120
34550 120
34551 120

Comment faire pour pour se reporter à la colonne A afin que celui-ci détermine la bonne valeur à replacer ?
0
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 3
23 août 2005 à 08:43
Récapitulon,

Il faut supprimer les doublon colonne "B" si valeur unique dans la colonne "A"

Donc le résultat attendu est :
A B
32050 220
32050 0
33100 250
34550 120
34550 0
34551 120

j'ai justement une chtite fonction qui fait ca mais sur une variable tableau a 2 colonnes que je dois adapter
a ta spec.

Sacha

\!/
00
!
0

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

Posez votre question
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 3
23 août 2005 à 09:13
Voila

Sub doublons()
Dim i, j, DBL, NBV
NBV = Application.CountA(Columns("A"))
For i = 1 To NBV
DBL = Cells(i, "A")
For j = i + 1 To NBV If LCase(Cells(j, "A")) LCase(DBL) Then 'Cells(j, "A") "0" If LCase(Cells(j, "B")) LCase(Cells(j - 1, "B")) Then Cells(j, "B") "0"
End If
Next j

Next i
End Sub

Sacha

\!/
00
!
0
Elnono94 Messages postés 13 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 6 décembre 2005
23 août 2005 à 11:48
Salut Sacha
j'ai essayé la fonction sur un tableau contenant plusieurs variables,
il subsiste encore un probléme. En effet dés qu'il y a une suite de variables supérieur à 2, la fonction ignore le doublon :

Exp :

A B
32050 220
32050 0
32050 220 =====> la fonction ne reconnait pas la valeur comme un doublon
33100 250
34550 120
34550 0
34551 120

Peut-être peut-on à l'aide d'une boucle comparer les valeurs de la colonne A
avec la colonne B afin de déterminer les doublons.
0
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 3
23 août 2005 à 12:17
Salut Elnono,

évidement c'est logique vu que la valeur 220 est remplacée par un 0,
il faut juste crée une variable qui prendra en compte la 1 ere valeur de la colonne B au regard de A
dès que la valeur colonne A est différente de la précédente il faut réinitialisée cette variable.
sinon le plus simple est de lui faire récrire les valeurs dans la colonne cela donnera ceci

A B C
32050 220 220
32050 220 0
32050 220 0
33100 250 250
34550 120 120
34550 120 0
34551 120 120

après tu copie de C>B
voici le code "j'ai pas testé"

Sub doublons()
Dim i, j, DBL, NBV
NBV = Application.CountA(Columns("A"))
For i = 1 To NBV
DBL = Cells(i, "A")
For j = i + 1 To NBV
If LCase(Cells(j, "A")) = LCase(DBL) Then If LCase(Cells(j, "B")) LCase(Cells(j - 1, "B")) Then Cells(j, "C") "0"
Else
Cells(j,"C")=Cells(j,"B")
End If
Next j

Next i
End Sub

Si cette bidouille ne te conviend pas je te gratte la fonction mais ce sera pour demain matin, j'ai beaucoup de travail en ce moment.

Dis moi quoi que je ne gratte pas pour rien

Sacha
\!/
00
!
0
Elnono94 Messages postés 13 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 6 décembre 2005
23 août 2005 à 13:01
Je te remercie pour le temps consacré sacha.
Je te rassure si je demande de l'aide ce n'est pas pour rien !
Mon tableau Excel est déjà formaté au niveau des colonnes, par conséquent
il m'est impossible de lui faire rajouter une autre colonne afin de faire réécrire
à la fonction les valeurs.

Ne te presse pas, de toute façon ce n'est pas urgentissime.

Encore merci pour ton aide.
Bon courage !
0
Elnono94 Messages postés 13 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 6 décembre 2005
23 août 2005 à 17:26
J'ai donc appliqué la fonction et tout marche parfaitement.
Un grand MERCI à Sacha qui à pris de son temps afin de pouvoir m'aider.

Merci à VBfrance par la même occasion, ce site est très instructif !!!
0