Microsoft 365 Nombre aléatoire ordre croissant dans une zone sélectionnée

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

wiwi520

XLDnaute Nouveau
Bonjour,

Je cherche un code en VBA pour générer des nombres dans un ordre croissant sur une colonne (A par exemple) de manière aléatoire et que cette macro s'applique sur une sélection que je ferais manuellement. En d'autres mots je veux que cette macro ne s'applique que sur les cellules que je sélectionne.
Par exemple:
Si je sélectionne les cellules (A1:A10) et j'active la commande macro, seules ces cellules afficheront des nombres croissants de manière aléatoire. Je pourrais aussi sélectionner les cellules (A3:A7), ou (A8 : A25) pour avoir le même résultat.

Alors j'ai jamais fait des macros.

Merci pour votre aide précieuse.
 
Bonjour

Un petit exemple tout simple
(Voir si cela t'inspire)
VB:
Sub Nombres()
Dim NBL&
Randomize 1600
NBL = Selection.Rows.Count
For i = 1 To NBL
Selection.Item(i) = Application.RandBetween(123, NBL + 1600)
Next
Selection.Sort Key1:=Selection.Item(1), Order1:=xlAscending
End Sub
Pour copier le code VBA
1) Dans Excel: ALT+F11 puis Insertion/Module
Et pour la suite voir les nombreux tutoriels sur le net.
 
Bonjour

Un petit exemple tout simple
(Voir si cela t'inspire)
VB:
Sub Nombres()
Dim NBL&
Randomize 1600
NBL = Selection.Rows.Count
For i = 1 To NBL
Selection.Item(i) = Application.RandBetween(123, NBL + 1600)
Next
Selection.Sort Key1:=Selection.Item(1), Order1:=xlAscending
End Sub
Pour copier le code VBA
1) Dans Excel: ALT+F11 puis Insertion/Module
Et pour la suite voir les nombreux tutoriels sur le net.

Merci de votre réponse.

Par contre j'ai oublié de préciser les nombres aléatoire doivent être compris entre 1 et 35.

Merci de votre retour
 
Bonjour
Je lis :
1)
Par contre j'ai oublié de préciser les nombres aléatoire doivent être compris entre 1 et 35.
2)
pour générer des nombres dans un ordre croissant
et
3)
Si je sélectionne les cellules (A1:A10) et j'active la commande macro, seules ces cellules afficheront des nombres croissants de manière aléatoire.
Ce qui a pour moi la conséquence suivante: si (par exemple et entre autres) 35 est le premier nombre tiré aléatoirement entre 1 et 35, seule sera remplie la celle A1
Aurais-je mal lu ? Te serais-tu mal ou incomplètement exprimé ?
 
Bonjour
Je lis :
1)

2)pour générer des nombres dans un ordre croissant
et
3)
Ce qui a pour moi la conséquence suivante: si (par exemple et entre autres) le premier nombre tiré aléatoirement entre 1 et 35, seule sera remplie la celle A1
Aurais-je mal lu ? Te serais-tu mal ou incomplètement exprimé ?

Bonjour,

En effet mon explication est peut être incomplète🙁 Je vais essayer de reformuler:

Mon objectif est d'afficher de manière aléatoire et dans un ordre croissant des nombres compris en 1 et 35 sur les cellules que je sélectionne manuellement.

Merci d'avance
 
Re

Oui, mais cela marche avec des doublons
Avec ce code ci-dessous remanié pour ta question (et issu des archives du forum), plus de doublons
Enrichi (BBcode):
Sub Nombre_Alea()
'source:Sub aleatoire [08/2015] - ROGER2327 / Magic_Doctor / job75

Dim dico As Object, i As Integer, NbLgn As Integer
Set dico = CreateObject("Scripting.Dictionary")
NbLgn = Selection.Rows.Count
Randomize
While dico.Count < NbLgn
dico(Round((35 - 1) * Rnd() + 1, 0)) = ""
Wend
Selection.Item(1).Resize(dico.Count) = Application.Transpose(dico.keys)
Selection.Item(1).Sort Key1:=Selection.Item(1), Order1:=xlAscending

End Sub
 
Re

Un légère adaptation de mon adaptation précédente 😉
(juste un peu d'élagage 😉)
VB:
Sub Nombre_Alea_II()
'souce:Sub aleatoire [08/2015] - ROGER2327 / Magic_Doctor / job75
Dim dk As Object, NbLgn&: Set dk = CreateObject("Scripting.Dictionary")
Randomize
With Selection
    NbLgn = .Rows.Count
    While dk.Count < NbLgn
        dk(Round((35 - 1) * Rnd() + 1, 0)) = ""
    Wend
    .Value = Application.Transpose(dk.keys): .Sort .Item(1), 1
End With
End Sub
Le code tel que présenté présuppose que l'utilisateur sélectionne une seule et unique colonne* avant de lancer la macro.
*: et ne contenant pas de cellules fusionnées sinon...
 
Re

Un légère adaptation de mon adaptation précédente 😉
(juste un peu d'élagage 😉)
VB:
Sub Nombre_Alea_II()
'souce:Sub aleatoire [08/2015] - ROGER2327 / Magic_Doctor / job75
Dim dk As Object, NbLgn&: Set dk = CreateObject("Scripting.Dictionary")
Randomize
With Selection
    NbLgn = .Rows.Count
    While dk.Count < NbLgn
        dk(Round((35 - 1) * Rnd() + 1, 0)) = ""
    Wend
    .Value = Application.Transpose(dk.keys): .Sort .Item(1), 1
End With
End Sub
Le code tel que présenté présuppose que l'utilisateur sélectionne une seule et unique colonne* avant de lancer la macro.
*: et ne contenant pas de cellules fusionnées sinon...

Haha super merci tu gères. ça marche à merveille

Une petite question par curiosité. Si je souhaite mettre un ordre décroissant, qu'est ce que je devrais modifier dans le code?
 
- 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
5
Affichages
1 K
  • Suggestion Suggestion
Recherche & référence DicoCountOrder
Réponses
0
Affichages
2 K
D
  • Question Question
Réponses
3
Affichages
4 K
Retour