Microsoft 365 Aide pour insertion nombre aléatoire

NONO14

XLDnaute Impliqué
Bonjour à tous,

A l'aide d'un tuto trouvé sur internet, j'ai mis en place ce petit bout de code qui me permet de générer un nombre aléatoire compris entre 1 et 2000.
Ce nombre me sert à attribuer un code à des collaborateurs. Pour le moment, je génère ces nombre à partir d'un clique sur un bouton et celui-ci s'affiche dans une MsgBox.
Ce que je souhaiterai faire, si c'est possible, ce que le nombre généré se positionne en A2, le prochain en A3, etc...
Auriez-vous une idée de faisabilité ?
Merci par avance pour votre aide
Le code est placé dans un module
VB:
Sub Aleatoire()
    Randomize
        nombre_alea = Int((2000 * Rnd + 1))
MsgBox nombre_alea
End Sub

J'ai modifié le code ci-dessus qui me permet d'insérer le nombre en D2 de la feuille.
Mais je ne sais pas comment lui dire d'aller chercher la prochaine cellule vide ensuite, c'est-à-dire D3 et ainsi de suite
VB:
Sub Aleatoire()
    Randomize
        nombre_alea = Int((2000 * Rnd + 1))
Cells(2, 4) = nombre_alea
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
maintenant je peux expliquer pourquoi nous les barbatruc utilisons des codes a faire transpirer les débutant
reprenons mon code que tu a choisi pour solution
il est fonctionnel oui je te l'accorde mais....

defaut 1:
le min et max est dans la sub elle même (donc code non recyclable)
si on veut changer le min et ou max ,il faut aller dans le code

defaut 2
le return(nombre_alea) prend directement un nombre aléatoire
pour un tirage unique c'est bien mais plusieurs on risque le doublon

defaut 3
conséquence directe du defaut n°2
on est obligé de tester le réceptacle(une plage ou un array) pour voir si il n'a pas deja été tiré

defaut 4
ici dans cet exemple on travaille dans une colonne la "D" donc une plage
et donc du aux consequences du defaut 2 et 3 on cherche avec un find le numero choisi ce qui va devenir de plus en plus lourd en graduation exponentielle et donc plus long à s'executer
c'est a dire plus on va faire de tirage (10,20,30,,,100,200,etc....)plus on a de chance de déclencher l’étiquette (re:)

voila tu sais tout
 

jurassic pork

XLDnaute Occasionnel
Hello,
je vais mettre aussi mon grain de sel dans la discussion. Voici une méthode qui utilise une ArrayList pour éviter les doublons.
VB:
Sub GenNum(Target As String, Max As Integer, NbNombres As Integer)
Dim NumAleas As Object, i As Integer, randNum As Integer
Set NumAleas = CreateObject("System.Collections.ArrayList")
Randomize
For i = 0 To NbNombres - 1
    Do
       randNum = (1 + Rnd * (Max - 1))
    Loop While NumAleas.IndexOf(randNum, 0) <> -1
    NumAleas.Add randNum
Next
ActiveSheet.Range(Target).Resize(NumAleas.Count, 1).Value = WorksheetFunction.Transpose(NumAleas.ToArray)
End Sub

Sub Test()
    GenNum "A1", 10, 10
    GenNum "B1", 1000, 10
    GenNum "C1", 25, 5
End Sub

GenNum génère NbNombres nombres de 1 à Max et met le résultat à partir de la cellule Target
NbAleas.png


Ami calmant, J.P
 

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous,
Merci beaucoup pour vos partages d'idées et toutes mes excuses d'avoir tardé à vous répondre.
Voici mon fichier. Le MdP pour modification des cellules est "falaise", et pour modifier le fichier "RLC".
J'avoue être un peu perdu dans vos propositions qui sont assez complexes. Je suis loin d'avoir votre niveau en programmation.
patricktoulon, il me semble avoir déjà travaillé avec vous sur la mise en place d'une horloge, mais je ne me souviens plus très bien.
Merci à tous pour votre aide
 

Pièces jointes

  • Tablo_Heures.xlsm
    55.1 KB · Affichages: 3
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pour attribuer des codes formés de "FAL" suivi d'un nombre aléatoire compris entre 100 et 2099 comme le faisant votre expression Int(Rnd * 2000 + 100) en utilisant un ListeAléat :
VB:
Sub Aleatoire()
   Dim LAt As New ListeAléat, TRésu(), L&
   Randomize
   LAt.Init 2000
   ReDim TRésu(1 To ActiveSheet.[B2002].End(xlUp).Row - 1, 1 To 1)
   For L = 1 To UBound(TRésu, 1)
      TRésu(L, 1) = "FAL" & LAt(L) + 99
      Next L
   ActiveSheet.[A2].Resize(UBound(TRésu, 1)).Value = TRésu
   End Sub
 

Pièces jointes

  • ListeAléatNONO14.xlsm
    63.5 KB · Affichages: 1

NONO14

XLDnaute Impliqué
Pour attribuer des codes formés de "FAL" suivi d'un nombre aléatoire compris entre 100 et 2099 comme le faisant votre expression Int(Rnd * 2000 + 100) en utilisant un ListeAléat :
VB:
Sub Aleatoire()
   Dim LAt As New ListeAléat, TRésu(), L&
   Randomize
   LAt.Init 2000
   ReDim TRésu(1 To ActiveSheet.[B2002].End(xlUp).Row - 1, 1 To 1)
   For L = 1 To UBound(TRésu, 1)
      TRésu(L, 1) = "FAL" & LAt(L) + 99
      Next L
   ActiveSheet.[A2].Resize(UBound(TRésu, 1)).Value = TRésu
   End Sub
Bonjour Dranreb et merci pour votre code. Cependant quelque chose m'ennuie un peu. En effet si j'ajoutes un agent, les codes sont tous modifiés et cela ne me convient pas, il est impératif de garder les codes déjà attribués. J'aurai du le préciser dans ma demande et je m'en excuses.
 

Discussions similaires

Réponses
32
Affichages
888
Réponses
8
Affichages
442

Membres actuellement en ligne

Statistiques des forums

Discussions
314 708
Messages
2 112 096
Membres
111 416
dernier inscrit
philipperoy83