XL 2021 tirage aléatoire

  • Initiateur de la discussion Initiateur de la discussion Bruce68
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bruce68

XLDnaute Impliqué
Bonjour à tous
j'au créé un fichier excel pour extraire aléatoirement des chiffres que je veux ranger dans 10 colonnes .adjacentes.
quand la première colonne de 10 chiffres est pleine je veux passer à la suivante ainsi de suite, mais voilà je ne suis pas tellement copain avec for next, j'ai démarrer la macro ,maintenant je bute pour changer de colonne je cherche de l'aide pour la continuer.
je vous remercie de votre aide.
fichier ci joint
 

Pièces jointes

Bonjour Bruce,
Un essai en PJ avec :
Code:
Sub Num_alea1()
    Dim nombAleatoire%, L%, C%, N%
    Randomize
    'Nombre aléatoire entier entre 1 et 9___0 :
    nombAleatoire = Int(90 * Rnd) + 1
    MsgBox nombAleatoire
    ' Nombre de nombres déjà entrés
    N = Application.CountIf([B2:K11], ">0")
    ' On sort si le tableau est plein
    If N = 100 Then Exit Sub
    ' Détermination des lignes et colonnes de la première case vide
    C = Int(N / 10)
    L = N - 10 * C
    ' Calcul de L et C car le tableauc commence en 2,2 et non en 0,0
    C = C + 2: L = L + 2
    ' rangement du nombre
    Cells(L, C) = nombAleatoire
End Sub
 

Pièces jointes

Bonsoir à tous,

Pour le fun...

Trois procédures (au choix) pour remplir le tableau :
  • Num_alea1() => nombres aléatoires de 1 à 90 avec possiblement des doublons n'importe où
  • Num_alea2() => nombres aléatoires de 1 à 90 avec possiblement des doublons mais dans chaque colonne il n'y a aucun doublon
  • Num_alea3() => nombres aléatoires de 1 à 100 sans aucun doublon
Cliquez sur un des trois bouton.

A la place de la msgbox, une tempo pour faire joli 😛 . La vitesse d'affichage est ajustable via la constante ntempo en début de code (ntempo = 0 correspond à la vitesse la plus rapide).

Version v1a : correction mineure, l'intitulé dans la cellule M1 a été modifié.

Le code dans Module1 :
VB:
Const ntempo = 40

Sub Num_alea1()
' nombre aléatoire avec possiblement des doublons y.c. dans chaque colonne
Dim x, y
   Range("b2:k11").ClearContents
   Randomize
   For Each x In Range("b2:k11").Columns
      For Each y In x.Cells
         y.Value = 1 + Int(90 * Rnd)
         tempo ntempo
      Next y
   Next x
End Sub

Sub Num_alea2()
' nombres aléatoires  de 1 à 90 avec possiblement des doublons
' mais dans chaque colonne, il n'y a aucun doublon
Dim x, y, t(1 To 90), i&, j&, aux
   Range("b2:k11").ClearContents
   Randomize
   For i = 1 To 90: t(i) = i: Next
   For Each x In Range("b2:k11").Columns
      For i = 1 To 90: j = 1 + Int(Rnd * 90): aux = t(i): t(i) = t(j): t(j) = aux: Next
      i = 0
      For Each y In x.Cells: i = i + 1: y.Value = t(i): tempo ntempo: Next
   Next x
End Sub

Sub Num_alea3()
Dim x, y, t(1 To 100), i&, j&, aux
' nombre aléatoire avec aucun doublon dans le tableau
' tirage des nombres entre 1 et 100
   Range("b2:k11").ClearContents
   Randomize
   For i = 1 To 100: t(i) = i: Next
   For i = 1 To 100: j = 1 + Int(Rnd * 90): aux = t(i): t(i) = t(j): t(j) = aux: Next
   i = 0
   For Each x In Range("b2:k11").Columns
      For Each y In x.Cells: i = i + 1: y.Value = t(i): tempo ntempo: Next
   Next x
End Sub

Sub tempo(n&)
Dim i&, j&
   For i = 1 To n: For j = 1 To n: DoEvents: Next j, i
End Sub
 

Pièces jointes

Dernière édition:
Re à tous 🙂,

J'ai essayé d'être un peu original 🙄. Une méthode sans réitération de tirage pour éliminer les doublons des colonnes avec lecture directe du prochain numéro à afficher. C'est la première fois que je l'utilise. Chaque colonne n'a aucun doublon. Bon, c'est un peu pour mon fun.

On réinitialise le tirage si la grille est vide ou si la grille est pleine (sur demande dans ce cas).
VB:
Sub Num_alea2()
' nombres aléatoires  de 1 à 90 avec possiblement des doublons
' mais dans chaque colonne, il n'y a aucun doublon
Dim raz, pro, tir, t(1 To 90), r(1 To 10, 1 To 10), i&, j&, aux, k&
   i = Application.CountA(Range("b2:k11"))
   If i = 100 Then raz = MsgBox("La grille est complète, voulez-effacer le tirage et recommencer ?", vbYesNo)
   If raz = vbNo Then Exit Sub
   pro = [prochain]: tir = [tirage]: i = Application.CountA(Range("b2:k11"))
   If IsError([prochain]) Or IsError(tir) Or i = 0 Or i = 100 Then
      Range("b2:k11").ClearContents
      Randomize
      For i = 1 To 90: t(i) = i: Next
      For k = 1 To 10
         For i = 1 To 90: j = 1 + Int(Rnd * 90): aux = t(i): t(i) = t(j): t(j) = aux: Next
         For i = 1 To 10: r(i, k) = t(i): Next
      Next k
      ThisWorkbook.Names.Add "tirage", r
      ThisWorkbook.Names.Add "prochain", 1
   End If
   pro = [prochain] - 1: tir = [tirage]
   Range("b2:k11")(1, 1).Offset(pro Mod 10, Int(pro / 10)) = tir(1 + pro Mod 10, 1 + Int(pro / 10))
   ThisWorkbook.Names.Add "prochain", [prochain] + 1
End Sub
 

Pièces jointes

Bonjour le forum,

Rien d'original dans cette macro :
VB:
Sub Num_alea1()
'évite les doublons dans une colonne
Dim P As Range, c As Range, r%
    Randomize
    On Error Resume Next
    Set P = [B2:K11]
    Set c = P.Find("", P(P.Rows.Count, P.Columns.Count), , , xlByColumns, xlNext)
    Do
        r = Int(90 * Rnd) + 1
    Loop While Application.CountIf(Intersect(c.EntireColumn, P), r)
    c = r
End Sub
A+
 

Pièces jointes

Si l'on veut éviter que des doublons soient entrés manuellement dans une colonne du tableau mettre cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'évite les doublons dans une colonne du tableau
    Set Target = Intersect(Target, Range(adr))
    If Target Is Nothing Then Exit Sub
    Application.EnableEvents = False
    For Each Target In Target
        If Application.CountIf(Intersect(Target.EntireColumn, Range(adr)), Target) > 1 Then Target = ""
    Next
    Application.EnableEvents = True
End Sub
Et pour la macro du bouton dans Module1 :
VB:
Public Const adr As String = "B2:K11"'mémorise la variable

Sub Num_alea1()
Dim r As Range
    Randomize
    On Error Resume Next
    Set r = Range(adr)
    Set r = r.Find("", r(r.Rows.Count, r.Columns.Count), , , xlByColumns, xlNext)
    Do
        r = Int(90 * Rnd) + 1
    Loop While r = ""
End Sub
 

Pièces jointes

Bonsoir à tous
pour mapomme
J'ai essayé la macro
  • Num_alea3() => nombres aléatoires de 1 à 100 sans aucun doublon
  • la macro ne demarre pas elle s' arrette sur ntempo: next car je voudrais une macro sans doublon dans tableau
For Each x In Range("b2:k11").Columns
For Each y In x.Cells: i = i + 1: y.Value = t(i): tempo ntempo: Next
Next x
Je vous remercie pour votre aide
 
Bonsoir @Bruce68 😉,

N'ayant pas le fichier qui présente le défaut, je ne sais pas quoi diagnostiquer.

Avez-vous recopié dans votre classeur non seulement Num_alea3() mais aussi la procédure Sub tempo(...) à la fin du mon module et aussi la déclaration de la constante ntempo en début de code ?
 
bonjour mapomme et le forum
j'ai fais comme indiqué mais la macro ne démarre pas elle s'arrête sur randomise
j'aimerais bien une macro sans doublon
quant j'ouvre les fichiers joint excel désactive les macros et je n'arrive pas à les activer
même dans le fichier ci joint
merci pour toute l'aide
fichier ci joint
 

Pièces jointes

Bonjour @Bruce68 😉,

Voilà ce que j'ai fait :
  • J'ai rassemblé tout le code dans la module de la feuille "Feuil1" (tout était dans la classeur mais dans le désordre et dispersé)
  • Dans le code, il y a (au début du code) une déclaration de constante Const ntempo = 50.Vous pouvez modifiez la valeur de cette constante pour accroitre ou diminuer la vitesse d'affichage (0 => le remplissage sera rapide)
  • J'ai associé à Bouton 1 la macro Feuil1.Num_alea3
 

Pièces jointes

Bonjour @Bruce68 😉,

Voilà ce que j'ai fait :
  • J'ai rassemblé tout le code dans la module de la feuille "Feuil1" (tout était dans la classeur mais dans le désordre et dispersé)
  • Dans le code, il y a (au début du code) une déclaration de constante Const ntempo = 50.Vous pouvez modifiez la valeur de cette constante pour accroitre ou diminuer la vitesse d'affichage (0 => le remplissage sera rapide)
  • J'ai associé à Bouton 1 la macro Feuil1.Num_alea3
rebonjour mapomme et le forum
est il possible d'avoir cha
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Résolu(e)
Microsoft 365 DateDif()
Réponses
5
Affichages
172
  • Question Question
Microsoft 365 Insertion de photo
Réponses
14
Affichages
443
  • Question Question
Power Query Power Query
Réponses
26
Affichages
575
Retour