Ajouter un numéro chronologique pour les doublons

miliev83

XLDnaute Occasionnel
Bonjour,

Est-il possible en cas de doublon d'ajouter à la fin de la valeur : "_" et un numéro chronologique ?

Voici la macro :

Code:
Sub test()
'ligne et colonne de debut d'ecriture
ligne = 1
colonne = 2
'mise sous forme de tableau de la liste
Tablo = Range("A1:A" & Range("A65536").End(xlUp).Row) ' a adapter pour la liste d'origine
'creation d'un dictionnaire contenant les noms et le nombre par nom
Set d = CreateObject("Scripting.dictionary")
For n = LBound(Tablo) To UBound(Tablo)
 x = Tablo(n, 1)
 d(x) = d(x) + 1
Next n
'ecriture du resultat
a = d.keys
b = d.items
For n = LBound(a) To UBound(a)
 For m = 1 To b(n)
  If b(n) > 1 Then
   Cells(ligne, colonne) = a(n) & m
  Else
   Cells(ligne, colonne) = a(n)
  End If
  ligne = ligne + 1
 Next m
Next n
End Sub

Il fonctionne mais je ne sais pas comment ajouter le "_" et il modifie l'ordre des noms or je souhaite absolument garder l'ordre des noms tel qu'ils sont écrit au départ

Merci par avance
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Ajouter un numéro chronologique pour les doublons

Bonsoir

Tu peux faire avec
=A1&SI(NB.SI(A$1:A$4;A1)>1;"_"&NB.SI(A$1:A1;A1);"")

si tu mets ta liste dans A1:A4, puis faire un collage spécial valeurs.

@ plus
 

CISCO

XLDnaute Barbatruc
Re : Ajouter un numéro chronologique pour les doublons

Bonjour

Pour ce qui est du _, tu peux faire dans la macro avec
Cells(ligne, colonne) = a(n) & "_" & m

Pour ce qui de garder l'ordre des noms initial, je regarde ce que je peux faire de ce pas...

@ plus
 

CISCO

XLDnaute Barbatruc
Re : Ajouter un numéro chronologique pour les doublons

Bonjour

Cf. une possibilité en pièce jointe. Tu pourras, ou d'autres personnes pourront certainement améliorer la macro, c-à-d en faisant tout avec du VBA, sans écrire des formules dans la colonne B, et sans définir le nom Plage dans le gestionnaire de noms.
Comme je ne sais pas le faire, et comme cela fonctionne, c'est déjà mieux que rien.

Cf. le code ci-dessous
Code:
Sub test2()
Range("B1").Select
ActiveCell.FormulaR1C1 = "=RC[-1] &IF(COUNTIF(Plage,RC[-1])>1,""_""&COUNTIF(R1C[-1]:RC[-1],RC[-1]),"""")"
Selection.AutoFill Destination:=Range("B1:B" & Range("A65536").End(xlUp).Row), Type:=xlFillDefault
Range("B1:B" & Range("A65536").End(xlUp).Row).Copy
Range("B1:B" & Range("A65536").End(xlUp).Row).PasteSpecial xlValues
End Sub

@ plus
 

Pièces jointes

  • incrémentation doublon.xlsm
    16.4 KB · Affichages: 37
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ajouter un numéro chronologique pour les doublons

Bonsoir à tous, CISCO :),

Un essai tout en vba:
VB:
Sub ESSAI()
Dim T, D, i&, e
  T = Range("A1:a" & Cells(Rows.Count, "a").End(xlUp).Row)
  Set D = CreateObject("scripting.dictionary")
  For i = 2 To UBound(T): D(T(i, 1)) = D(T(i, 1)) + 1: Next i
  For Each e In D.keys: D(e) = IIf(D(e) = 1, 0, D(e)): Next e
  For i = UBound(T) To 2 Step -1
    If D(T(i, 1)) > 0 Then _
      D(T(i, 1)) = D(T(i, 1)) - 1: T(i, 1) = T(i, 1) & "_" & (D(T(i, 1)) + 1)
  Next i
  Range("A1").Resize(UBound(T)) = T
End Sub
 

Pièces jointes

  • miliev83- incrémentation doublon- v1.xlsm
    16.3 KB · Affichages: 36
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Ajouter un numéro chronologique pour les doublons

Bonjour à tous

STP, mapomme, est-ce que tu pourrais mettre quelques commentaires dans ton code pour m'aider (nous aider) à comprendre comment cela fonctionne ?

@ plus
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ajouter un numéro chronologique pour les doublons

Bonsoir CISCO, miliev83,

(...) est-ce que tu pourrais mettre quelques commentaires dans ton code pour m'aider (nous aider) à comprendre comment cela fonctionne ? (...)

(...) pour l'explication je suis preneuse aussi (...)
Voir le fichier joint avec commentaires. Si je ne suis pas clair, me le dire...
 

Pièces jointes

  • miliev83- incrémentation doublon- v1 (commenté).xlsm
    20.2 KB · Affichages: 52
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Ajouter un numéro chronologique pour les doublons

Bonjour à tous,

Merci Mapomme pour tes commentaires avant et dans ta macro. J'ai à peu près compris la méthode, mais il faudra que je relise tes explications une ou deux fois encore.

Au passage, une question : Quel intérêt il y a t'il a dimensionner des variables etc au début de la macro sans préciser le type utilisé ?

@ plus
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ajouter un numéro chronologique pour les doublons

Bonjour à tous, CISCO,
(...) une question : Quel intérêt il y a t'il a dimensionner des variables etc au début de la macro sans préciser le type utilisé ? (...)

C'est une habitude prise tout petit quand j'ai commencé à prograbricolé avec des langages fortement typés.
Mais indépendamment de cela, je préfère déclarer les variables pour plusieurs raisons:

  • cela oblige à réfléchir à ce qu'on veut et va faire
  • même si la variable est variant, je le fais car c'est alors volontaire. Par exemple, déclarer une variable T pour accueillir les valeurs d'une plage de feuille de calcul
  • on détecte les fautes de frappe à la compilation (on utilise la variables Donnees à un endroit puis ailleurs on utilise Donnee)
  • je n'aime pas changer mes habitudes :eek:
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 140
Membres
103 129
dernier inscrit
Atruc81500