Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Aide pour insertion nombre aléatoire

  • Initiateur de la discussion Initiateur de la discussion NONO14
  • 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 !

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:
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
 
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


Ami calmant, J.P
 
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

Dernière édition:
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

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.
 
- 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éponses
23
Affichages
2 K
Réponses
8
Affichages
1 K
Réponses
11
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…