Sub Tirage()
Dim NbL As Long, Réponse, Début As Long, i As Long, j As Long, k As Long
'Nombre de ligne du tableau "tb_ListeAlpha"
NbL = Sh_Candidats.[tb_ListeAlpha].Rows.Count
'Effacement des N° ANO précédents
Sh_Candidats.[tb_ListeAlpha[ANO]].ClearContents
'Tri dans l'ordre alphabétique + Date de naissance
With Sh_Candidats.ListObjects("tb_ListeAlpha").Sort
.SortFields.Clear
.SortFields.Add Key:=Sh_Candidats.[tb_ListeAlpha[Nom]], SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Sh_Candidats.[tb_ListeAlpha[Prénom]], SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Sh_Candidats.[tb_ListeAlpha[Date de Naissance]], SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
'Demande du N° de Début de série
Réponse = Application.InputBox(Title:="Affectation des N° d'anonymat : Début de série", Prompt:="saisir un nombre entier :", Type:=1)
If Réponse = False Then Exit Sub
Début = CLng(Réponse)
ReDim Temp(1 To NbL)
ReDim TbRés(1 To NbL, 1 To 1)
With UsF_Barre
'Affichage de la barre d'avancement (non modal)
.Show vbModeless
'Remplir le tableau Temp avec la suite des N°
For i = 0 To NbL - 1
Temp(i + 1) = Début + i
Next i
'Remplir TbRés dans un ordre aléatoire
For i = NbL To 1 Step -1
k = Int((i) * Rnd + 1)
TbRés(i, 1) = Temp(k)
For j = k To i - 1
Temp(j) = Temp(j + 1)
Next j
ReDim Preserve Temp(1 To i)
'Mise à jour de la barre d'avancement
Avancement = Int((NbL - i + 1) / NbL * UsF_Barre.Lbl_Fond.Width)
.Lbl_Avancement.Width = Avancement
.Caption = "Avancement " & Int(Avancement / 500 * 100) & "% - " & i
DoEvents
Next i
'Coller les N° dans le tableau "tb_ListeAlpha"
Sh_Candidats.[tb_ListeAlpha].Columns(1) = TbRés
.Hide
End With
Unload UsF_Barre
End Sub