XL 2010 Formule sur Numérotation de ligne

tinet

XLDnaute Impliqué
Bonjour le forum,




je cherche une formule pour indiquer dans mon tableau le nombre de lignes identiques, et les numéroter en ordre croissant.


Colonne A les Numéros identique
En colonne B la numérotation par ordre croissant
Les chiffres de la colonne A varient en termes de nombre

Exemple
A B
1 1
1 2
1 3
1 4
2 1
2 2
2 3
3 1
4 1
4 2
4 3
4 4
4 5

Etc. etc.
 

job75

XLDnaute Barbatruc
Bonjour tinet,

Le code VBA le plus simple (et le plus rapide) utilise la même formule :
Code:
Sub Numeroter()
With [A1].CurrentRegion
  If Rows.Count = 1 Then Exit Sub
  .Sort .Columns(1), xlAscending, Header:=xlYes 'tri avec en-têtes
  .Cells(2, 2).Resize(.Rows.Count - 1) = "=IF(RC[-1]<>R[-1]C[-1],1,N(R[-1]C)+1)"
  .Columns(2) = .Columns(2).Value 'supprime les formules, facultatif
End With
End Sub
Edit : j'ai ajouté la fonction N() en cas de titre en B1...

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Une formule plus simple et plus légère (en nombre d'octets) :
Code:
=(A2=A1)*N(B1)+1
ce qui donne en VBA :
Code:
Sub Numeroter()
With [A1].CurrentRegion
  If Rows.Count = 1 Then Exit Sub
  .Sort .Columns(1), xlAscending, Header:=xlYes 'tri avec en-têtes
  .Cells(2, 2).Resize(.Rows.Count - 1) = "=(RC[-1]=R[-1]C[-1])*N(R[-1]C)+1"
  .Columns(2) = .Columns(2).Value 'supprime les formules, facultatif
End With
End Sub
A+
 

Si...

XLDnaute Barbatruc
Bonjour

Job, « Ce qui est simple pour certains peut ne pas l’être pour d’autres et inversement. » ;).

L’outil Tableau permet de faciliter bien des choses (quand on le connait bien sûr)

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
  If R.Address <> [B1].Address Then Exit Sub
  [Tbo].Sort [Tbo].Item(1, 1), , Header:=1
  [Tbo].Item(1, 2).FormulaLocal = "=SI(A2=A1;B1+1;1)"
  [Tbo[B]] = [Tbo[B]].Value
End Sub

3 lignes, en dehors de l’appel qui peut se faire autrement, assez brèves non ?
 

Pièces jointes

  • DoubleNumérotation.xlsm
    109 KB · Affichages: 24

Si...

XLDnaute Barbatruc
Re

Tu as raison Job, avec un bouton d’appel, le code devient

VB:
Private Sub CommandButton2_Click()
    [Tbo].Sort [Tbo].Item(1, 1), , Header:=1
    [Tbo].Item(1, 2).FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],R[-1]C+1,1)"
    [Tbo[B]] = [Tbo[B]].Value
End Sub
 

Statistiques des forums

Discussions
311 737
Messages
2 082 036
Membres
101 878
dernier inscrit
1475214