1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
'action seulement en colonne E
If Not Intersect(Target, Columns(5)) Is Nothing Then
'les codes sont en colonne F (6 ème) à partir de la ligne 2
With ActiveSheet
Set Plage = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
'inscrit un nombre aléatoire de 12 chiffres
Target.Offset(0, 1) = NbAleatoire(Plage)
End If
End Sub
Function NbAleatoire(Plage As Range) As Double
Dim Dico As Object
Dim Result As Double
Dim I As Long
Set Dico = CreateObject("Scripting.Dictionary")
'récupère les codes déjà existants dans la plage
'si 1 code est en doublon, affiche une boite de message
'et la modif sera à faire à la "main"
For I = 1 To Plage.Count
If Dico.exists(Plage(I).Value) = False Then
Dico.Add Plage(I).Value, Plage(I).Value
Else
MsgBox "Attention, le nombre " & Plage(I).Value & " est en doublon en cellule " & Plage(I).Address(0, 0)
Exit Function
End If
Next I
'initialise
Randomize
'recherche un code unique
Do
Result = Int((1000000000000# * Rnd) + 1)
On Error Resume Next
Dico.Add Result, Result
Loop While Dico.exists(Result) = False
NbAleatoire = Result
End Function |
Partager