générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

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 !

controlo

XLDnaute Occasionnel
Bonsoir ,

Je voudrais de l'aide afin que lorsque je clique sur un bouton qui appelle une macro.Celle-ci me génère un chiffre entre 1 et 4 , cela 4 fois de suite et sans que le même chiffre sorte 2 fois.J'ai fais un petit bout de code , mais le problème est que lorsque j'appuis sur mon bouton la macro ne me génère pas tout le temps un chiffre(quand je clique deux fois de suite le chiffre générer ne change pas) et je ne sais pas comment faire une boucle pour que l'opération se répète quatre fois.

Merci de votre aide

Dim a, b As Integer
a = Int((4 * Rnd) + 1)
If a = 1 Then
b = 579
ElseIf a = 2 Then
b = 610
ElseIf a = 3 Then
b = 642
ElseIf a = 4 Then
b = 677
End If
Range("A2") = b
Range("B6") = a
 
Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

Bonjour,

Je ne suis pas sur d'avoir bien compris ta demande. Vois si le fichier joint correspond à tes attentes. Sinon, précise ce qui ne va pas.

VB:
Sub test()
Dim a As Integer, Liste1, Liste2, t As Integer
Liste1 = Array(1, 2, 3, 4)
Liste2 = Array(579, 610, 642, 677)
  Select Case Application.CountA(Range("A:A"))
   Case 0, 4
     Range("A:B").ClearContents
     t = 2
   Case Else
     t = Range("A100").End(xlUp).Row + 1
  End Select
  Randomize
  a = Int(4 * Rnd)
  Do While Application.CountIf(Range("B:B"), Liste1(a)) > 0
    a = Int(4 * Rnd)
  Loop
  Range("A" & t) = Liste2(a)
  Range("B" & t + 4) = Liste1(a)
End Sub
 

Pièces jointes

Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

Bonjour Softmama ,

Merci pour ton morceau de code qui m'a beaucoup aidé et auquel j'ai apporté quelques modifications ( désolé).Mais le point qui bloque maintenant est de pouvoir attribué le chiffre aléatoire généré a chaque fois à une cellule différente , et pas forcément de la même feuille,à chaque fois .Si tu peux m'aider STP.Seuls les chiffres de la liste 2 m'intéresse.

Sub test()
Dim a As Integer, Liste1, Liste2, t As Integer
Dim x As Integer
For x = 1 To 16
Liste1 = Array(1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
Liste2 = Array(579, 585, 591, 597, 603, 610, 616, 622, 629, 635, 642, 649, 656, 663, 670, 677)
Select Case Application.CountA(Range("A:A"))
Case 0, 16
Range("A:B").ClearContents
t = 1
Case Else
t = t + 1
End Select
Randomize
a = Int(16 * Rnd)
Range("A" & t) = Liste2(a)
Next x
End Sub
 
Dernière édition:
Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

Softmama ,

Je veux par exemple mettre le chiffre (généré de façon aléatoire) 591 (de la liste 2 en rapport au3 de liste 1) dans la cellule G34 de la feuille 2, puis le 597 généré par la liste 1 en j29 de la feuille 3.Cela se répétant pour les 16 valeurs des deux listes et se faisant en même temps.

Merci de ton aide
 
Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

re,

D'accord, mais comment sont choisies les feuilles et les cellules ???
Au hasard complet ?? La macro doit elle choisir une cellule vide pour y mettre le résultat ??
Tous les 16 clics, les feuilles doivent-elles être effacées ??
En 1 clic, la macro doit elle choisir et placer 16 chiffres d'un coup ou 1 par clic comme je te l'avais fait ???
Il manque beaucoup de précisions pour que je puisse t'aider.

L'idéal serait de mettre un fichier exemple avec détaillé étape par étape ce que tu souhaites comme résultat, après un clic sur le bouton et après le 2ème clic...
 
Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

re ,

Ci-joint un exemple de feuilles excel que je dois remplir en un clic par les chiffres contenus dans la liste 2.Je doit remplir les cellules qui ont pour entête A et à la ligne HV0.5Soit environ 22 cellules doivent être remplies d'un seul coup et par un chiffre aléatoire de la liste 2.Mais comme je n'ai que 16 chiffres et que j'ai 22 cellules je sais que des chiffres seront en doublon mais ce n'est pas grave.
 

Pièces jointes

Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

Re (Bonjour néné06)

Alors je t'ai fait un exemple, tu devrais pouvoir l'adapter à ton besoin.
VB:
Sub test()
Dim c As Range, Liste2
Liste2 = Array(579, 585, 591, 597, 603, 610, 616, 622, 629, 635, 642, 649, 656, 663, 670, 677)
With Sheets("Data").Range("C2:C" & Ubound(Liste2) + 2)
  Set c = Sheets("Data").Range("A2")
  .Value = Application.Transpose(Liste2)
  .Offset(, 1).Formula = "=rand()"
  .Offset(, 1).Value = .Offset(, 1).Value
End With
Range("D2").Sort Key1:=Range("D1"), order1:=xlAscending, header:=xlYes
Do Until c = ""
  Sheets(Split(c, "!")(0)).Range(Split(c, "!")(1)) = c.Offset(, 2)
  Set c = c.Offset(1)
Loop
End Sub

Un clic sur le bouton remplira toutes les cellules d'un coup sans doublons.

Je passe par une feuille de données (DATA) qui peut être masquée. Il te reste à entrer les adresses de tes 16 cellules dans la colonne A pour que cela fonctionne.
 

Pièces jointes

Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

Re ,

Ton exemple fonctionne bien , mais j'ai du mal à comprendre, surtout d'ou viennent les chiffres dans la colonne D.Et je voudrais savoir comment passer de 16 valeurs à 22.En un mot je suis nul et je ne comprend pas.

Merci
 
Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

re,

vois le fichier joint,
je tiens compte désormais qu'il y a plus de cellules que de nombres à placer, du coup je mélange aussi les adresses en colonne A.
J'ai essayé de donner des explications sur la méthode :
VB:
Sub test()
Dim c As Range, Liste2

'liste des nombres à répartir dans les cellules de la colonne A
Liste2 = Array(579, 585, 591, 597, 603, 610, 616, 622, 629, 635, 642, 649, 656, 663, 670, 677)

'c est la plage A2 au départ
Set c = Feuil1.Range("A2")

'Pour toutes les cellules de D2 à Dxx où xx est le nombre de valeurs dans ta Liste2 +2
With Feuil1.Range("D2:D" & UBound(Liste2) + 2)
  'On copie liste2 dans ces cellules en colonne C
  .Value = Application.Transpose(Liste2)
  ' en colonne E, on met un nombre aléatoire (entre 0 et 1)
  .Offset(, 1).Formula = "=rand()"
  'dont on ne garde que le nombre et pas la formule : ainsi en colonne E on a des nombres aléatoire entre 0 et 1
  .Offset(, 1).Value = .Offset(, 1).Value
End With
'Je trie la colonne E par ordre croissant, du coup, l'ordre des colonnes D est modifié (ça mélange les entrées)
Range("D2").Sort Key1:=Range("E1"), order1:=xlAscending, header:=xlYes

'Même opération que la colonne E sur la colonne B (pour mélanger la colonne A) :
With Range("B2:B" & Range("A10000").End(xlUp).Row)
  .FormulaR1C1 = "=Rand()" 'on met des nombres entre 0 et 1 par formule
  .Value = .Value 'on garde que les valeurs, pas les formules
End With
'Puis on trie sur l'ordre des nombres aléatoires de la colonne B, pour ordonner la colonne A
Range("A2").Sort Key1:=Range("B1"), order1:=xlAscending, header:=xlYes

'depuis la cellule c (A2), tant qu'elle est pas vide
Do Until c = ""
  'copie la valeur de la colonne D, à l'adresse de la cellule c
  Sheets(Split(c, "!")(0)).Range(Split(c, "!")(1)) = c.Offset(, 3)
  'on descend la cellule c d'une ligne
  Set c = c.Offset(1)
Loop

End Sub
 

Pièces jointes

Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

re, Softmama


J'ai adapté ton exemple à mes besoins, mais cela ne marche pas.Comme tu peux le voir dans le fichier joint je voudrais écrire une valeur aléatoire tirée de la feuille "popo" dans la feuille ME88 et dans la cellule W36.A tu une idée.

Merci de ta collaboration !!!!
 

Pièces jointes

Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

re,

Oui, il manquait une ligne dans le code pour que cela marche dans ce cas là :
VB:
  .Resize(10000).ClearContents

Cf. fichier joint
 

Pièces jointes

Re : générer un chiffre aléatoire entre 1 et 16 a chaque fois que j'appelle une macro

Bonjour Softmama,

Encore une question pour en terminer, je ne comprend pas pourquoi dans ton code il est fait référence à une feuil 1 alors qu'il n'y a pas de feuil1 dans le classeur.Peux tu me dire à quoi sert la ligne que tu as rajouté dans ton précédent message.

Merci pour ta réponse
 
Dernière édition:
- 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

A
Réponses
72
Affichages
8 K
Anais0998
A
C
Réponses
1
Affichages
1 K
C
A
Réponses
15
Affichages
9 K
anthony0903
A
P
Réponses
11
Affichages
3 K
pa44pa28
P
N
Réponses
13
Affichages
3 K
N
V
Réponses
4
Affichages
2 K
VBdébutant
V
Retour