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.
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.
Non pas forcément. J'ai pensé aux macros parce que je ne sais pas le faire sans VBA. Alors j'ai déjà essayé avec les formules aléa et aléa.entre.bornes mais les nombres ne sont croissants.
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.
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
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é ?
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.
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...
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...