XL 2019 valeur aléatoire à deux décimale

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

  • ajout_centieme.xlsm
    17 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
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
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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

  • Sheldor- ajout_centieme- v1.xlsm
    19.2 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
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
 

Modeste geedee

XLDnaute Barbatruc
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:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35