Option Explicit
Sub ListeSansDoublon()
Dim TMains(), TAl() As Long, TTir(1 To 54, 1 To 1), L As Long, A As Long
TMains = Feuil2.[B4].Resize(13, 13).Value
InitListeAl TAl, 169
For L = 1 To 54
A = TAl(L)
TTir(L, 1) = TMains((A - 1) \ 13 + 1, (A - 1) Mod 13 + 1)
Next L
Feuil1.[B7].Resize(54).Value = TTir
End Sub
Sub InitListeAl(TAl() As Long, Optional ByVal NMax As Long, Optional ByVal Graine As Double)
Rem. ——— Garnit un tableau à une dimension base 1 de numéros sans doublon ou change aléatoirement l'ordre
' des numéros y étant déjà portés.
' Arguments :
' TAl : Le tableau à traiter.
' NMax: Numéro maxi. Si spécifié, le tableau est redimensionné TAl(1 To NMax), puis garni de numéros de 1 à NMax.
' Graine: Base de départ de la série. Si omis la série sera différente à chaque exécution.
Dim P As Long, R As Long, X As Long
If NMax >= 0 Then
ReDim TAl(1 To NMax): For P = 1 To NMax: TAl(P) = P: Next P
Else: NMax = UBound(TAl): End If
If Graine <= 0 Then Randomize Else Rnd -1: Randomize Graine
For P = NMax To 2 Step -1 ' echange
R = Int(Rnd * P) + 1: X = TAl(R): TAl(R) = TAl(P): TAl(P) = X
Next P
End Sub
Option Explicit
'variable de module conserve sa valeur entre deux appels de testmot()
'Premier = True si on a affiché un mot anglais à traduire
'Premier = false si on a affiché la traduction
Dim Premier As Boolean
Sub TestMot()
If Premier Then
'on affiche la traduction en utilisant directement les fonctions
'de Excel par le biais de Application.WorksheetFunction
Range("H2") = Application.WorksheetFunction.Index(Range("motfr"), _
Application.WorksheetFunction.Match(Range("G2"), Range("MotGB"), 0))
'la seconde étape (traduction affichée) est faite
Premier = False
Else
'on efface la traduction française précédente
Range("H2") = ""
'on affiche le mot anglais à traduire en utilisant directement les fonctions
'de Excel par le biais de Application.WorksheetFunction
Range("G2") = Application.WorksheetFunction.Index(Range("MotGb"), _
Application.WorksheetFunction.RandBetween(1, Range("MotGb").Rows.Count))
'la première étape (mot à traduite) est faite
Premier = True
End If
End Sub