Doublon avec condition

arthur203

XLDnaute Junior
Bonjour,

Malgre tous les sujets abordes sur la suppression de doublons je n'ai pas trouve ce que je cherche ...

Je souhaiterai supprimer les doublons contenu dans la colonne A avec la condition de ne pas supprimer la ligne si dans la colonne C la valeur <> 0. Le probleme etant que parfois la valeur est 0.00000 ou 0,00 etc ...

Ci-joint un fichier pour plus de clarte merci de votre aide !
 

Pièces jointes

  • Doublon condition.xls
    13.5 KB · Affichages: 51

Efgé

XLDnaute Barbatruc
Re : Doublon avec condition

Bonjour arthur203

Une proposition:

VB:
Sub test()
Dim I&, D As Object
Set D = CreateObject("Scripting.dictionary")
With Sheets("Sheet1")
    For I = .Cells(.Rows.Count, 1).End(3).Row To 1 Step -1
        If CLng(Replace(.Cells(I, 3).Value, ".", ",")) * 1 = 0 Or D.Exists(.Cells(I, 2).Value) Then
            Rows(I).Delete
        Else
            D(.Cells(I, 2).Value) = ""
        End If
    Next I
End With
End Sub

Cordialement
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Doublon avec condition

Bonjour Arthur,
Le probleme etant que parfois la valeur est 0.00000 ou 0,00

le problème est:
dans ces cellules, le nombre est au format texte
il serait nécessaire de les remettre au format" nombre"
pour pouvoir tester cette valeur 0 dans la macro qui pourra alors supprimer les lignes

Attention aux cellules fusionnées dans la dernière colonne


à+
Philippe

Edit: Bonjour Efgé
 

arthur203

XLDnaute Junior
Re : Doublon avec condition

Bonjour Efgé,

Merci pour ta reponse qui marche pour l'exemple que j'ai donne. Mais pour mon fichier reel, j'ai une erreur sur la ligne suivante: Run time error '13' "Type mismatch"

If CLng(Replace(.Cells(I, 3).Value, ".", ",")) * 1 = 0 Or D.Exists(.Cells(I, 2).Value) Then

Bonjour PhLaurent,

Ayant + de 30000 lignes, je ne vois pas comment changer le format texte a numerique sans y passer un bon moment (?)

Merci a vous deux de vous pencher sur mon cas !
 

Efgé

XLDnaute Barbatruc
Re : Doublon avec condition

Re
Bonjour Philippe

@ arthur203
Au moment du "plantage", quand ta ligne est jaune, mets ton curseur sur le I, tu devrais voir sa valeur.
Ensuite regarde la cellule ligne I colonne C.
A tous les coups, cette cellule ne correspond à rien (vide ou texte ou .... )
Cordialement
 

Efgé

XLDnaute Barbatruc
Re : Doublon avec condition

Re
Avec ceci, tu verras en rouge les cellules en défaut:
VB:
Sub test_2()
Dim I&, D As Object
Set D = CreateObject("Scripting.dictionary")
Application.ScreenUpdating = False
On Error Resume Next
With Sheets("Sheet1")
    For I = .Cells(.Rows.Count, 1).End(3).Row To 1 Step -1
        If CLng(Replace(.Cells(I, 3).Value, ".", ",")) * 1 = 0 Or D.Exists(.Cells(I, 2).Value) Then
            If Err Then
                Err.Clear
                .Cells(I, 3).Interior.ColorIndex = 3
            Else
                .Rows(I).Delete
            End If
        Else
            D(.Cells(I, 2).Value) = ""
        End If
    Next I
End With
End Sub
Cordialement
 
Dernière édition:

arthur203

XLDnaute Junior
Re : Doublon avec condition

Re,

En effet, la cellule en question contenait des espaces j'ai utilise Trim pour enelever tous les espaces.

Maintenant un nouveau message d'erreur "Run-time error '6': Overflow " sur la meme ligne du code:

If CLng(Replace(.Cells(I, 3).Value, ".", ",")) * 1 = 0 Or D.Exists(.Cells(I, 2).Value) Then

"I" renvoit a la ligne 31026 qui contient cette valeur: 2594000000

Merci de m'aider !
 

Efgé

XLDnaute Barbatruc
Re : Doublon avec condition

Bonjour arthur203, le fil, le forum

La valeur semble trop importante pour une varaible de type "Long".
Essai ainsi :
If Replace(.Cells(I, 3).Value, ".", ",") * 1 = 0 Or D.Exists(.Cells(I, 2).Value)

cordialement
 

Discussions similaires

Réponses
26
Affichages
856
Réponses
22
Affichages
754

Statistiques des forums

Discussions
312 165
Messages
2 085 882
Membres
103 011
dernier inscrit
rine