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 ?
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
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
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
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