Remplacer une valeur en doublon par X

benji68

XLDnaute Nouveau
Bonjour,

j'ai un petit problème pour dédoublonner un fichier.
Je précise d'abord que c'est la première macro que j'essaie de faire (j'ai commencé à m'intéresser au VBA il y a 2 semaines et c'est la première macro dans laquelle je me lance).
J'ai pas mal cherché et j'ai trouver des scripts sur les forums (qui traitent les doublons avec des couleurs notamment) mais je ne parviens pas à les adapter avec des valeurs plutôt que des couleurs.

Ce fichier que je cherche à dédoublonner comporte plusieurs colonnes (dont N1, N2 et N3) sur plusieurs dizaines de milliers de lignes (leur nombre augmente dans l'année).

N1 : toutes les lignes ont une valeur, parfois en doublon
N2 : certaines lignes n'ont pas valeur
N3 : toutes les lignes ont une valeur (= durée en jours), elle dépend des valeurs de N1 et sont en doublon comme les valeurs de N1

exemple:

N1......N2.......N3
874565..11157....4
874565..11157....4
874566...........2
874567..11159....3
874568..11160....0
874570..11162....12
874570..11163....12
874570..11164....12
874571...........1
874572...........0
874573...........8
874573...........8
874576..11168....1


Au final, je cherche à calculer :
- le nombre de valeurs de N1 ayant une durée =0 jour, =1 jour et celles dont la durée est >1 jour
- sachant que l'on ne tient compte que des valeurs de N1 dédoublonnées et n'ayant pas de valeur en N2.

dans l'exemple ci-dessus ça ferait donc :
nombre de valeurs en N1 = 0 ==> 1
= 1 ==> 1
> 1 ==> 3

Je voulais procéder ainsi :
- supprimer les lignes pour lesquelles une valeur est renseignées en N2.
- trier la colonne N1 et supprimer les doublons
- compter en N3 le nombre de valeurs =0 , =1 , >1

Une partie de ce que j'ai fait marche, mais le traitement du fichier par la macro est trop lent.
J'ai donc changé la méthode, je ne supprime plus les lignes mais je remplace les valeurs de la colonne N2 par "X", et je voudrai aussi remplacer par "X" celles de la colonne N1 qui sont en doublon.
voici ce que cela donnerait (avec l'exemple précédent):

N1......N2......N3
874565..X.......4
X.......X.......4
874566..........2
874567..X.......3
874568..X.......0
874570..X.......12
X.......X.......12
X.......X.......12
874571..........1
874572..........0
874573..........8
X...............8
874576..X.......1


Il suffirait ensuite de compter les valeurs de N3 pour lesquelles N1<>"X" ET N2<>"X"

Mais je bloque sur la partie où je voudrais remplacer les doublons de N1 par "X".
Quelqu'un peut-il m'aider ? ou me suggérer une méthode plus efficace?
Merci !!!

pour le remplacement des valeurs de la colonne N2 par "X" j'utilise ce code :
Dim Cellule As Range
Dim Plage As Range
Set Plage = Range("B:B")
For Each Cellule In Plage
If Cellule Like "111*" Then Cellule = "X"
Next Cellule
 

Staple1600

XLDnaute Barbatruc
Re : Remplacer une valeur en doublon par X

Bonjour à tous

Benji68 (Bienvenue sur le forum)
Lire tout est la clé du succès.
Donc merci d'en tirer les conséquences.
(cliques sur l'image pour comprendre de quoi je parle ;))
NouvelleDiscuss.jpg
 

Pièces jointes

  • NouvelleDiscuss.jpg
    NouvelleDiscuss.jpg
    38.4 KB · Affichages: 67
  • NouvelleDiscuss.jpg
    NouvelleDiscuss.jpg
    38.4 KB · Affichages: 67

Victor21

XLDnaute Barbatruc
Re : Remplacer une valeur en doublon par X

Bonjour.

Pour m'en tenir au titre explicatif de votre message :
=si(nb.si(plage,critère)>0;"X";"votre choix").

Peut-être à adapter, car pas testé sur votre non(fichier).

PS : Bonjour, JM. Y'a un nid ?
 

job75

XLDnaute Barbatruc
Re : Remplacer une valeur en doublon par X

Bonjour benji68, JM, Patrick,

Mais je bloque sur la partie où je voudrais remplacer les doublons de N1 par "X".

En supposant que N1 est la colonne A :

Code:
Sub X()
Dim t, d As Object, i&, z
t = Range("A1", Range("A" & Rows.Count).End(xlUp)(2)) 'au moins 2 éléments
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t)
  z = t(i, 1)
  If z <> "" And d.exists(z) Then t(i, 1) = "X"
  d(z) = ""
Next
[A1].Resize(UBound(t)) = t
End Sub
La macro est très rapide, même sur plusieurs dizaines de milliers de lignes.

A+
 

job75

XLDnaute Barbatruc
Re : Remplacer une valeur en doublon par X

Re,

Notez que si l'on veut supprimer les doublons et les cellules vides c'est tout aussi rapide :

Code:
Sub Sup()
Dim t, d As Object, i&, z
t = Range("A1", Range("A" & Rows.Count).End(xlUp)(2)) 'au moins 2 éléments
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t)
  z = t(i, 1)
  If z <> "" Then d(z) = ""
Next
[A1].Resize(d.Count) = Application.Transpose(d.keys)
Range("A" & d.Count + 1 & ":A" & Rows.Count).ClearContents
End Sub
Application.Transpose fonctionne avec au maximum 65536 éléments.

Au delà utiliser :

Code:
Sub Sup1()
Dim t, d As Object, i&, z, a, b()
t = Range("A1", Range("A" & Rows.Count).End(xlUp)(2)) 'au moins 2 éléments
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t)
  z = t(i, 1)
  If z <> "" Then d(z) = ""
Next
a = d.keys
ReDim b(UBound(a), 0)
For i = 0 To UBound(a) 'transposition
  b(i, 0) = a(i)
Next
[A1].Resize(d.Count) = b
Range("A" & d.Count + 1 & ":A" & Rows.Count).ClearContents
End Sub
A+
 
Dernière édition:

benji68

XLDnaute Nouveau
Re : Remplacer une valeur en doublon par X

c'est impeccable ! merci job75 pour ces scripts.
Les 2 versions, avec suppressions ou avec remplacement, fonctionnent parfaitement et rapidement. C'est d'une grande aide pour moi.
Et merci aussi d'avoir pris le temps de lire mes explications, peut être un peu longues...

J'ai un autre problème pour lequel je vais continuer de chercher une solution mais je crois que je vais rapidement refaire un tour ici pour l'exposer.
Encore merci et à bientôt.
 

Staple1600

XLDnaute Barbatruc
Re : Remplacer une valeur en doublon par X

Bonsoir à tous

benji68
Merci pour ta politesse.
Cela fait chaud au cœur que tu ais pris le temps de nous saluer Victor21 et moi.
Souvent les nouveaux membres zappent des messages par précipitation ou inexpérience.
Mais c'est pas le cas ici. ;)
Et merci aussi pour le fichier que tu as joint ;)
 

benji68

XLDnaute Nouveau
Re : Remplacer une valeur en doublon par X

Bonsoir à tous

benji68
Merci pour ta politesse.
Cela fait chaud au cœur que tu ais pris le temps de nous saluer Victor21 et moi.
Souvent les nouveaux membres zappent des messages par précipitation ou inexpérience.
Mais c'est pas le cas ici. ;)
Et merci aussi pour le fichier que tu as joint ;)

Tu es donc autant touché par mon "impolitesse" que j'aurai pu l'être par ton accueil "chaleureux".
Ajouter des smileys ne rend pas plus cordiales ironie et condescendance.
Comme tu dis, lire tout est la clé du succès.
 

Staple1600

XLDnaute Barbatruc
Re : Remplacer une valeur en doublon par X

Bonjour à tous, Bonjour benji68

Où tu vois de la condescendance dans le message #2 ?
Je te souhaite la bienvenue et t'invite juste à joindre un fichier joint (comme le fait le site quand tu créées une discussion)
Ne pas apprécier mon humour ou mon ironie n’empêche pas de dire Bonjour ?
Et dans le message #6 ? Toujours pas de condescendance, non ?
Juste une copie d'écran en guise de conseil pour ceux qui ne connaissent pas cette fonctionnalité dans Excel.

Cet été, le nouveau membre sera rapidement susceptible et adepte de la lecture rapide, cela semble être dans l'ordre des choses.

PS: Je te souhaite toujours la bienvenue en espérant que pour ta prochaine question on aurai droit à un fichier joint.
En tout cas , tu peux compter sur moi et sur ma prose pour venir te dire Bonjour ;)
 

Discussions similaires

Réponses
3
Affichages
539

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG