Dans le répertoire du script, j'ai créé un sous-répertoire "\Images" contenant 12 images.
Le script hta
<html>
<body>
<input type = "BUTTON" value = "Changement d'images" onclick = "ChangeMap()"><br><br>
<Img name="Map_1"/><Img name="Map_2"/><Img name="Map_3"/><Img name="Map_4"/><br>
<Img name="Map_5"/><Img name="Map_6"/><Img name="Map_7"/><Img name="Map_8"/><br>
<Img name="Map_9"/><Img name="Map_10"/><Img name="Map_11"/><Img name="Map_12"/>
</body>
<script language = "VBScript">
Dim pathMap : pathMap = CreateObject("Wscript.Shell").CurrentDirectory & "\Images\"
Dim ArrayList : Set ArrayList = CreateObject("System.Collections.ArrayList")
Sub Window_Onload()
ResizeTo 800,600
End Sub
Sub ChangeMap()
Call LoadMap()
Dim icount, i,temp, irnd
icount = ArrayList.Count
Randomize
For i = 1 to icount
irnd = ((icount-i) * Rnd)
temp = ArrayList(icount-i)
Select Case i
Case 1 : Map_1.Src = ArrayList(irnd)
Case 2 : Map_2.Src = ArrayList(irnd)
Case 3 : Map_3.Src = ArrayList(irnd)
Case 4 : Map_4.Src = ArrayList(irnd)
Case 5 : Map_5.Src = ArrayList(irnd)
Case 6 : Map_6.Src = ArrayList(irnd)
Case 7 : Map_7.Src = ArrayList(irnd)
Case 8 : Map_8.Src = ArrayList(irnd)
Case 9 : Map_9.Src = ArrayList(irnd)
Case 10 : Map_10.Src = ArrayList(irnd)
Case 11 : Map_11.Src = ArrayList(irnd)
Case 12 : Map_12.Src = ArrayList(irnd)
End Select
ArrayList(icount-i) = ArrayList(irnd)
ArrayList(iRnd) = temp
Next
End Sub
Sub LoadMap()
ArrayList.Clear
For Each file in CreateObject("Scripting.FileSystemObject").GetFolder(pathMap).Files
ArrayList.Add file.path
Next
End Sub
</script>
</html>
Résultat :
A chaque reload, les images sont mélangées et sans doublon.
En espérant que cet exemple puisse servir à Narfolius.
Option Explicit
Dim aImages, icount, Result, i , iRnd
aImages = Array("image1.png","image2.png","image3.png","image4.png","image5.png", _
"image6.png","image7.png","image8.png","image9.png","image10.png")
icount = UBound(aImages)+1
ReDim aTabSeries(icount)
ReDim aSuites(icount)
Randomize
For i = 1 To icount
aTabSeries(i) = i
Next
'on créé le tableau de résultat en "désactivant" ceux trouvés
For i = 1 To icount
aSuites(i) = 0
While aSuites(i) = 0
iRnd = Int(icount * Rnd) + 1
If aTabSeries(iRnd) <> 0 Then
aSuites(i) = aTabSeries(iRnd)
aTabSeries(iRnd) = 0
Result = Result & aImages(CStr(aSuites(i))-1) & vbCr
End If
Wend
Next
MsgBox Result,,"Images mélangées"
Bonjour,
Je ne comprends pas la nécessité de passer par autre chose (liste, autres tableaux, collection, etc ...) que le tableau de départ.
Il suffit de faire des permutations sur le tableau lui-même ==>> exemple ===>>
Cà, c'est une autre paire de manches : comment marche le rnd de vbs (ses défauts et ses remèdes). Je n'ai pas vbs sur ma machine et ne le connais pas.
Ce problème est autre et serait donc le même dans vos exemples également.
Le problème avec le dernier script, c'est que j'aimerai que ça s'affiche dans un tableau après avoir cliqué sur un bouton 'Tirer au sort' sur une page hta.
Il serait souhaitable de potasser la doc "Visual Basic Scripting Edition".
Celle-ci indique que l'instruction ReDim permet de déclarer des variables de tableau dynamique et l'argument Preserve permet de conserver les données d'un tableau existant au changement de taille de la dernière dimension de ce même tableau.
21 oct. 2015 à 00:38
J'étais partie sur ton idée de ce matin et là je vois ton script ...
C'est exactement ce que je recherchais !
Parfait, un grand merci !
21 oct. 2015 à 08:54
21 oct. 2015 à 10:19