Aléatoire avec condition

Roseline

XLDnaute Occasionnel
Bonjour,
J'ai besoin d'aide concernant mon fichier. Si j'inscrit un chiffre dans la colonne C, par exemple 32, je désire que ma commande vba me sorte 32 chiffres aléatoire dans la colonne B. Également si dans ma colonne D, le chiffre est 1020, je veux que ma commande me donne 32 chiffres aléatoire compris entre 0 et 1020. Merci de votre aide
 

Gardien de phare

XLDnaute Accro
Bonjour,

En Vba par exemple,
VB:
Sub tirage()
Dim i As Long, Dlig As Long, Vmax As Long
Application.ScreenUpdating = False
With ActiveSheet

'Effacement des valeurs existantes
    Dlig = .Range("B" & Rows.Count).End(xlUp).Row
    .Range("B2:B" & Dlig).ClearContents
 
' Génération des nombres aléatoires
    Vmax = .Range("D1").Value
    For i = 1 To .Range("C1").Value
        .Range("B" & i + 1) = Application.WorksheetFunction.RandBetween(0, Vmax)
    Next i
End With
Application.ScreenUpdating = True
End Sub

Edit : Bonjour Dranreb, évidemment, nous ne jouons pas dans la même cour
 
Dernière édition:

Roseline

XLDnaute Occasionnel
Bonjour.
Voyez si ça convient.

Édition: Bonjour Gardien de phare
Bonjour Dranreb, c'est exactement ce que je cherchais à faire et tu me sauves énormément de travail. Il me resterait seulement une petite chose, si tu regardes mon fichier, mon nombre de ligne aléatoire correspond au chiffre que j'indique dans la cellule B4. Est-ce qu'il est possible que les colonnes C et E donne le même nombre que la colonne D.
 

Dranreb

XLDnaute Barbatruc
Comme ça :
VB:
Sub GenereSerieAleatoireSansDoublons()
Dim LA As New Classe1, T(1 To 100000, 1 To 1), LMax As Long, L As Long
LA.Init ActiveSheet.[B3].Value + 1
LMax = ActiveSheet.[B4].Value
For L = 1 To LMax: T(L, 1) = LA.Aléat(L) - 1: Next L
ActiveSheet.[C6].Resize(100001, 3).ClearContents
ActiveSheet.[C6].Resize(LMax).FormulaR1C1 = "=IF(R2C2,R2C3,"""")"
ActiveSheet.[D6].Resize(LMax).Value = T
ActiveSheet.[E6].Resize(LMax).FormulaR1C1 = "=RC3&""-""&TEXT(RC4,""00000"")"
End Sub
Il m'aurait été agréable que le nom du type d'objet ListeAléat ne soit pas changé en Classe1.
 
Dernière édition:

Roseline

XLDnaute Occasionnel
Comme ça :
VB:
Sub GenereSerieAleatoireSansDoublons()
Dim LA As New Classe1, T(1 To 100000, 1 To 1), LMax As Long, L As Long
LA.Init ActiveSheet.[B3].Value + 1
LMax = ActiveSheet.[B4].Value
For L = 1 To LMax: T(L, 1) = LA.Aléat(L) - 1: Next L
ActiveSheet.[C6].Resize(100001, 3).ClearContents
ActiveSheet.[C6].Resize(LMax).FormulaR1C1 = "=IF(R2C2,R2C3,"""")"
ActiveSheet.[D6].Resize(LMax).Value = T
ActiveSheet.[E6].Resize(LMax).FormulaR1C1 = "=RC3&""-""&TEXT(RC4,""00000"")"
End Sub
Il m'aurait été agréable que le nom du type d'objet ListeAléat ne soit pas changé en Classe1.
 

Roseline

XLDnaute Occasionnel
Merci beaucoup Dranreb, ta formule est magique c'est en plein ce qui me manquait. Un dernier point que je comprend pas c'est qui si je demande par exemple 20 lignes aléatoire, elle m'en met toujours une vide au travers? as-tu une idée de la raison.
Désolée également d'avoir changer le tout pour classe1.
Merci encore de ton aide aussi rapide.
 

Roseline

XLDnaute Occasionnel
Je n'ai pas constaté ce phénomène chez moi.
En revanche je n'ai rien fait pour les formats de cellules.
Peur être qu'en mettant sous forme de tableau ça irait mieux…
Rebonjour Dranreb,
J'ai besoin de ton aide concernant mon fichier avec la commande aléatoire. Si en B2 je me 2500 et que je fais activer aléatoire, elle me sort 24 lignes, jusque là tout va bien. Quand je met 1000 par exemple en B2 et bien là elle me sort des zéro sur les lignes que je n'ai pas besoin. Je sais que tu auras la solution que moi je ne vois pas du tout. Merci
 

Discussions similaires

Réponses
10
Affichages
417

Statistiques des forums

Discussions
312 092
Messages
2 085 223
Membres
102 826
dernier inscrit
ag amestan