Enum d
adInteger = 3
adDouble = 5
adDecimal = 14
adChar = 129
End Enum
Sub dysorthographie()
Sheets("Analyse").Range("A2:F100").Clear
While [Différence] = 0 Or Abs([Différence]) > 10
Donne
Wend
End Sub
Sub Donne()
'***********************************************************
' Ici on défini un Objet RecordSet qui nous servira de collection
' pour emmagasiner les données de la Feuil1!
' les chemps son respectivement
' Col(A)=Order,Col(B)=Name,Col(C)=Power
'------------------------------------------------------------
Dim Obj As Object: Set Obj = CreateObject("ADODB.Recordset") 'on creer la collection
Obj.Fields.Append "Order", adInteger, 4 'On ajoute le Champs Order colonne(A)
Obj.Fields.Append "Name", adChar, 50 'On ajoute le Champs Name colonne(B)
Obj.Fields.Append "Power", adDouble, 18.4 'On ajoute le Champs Power colonne(C)
Obj.Open 'on active la collecton
'***********************************************************************
' Même chose mais pour la restitution des valeur dans la feulle Analyse
'-------------------------------------------------------------------
Dim Joueur As Object: Set Joueur = CreateObject("ADODB.Recordset") 'on creer la collection
Joueur.Fields.Append "Order", adInteger, 4 'On ajoute le Champs Order colonne(A)
Joueur.Fields.Append "Name", adChar, 50 'On ajoute le Champs Name colonne(B)
Joueur.Fields.Append "Power", adDouble, 18.4 'On ajoute le Champs Power colonne(C)
Joueur.Fields.Append "Joueur", adInteger, 4 'On ajoute le Champs Joueur 1:2 colonne(D)
Joueur.Open 'on active la collecton
'*******************************************************************
' Initialisation de la collection Obj
'-------------------------------------------------------------------
With Sheets("Feuil1").Range("A2").CurrentRegion
For I = 2 To .Rows.Count 'de la ligne 2 à la ddernière ligne
If Trim("" & .Cells(I, "B")) <> "" Then 'si la cellul n'est pa vide alors
Obj.AddNew 'on ajoute un enregistrement à la collection
Obj("Order") = .Cells(I, "A") 'on place le contenu de la colonne(A) dans le champ(Order) de la collection
Obj("Name") = .Cells(I, "B") 'on place le contenu de la colonne(B) dans le champ(Name) de la collection
Obj("Power") = .Cells(I, "C") 'on place le contenu de la colonne(C) dans le champ(Power) de la collection
Obj.Update 'on charche len nouvel enregistrement dans la collection
End If
Next
End With
'--------------------------------------------------------------
Obj.MoveFirst 'on place la colletion sur le premier
Randomize Format(Timer, "0") 'j'initialise le rendom
'**************************************************************
' le tirage au sort ce fait sur un rendom de la collection Obj
' pour éviter toutes redondance chaque enregistrement tiré au sort
' serra affecté à la collection Joueur puis supprimer de la collection Obj
Dim H As Integer 'permet de calculer le pas type entre les gande et les petite valeur 10/242,6=4.12201154163232E-02
'on peut favoriser les Power les plus élever en filtrant de priférance sur les Orde Bas colonne(A)
'mais dance cas on défavorise un joueur au détrimen de lautre car l'écar est souvan supperreure à 8
Dim FIltreOrder As Integer
FIltreOrder = 2
For I = 1 To 7 'le trirage au sort ce fait sur la base de 7 N° sur les 33 retenu sur la Feuil1
FIltreOrder = FIltreOrder + 2
Obj.Filter = "Order<=" & FIltreOrder ' on applique un filtre sur Obj.Filter = "Order"
While Obj.EOF 'on ajuste le filtre
Obj.Filter = "Order<=" & FIltreOrder
FIltreOrder = FIltreOrder + 1
Wend
Obj.Move Int((Obj.RecordCount - 1) * Rnd) 'On tire au sort un valeur dans la collection Obj
Joueur.AddNew 'on ajoute un enregistrement à la collection Joueur
Joueur("Order") = Obj("Order") 'on affect ala colection Joueur("Order") la valeur de Obj("Order") Colonne(A)
Joueur("Name") = Obj("Name") 'on affect ala colection Joueur("Name") la valeur de Obj("Name") Colonne(B)
Joueur("Power") = Obj("Power") 'on affect ala colection Joueur("Power") la valeur de Obj("Power") Colonne(C)
Joueur("Joueur") = 1 'on afect le joueur 1 à Joueur("Joueur") Collone(D)
Joueur.Update 'on charche len nouvel enregistrement dans la collection
'.........................................................
'H repréente une plage de filtre entre Power du joueur1 et Power du joueur2 pour éviter un trop gran écart!
' par exeple
'1 | Peppermint boss | 242,6
'2 | Peppermint boss | 234,68
' Ici l'écart es de +/- 10
'32 | 25M Sage Hourglass | 3,53
'33 | 25M Sage Hourglass | 3,45
' alors que la il plus petit que 1
'...........................................................
P = Split(Obj("Power"), ",")(0) 'on garde la partie entière Obj("Power")
H = 4.12201154163232E-02 * Obj("Power")
Obj.Delete 'on suprime l'nregistrement della collection Obj
'on applique un filtre sur la collection Obj pour ne garder que les enregistrement
'situer dans une plage de valaures respectant au maximum l'éfaliter entre le joueur 1 et le joueur 2!
Obj.Filter = "Power>=" & (P - H) & " AND Power<=" & (P + H) 'on applique un filtre sur Obj.Filter = "Power" à +/- h de la valeur de P
While Obj.EOF 'on ajuste le filtre
Obj.Filter = "Power>=" & (P - H) & " AND Power<=" & (P + H)
H = H + 1
Wend
'...........................................................
Obj.MoveFirst 'on revier au premier enregistrmrnt del la collection filtré
Obj.Move Int((Obj.RecordCount - 1) * Rnd) '2xime tirage au sort un valeur dans la collection Obj filtré
Joueur.AddNew 'on ajoute un enregistrement à la collection Joueur
Joueur("Order") = Obj("Order") 'on affect ala colection Joueur("Order") la valeur de Obj("Order") Colonne(A)
Joueur("Name") = Obj("Name") 'on affect ala colection Joueur("Name") la valeur de Obj("Name") Colonne(B)
Joueur("Power") = Obj("Power") 'on affect ala colection Joueur("Power") la valeur de Obj("Power") Colonne(C)
Joueur("Joueur") = 2 'on afect le joueur 2 à Joueur("Joueur") Collone(D)
Joueur.Update 'on charche len nouvel enregistrement dans la collection
'.........................................................
Obj.Delete 'on suprime l'nregistrement della collection Obj
Obj.Filter = "" 'on supprime le filtre
Obj.MoveFirst 'on place Obj sur le prmier enregistrment
Joueur.MoveFirst 'on place Joueur sur le prmier enregistrment
DoEvents 'on permet à Windows de rafaichir sa mémore
Next
'*************************************************************
Joueur.Sort = "Order" 'on fai untri crossant sur Joueur("Order") colonne(A)
'onplace le contenu de la collection {RecordSet} dans la feulle Analyse
With Sheets("Analyse")
.Range("A2").CopyFromRecordset Joueur
.Range(.Range("D2"), .Cells(.Rows.Count, "D").End(xlUp)).NumberFormat = """JOUEUR"" 0"
End With
End Sub