Génération nombre aléatoire

Balot57

XLDnaute Nouveau
Bonjour à tous,
Dans une table, je voudrais ajouter une colonne contenant pour chaque enregistrement un nombre généré aléatoirement. Savez-vous comment je peux faire ?
 

Balot57

XLDnaute Nouveau
Re : Génération nombre aléatoire

J'ai travaillé sur un code mais il ne fonctionne pas. Il s'arrête à la ligne :
DoCmd.RunSQL "ALTER TABLE MaTable ADD [ordre] COUNTER" avec le message "Table ou contrainte non trouvée". Est-ce que quelqu'un voit où est mon erreur ?

Code:
Sub GenererNombreAleatoire()

    Dim NbEnregistrements As Long
    Dim MaTable As String
    Dim i As Long
    
    MaTable = "BaseTest"
    NbEnregistrements = DCount("[Site]", MaTable)    
    
    DoCmd.RunSQL "ALTER TABLE MaTable ADD [ordre] COUNTER"    
    
    Randomize
    i = 1
    Do While i <= NbEnregistrements
        DoCmd.RunSQL "update MaTable set [NbAleatoire] = " & Rnd() & " WHERE [ordre] = " & i & ";"
        i = i + 1
    Loop

    DoCmd.RunSQL "ALTER TABLE MaTable DROP COLUMN [ordre]"

End Sub
 

kiki29

XLDnaute Barbatruc
Re : Génération nombre aléatoire

Salut, sous EXCEL, je n'ai plus Access, le code proposé par le lien s'utilise ainsi
il génère des nombres aléatoires uniques

Code:
Option Explicit

Sub Tst()
Dim i As Long, j As Long
Dim X() As Variant

    ShDatas.Columns("A:A").ClearContents
    X = RandomNumbers(100, 1, 25, True)
    j = 1
    For i = LBound(X) To UBound(X)
        ShDatas.Cells(j, 1) = X(i)
        j = j + 1
    Next i
End Sub
 

Balot57

XLDnaute Nouveau
Re : Génération nombre aléatoire

Merci pour ton aide. Mon principal problème est que je ne maîtrise pas du tout Access, et donc j'ai beaucoup de mal à adapter l'algo. Mais j'ai fini par trouver une solution qui marche, même si je sens qu'elle n'est pas parfaite.

Code:
Sub GenererNombreAleatoireMethode2()

    Dim MaDataBase As Object
    Dim MaRecordset As Object
    Dim fldEnumerator As Object
    Dim fldColumns As Object

    Set MaDataBase = CurrentDb
    Set MaRecordset = MaDataBase.OpenRecordset("nom de la table")
    Set fldColumns = MaRecordset.Fields
    
    ' Scan the records from beginning to each
    While Not MaRecordset.EOF
        ' Check the current column
        For Each fldEnumerator In MaRecordset.Fields
            ' If the column is named "NbAleatoire"
            If fldEnumerator.Name = "NbAleatoire" Then
                    MaRecordset.Edit
                    Randomize
                    MaRecordset("NbAleatoire").Value = Rnd()
                    MaRecordset.Update
            End If
        Next
        ' Move to the next record and continue the same approach
        MaRecordset.MoveNext
    Wend
    
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : Génération nombre aléatoire

Bonjour Balot, Bonjour kiki,

Dans une requête, pour générer un nombre aléatoire regénéré à chaque enregistrement (mais pas forcément unique), la fonction Aléat d'Access génère le même nombre alors j'ai créé une fonction personnalisée
Il faut lui fournir la valeur d'un champ numérique en entrée (Champ1 par exemple)

Dans un Module :

Code:
Function Aleat2(Param As Double) As Double
    Randomize
    Aleat2 = Rnd * Param / Param
End Function

Dans la requête, création d'un champ calculé

Code:
MonCalcul : aleat2([champ1])
 

Discussions similaires

Réponses
16
Affichages
749

Statistiques des forums

Discussions
312 490
Messages
2 088 879
Membres
103 981
dernier inscrit
vinsalcatraz