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

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.
 

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
 
Re

Bah, cela coule (presque de source), non ? 😉
Application.RandBetween(1,35)
NB: je te laisse modifier et tester la macro du message#3

EDITION: Bonjour jmfmarques
 
Dernière édition:
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 Staple.
Excuse-moi . Pris entre mille feux (une infirmière fragile - une nécessité de remonter mon épouse et son harnais à un niveau permettant l'utilisation du lève-personne - une sonde de gastrostomie "glissée") .
Amitiés
 

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

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…