XL 2019 valeur aléatoire à deux décimale

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 !

Sheldor

XLDnaute Occasionnel
Supporter XLD
Bonjour,

jusqu'à tout à l'heure je pensais très simple de générer des valeurs entre 0 et 1 avec deux chiffres après la virgule avec cell.Value = (Int(Rnd() * 100)) / 100
eh bien ça ne marche pas du tout... soit je suis à côté de la plaque soit c'est l'ordi qui fonctionne comme ça (comme quand on fait 4.3-4.2 ça fait pas 0.1) mais j'ai plein de chiffres après la virgule que je ne veux pas...

si quelqu'un avait une idée...
très grand merci...

nico
 

Pièces jointes

re
intérréssant ce truc
même avec ta formule excel dès que je pousse un peu sur les decimale je déraille
du coup j'ai bloquer en ABS
VB:
Sub Macro1()
    With Selection
       .NumberFormat = "0.000000000000000"
       .FormulaArray = "=ABS(INT(RAND()*100 ) /100)"
        .Value = .Value
      End With
End Sub
Quand je reviens en format standard avec les decimal mod 10 je me retrouve toujours avec 1 seule décimale
 
Bonjour à tous 🙂,

Si j'ai bien compris ce qu'on cherche, je propose le code suivant qui devrait :
  • limiter à deux décimales les nombres entre 0 et 1 (0 et 1 compris)
  • accepter les sélections à plusieurs plages
  • être assez rapide
VB:
Sub Bouton1_Cliquer()
Dim xarea, t, i&, j&
   Randomize
   Application.ScreenUpdating = False
   Selection.ClearContents: Selection.NumberFormat = "# ##0.000000000000"
   For Each xarea In Selection.Areas
      ReDim t(1 To xarea.Rows.Count, 1 To xarea.Columns.Count)
      For i = 1 To UBound(t): For j = 1 To UBound(t, 2): t(i, j) = CCur(Fix(Rnd * 101) / 100): Next j, i
      xarea.Value = t
   Next xarea
   Application.ScreenUpdating = False
End Sub
 

Pièces jointes

re
Bonjour @mapomme
et oui Fix
et c'est @mapomme qui gagne le point

VB:
'version2 sans doublons
Sub Bouton1_Cliquer()
    Dim valeur#
    Randomize
    ReDim t(1 To Selection.Cells.Count)
    Selection.NumberFormat = "#0.0000000000000"
    Do While i < UBound(t)
        valeur = Fix(Rnd * 100) / 100
        x = Application.IfError(Application.Match(valeur, t, 0), 0)
        If x = 0 Then i = i + 1: t(i) = Abs(valeur)
    Loop
    Selection = Application.Transpose(t)
End Sub
 
Bonjour,

jusqu'à tout à l'heure je pensais très simple de générer des valeurs entre 0 et 1 avec deux chiffres après la virgule avec cell.Value = (Int(Rnd() * 100)) / 100
eh bien ça ne marche pas du tout... soit je suis à côté de la plaque soit c'est l'ordi qui fonctionne comme ça (comme quand on fait 4.3-4.2 ça fait pas 0.1) mais j'ai plein de chiffres après la virgule que je ne veux pas...

si quelqu'un avait une idée...
très grand merci...

nico
Bonsour®
comme ceci
il n'est pas précisé "sans doublons"

VB:
Sub Bouton1_Cliquer()

For Each cell In Selection
Randomize
cell.Value = 10 ^ -2 * (Int(Rnd() * 10 ^ 2))
cell.NumberFormat = "0.00"
Next
End Sub
 
Dernière édition:
- 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
Retour