Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variabe DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim CEL As Range 'déclare la variable CEL (CEllule)
Dim TP As Variant 'déclare la variable TP (Tableau des Prénoms)
Dim T As String 'déclare la variable T (Temporaire)
Dim TT() As Variant 'déclare la variable TT (tableau Trié)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Worksheets("Cote") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, "A").End(xlUp).row 'définit la dernière ligne édité DL de la colonne A de l'onglet O
Set PL = O.Range("B3:B" & DL) 'définit la plage PL
TP = O.Range("I3").CurrentRegion 'définit le tableau des prénoms TP
'tie alphabétique des orénoms
For I = 1 To UBound(TP, 1) 'boucle 1 : sur tous les prénoms du tableau des prénoms TP
For J = 1 To UBound(TP, 1) 'boucle 2 : sur tous les prénoms du tableau des prénoms TP
'si I est différent de J est si le prénom I est supérieur au prénom J, inverse la position des prénoms dans TP
If I <> J And TP(I, 1) < TP(J, 1) Then T = TP(I, 1): TP(I, 1) = TP(J, 1): TP(J, 1) = T
Next J 'prochain prénom de la boucle 2
Next I 'prochain prénom de la boucle 1
ReDim Preserve TT(1 To UBound(TP, 1), 1 To 2) 'redimensionne le tableau trié TT (autant de lignes que TP en a, 2 colonne)
For I = 1 To UBound(TP, 1) 'boucle sur toutes les lignes du tableau trié TT
TT(I, 1) = TP(I, 1) 'récupère le prénom de TP dans la colonne 1 de TT
TT(I, 2) = I 'récupère I dans la colonne 2 de TT
Next I 'prochaine igne de la boucle
For Each CEL In PL 'boucle 1 : sur toutes les cellue CEL de la plage PL
For I = 1 To UBound(TT, 1) 'boucle 2 sur toutes les lignes I du tablrau trié TT
On Error GoTo suite 'gestion des erreurs, si la cellule CEL ne contient pas de commentaire (en cas d'erreur va à l'étiquette "suite")
If CEL.Comment.Text = TT(I, 1) Then CEL.Offset(0, 4).Value = TT(I, 2): Exit For 'si le commentaire de la cellue CEL est égal au prénom du tableau trié, renvoie le numéro dans la celllue en colonne F, sort de la boucle 2
Next I 'prochaine ligne de la boucle 2
suite: 'étiquette
Next CEL 'prochaine celule de la boucle 1
O.Range("A2").CurrentRegion.Sort O.Range("F2"), xlAscending, Header:=xlYes 'tri les données par rapport à la colonne F
O.Columns(6).ClearContents 'efface le contenu de la colonne F
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub