bonjour TomR35,gmb,
@gmb, je pense que vous devez plutôt utiliser un filtre
Sub gmb()
Dim Arr, i, sp, x
reponse = "Pyro pro" 'la réponse pour le niveau
With Range("Tableau1").ListObject
With .Range
.AutoFilter
Select Case reponse
Case "Pyro Base": .AutoFilter 8, "Pyro Base" 'seulement "Base"
Case "Pyro Pro": .AutoFilter 8, "Pyro Pro Plus", xlOr, "Pyro Base" 'les 2
End Select
End With
With .DataBodyRange.Columns(100) '100 colonnes vers droite, plage temporaire comme brouillon
.FormulaR1C1 = "=subtotal(103,rc[-99])*rand()" 'seulement les visibles auront une valeur >0
Arr = Application.Transpose(.Value) 'lire ces données
.ClearContents
End With
.Range.AutoFilter 'déactiver filtre
End With
On Error Resume Next
For i = 1 To Application.Min(20, UBound(Arr)) 'supposons 20 questions
x = 0: x = WorksheetFunction.Large(Arr, i) 'les i plus grand.valeurs
If x > 0 Then r = Application.Match(x, Arr, 0): s = s & "," & r Else Exit For
Next
On Error GoTo 0
MsgBox "série aléatoire avec les numéros : " & Mid(s, 2)
If Len(s) = 0 Then sp = Split(s)
et puis ....
End Sub