XL 2016 Tirage au sort liste élèves

kachou

XLDnaute Nouveau
Bonjour,
Je voudrais utiliser la macro tirage au sort à partir d'une liste de noms, le fichier joint fonctionne bien sauf que sur 30 noms, seulement 29 apparaissent. Merci pour votre aide.
 

Pièces jointes

  • Modele-Sorteo (1).xlsm
    21.2 KB · Affichages: 38
Solution
je ne peux que deviner ce que tu as entre les mains.
Et si ce que je devine est exact, celui qui a écrit ce code est un rhinocéros infirme.
Que ferait ceci :
VB:
Sub Tombola()
    Dim Aleatorio As Integer, plage As Range, x As Integer
     Set plage = Sheets("Hoja2").Columns(1)
     With Sheets("Hoja2").Columns(1)
       x = WorksheetFunction.CountA(plage)
       If x > 0 Then
          Aleatorio = WorksheetFunction.RandBetween(1, x)
            Range("C7") = .Range("A" & Aleatorio).Value
            .Range("A" & Aleatorio).EntireRow.Delete
        Else
          MsgBox "Se han acabado los números"
          .Cells(1, 1).Value = 1
          .DataSeries xlColumns, Stop:=30
    End If
     End With
End Sub

Sans préjudice de la...

jmfmarques

XLDnaute Accro
Bonjour
Je n'ouvre jamais un classeur tiers et n'ai donc pas ouvert le tien.
Mon petit doigt me dit toutefois qu'il est vraisemblable que tu ecxtrait un nombre aléatoire entre deux limites et que tu n'extrais rien si la limite inférieure est atteinte.
C'est là une maladresse. Tu ne dois rien extraire que si plus rien dans une liste et pas au moment où il n'y reste qu'un article.
 

kachou

XLDnaute Nouveau
Merci pour ton aide JMF,
N'étant pas un expert, je te montre la macro récupérée et en espagnol !!

Sub Tombola()

Dim Aleatorio As Integer

Dim Resultado As Integer

Dim x As Integer

x = Sheets("Hoja2").Range("A" & Cells.Rows.Count).End(xlUp).Row

Aleatorio = WorksheetFunction.RandBetween(1, x)

If x <> 1 Then

With Sheets("Hoja2").Cells(Aleatorio, 1)

Range("C7") = .Value

'Borra esta línea si no quieres que se registren los números que van saliendo en la columna A.
Range("A100").End(xlUp).Offset(1) = .Value

.Delete Shift:=xlUp

End With

Else

MsgBox "Se han acabado los números"

With Sheets("Hoja2").Range("A1")

.Value = 1

.DataSeries xlColumns, Stop:=30

End With

End If

End Sub

Encore merci pour ton coup de main !
 

jmfmarques

XLDnaute Accro
je ne peux que deviner ce que tu as entre les mains.
Et si ce que je devine est exact, celui qui a écrit ce code est un rhinocéros infirme.
Que ferait ceci :
VB:
Sub Tombola()
    Dim Aleatorio As Integer, plage As Range, x As Integer
     Set plage = Sheets("Hoja2").Columns(1)
     With Sheets("Hoja2").Columns(1)
       x = WorksheetFunction.CountA(plage)
       If x > 0 Then
          Aleatorio = WorksheetFunction.RandBetween(1, x)
            Range("C7") = .Range("A" & Aleatorio).Value
            .Range("A" & Aleatorio).EntireRow.Delete
        Else
          MsgBox "Se han acabado los números"
          .Cells(1, 1).Value = 1
          .DataSeries xlColumns, Stop:=30
    End If
     End With
End Sub

Sans préjudice de la remise en cause même d'autres choses (à commencer par la nécessité d'une feuille "hojas2", à remplacer avantageusement par un simple array)
 

kachou

XLDnaute Nouveau
J'imagine la tête du rhinocéros infirme !!!!
Je ne peux que te remercier vivement, ta proposition est exactement ce que je rechercher !!
Il ne me reste plus qu'à l'utiliser à bon escient.
Merci et au plaisir de profiter à nouveau de tes compétences.
Bonne journée.
 

Statistiques des forums

Discussions
312 201
Messages
2 086 171
Membres
103 152
dernier inscrit
Karibu