Numérotation automatique avec gestion de doublon

Bonjour,

Je souhaiterais effectuer une numérotation automatique sur ma colonne ID par rapport à ma colonne Nom. Mon besoin serait d'affecter une seule et même valeur pour UN nom. Chaque mois j'ajoute des noms à ma colonne et je voudrais que les noms qui reviennent aient le même ID qu'auparavant et que les nouveaux aient un nouvel ID.

J'arrive à numéroter automatiquement avec ce code :

Cells("premiere cellule vide).Select

ActiveCell.FormulaR1C1 = "1"

Cells("cellule suivante).Select

ActiveCell.FormulaR1C1 = "=IF(RC[" & Index & "]=R[-1]C[" & Index & "],R[-1]C,R[-1]C+1)"

Selection.AutoFill Destination:=Range("plage voulue")

mais je ne sais pas comment m'y prendre pour que les anciens noms se retrouvent avec le même ID.

Merci d'avance.

113test.xlsx (8.83 Ko)

Bonjour

Tu peux essayer

Option Explicit

Sub Numerote()
Dim DerLig As Long

  DerLig = Range("B" & Rows.Count).End(xlUp).Row
  With Range("A2:A" & DerLig)
    .Formula = "=IF(COUNTIF($B$1:B1,B2)>0,INDEX($A$1:B1,MATCH(B2,$B$1:B1,0),1),MAX($A$1:A1)+1)"
    .Value = .Value
  End With
End Sub

Merci beaucoup pour ton aide.

Encore une demande :s . Je voudrais maintenant entrer les deux colonnes concernées en variable car des colonnes supplémentaire peuvent être ajoutées entre les deux.

je repère par exemple la colonne "id" avec une boucle for et je récupère le nom de la colonne avec lettre_col = Split(ActiveCell.Address, "$")(1). Mais lorsque je remplace le "B" dans " Range("B" & Rows.Count).End(xlUp).Row " par lettre_colonne, on me renvoie une erreur. Quelle syntaxe dois-je utiliser? De même pour les " $A$1:B1 " et "$B$1:B1".

Encore merci d'avance.

Bonjour

Pas trop testé (je dois sortir)

Option Explicit

Sub Numerote()
Dim DerLig As Long
Dim Col_Id As Integer
Dim Col_Nom As Integer
Dim Cel As Range

  Set Cel = Rows(1).Find(what:="id", LookIn:=xlValues, lookat:=xlWhole)
  If Not Cel Is Nothing Then
    Col_Id = Cel.Column
  Else
    MsgBox "La colonne ""id"" n'a pas été trouvée"
    End
  End If

  Set Cel = Rows(1).Find(what:="nom", LookIn:=xlValues, lookat:=xlWhole)
  If Not Cel Is Nothing Then
    Col_Nom = Cel.Column
  Else
    MsgBox "La colonne ""nom"" n'a pas été trouvée"
    End
  End If

  DerLig = Cells(Rows.Count, Col_Nom).End(xlUp).Row
  With Range(Cells(2, Col_Id), Cells(DerLig, Col_Id))
    .Formula = "=IF(COUNTIF(R1C" & Col_Nom & ":R[-1]C" & Col_Nom & ",RC" & Col_Nom & _
        ")>0,INDEX(R1C" & Col_Id & ":R[-1]C" & Col_Nom & ",MATCH(RC" & Col_Nom & ",R1C" & Col_Nom & ":R[-1]C" & Col_Nom & ",0),1),MAX(R1C:R[-1]C)+1)"
    .Value = .Value
  End With
 End Sub

Merci beaucoup , ça marche ! j'ai juste rajouté " Dim DerLig As Long " au dernière code.

Bonsoir

adi a écrit :

j'ai juste rajouté " Dim DerLig As Long " au dernière code.

Ne l'avais-je pas mis ?

Banzai64 a écrit :

Option Explicit

Sub Numerote()

Dim DerLig As Long

Dim Col_Id As Integer

Dim Col_Nom As Integer

Oups j'ai dû mal coller le code. Encore merci.

Re bonjour ,

La fonction marche parfaitement, mais je me rend compte que je dois appliquer cette fonction a un très grand nombre de lignes (10 000). Est-il possible de rendre l'exécution de la macro plus rapide ? Merci

Rechercher des sujets similaires à "numerotation automatique gestion doublon"