Acces [VBA - SQL] - Génération de code sur une seule ligne

Résolu/Fermé
Access_0644 - 23 août 2022 à 12:01
 Access_0644 - 24 août 2022 à 11:04

Bonjour à tous,

Je cherche depuis quelques temps ma réponse sur internet sans trouver ma réponse (je suis sans doute passé à côté de la réponse..). Je suis débutant en la matière, je ne fais donc que copier et adapter des lignes. J'essaye toujours de creuser et comprendre, mais dans le cas présent ça va trop loin pour moi.

Je cherche à générer via un click bouton une suite alphanumérique aléatoire pour des personnes. 1 personne = 1 lignes d'une table = 1 suite.

J'aurais aimé faire cet ajout de suite sur une requête pour m'éviter une étape en plus (j'en ai plusieurs entre temps) mais avec la solution sur laquelle je suis partie je n'ai pour le moment réussi à faire que sur une table.

L'update fonctionne quand je met en commentaire mes lignes de loop et mon where. Sauf qu'il me génère la même suite pour l'intégralité de la colonne, sans différenciation. J'ai donc cherché à forcer le fait qu'il ne me remplisse qu'une ligne à la fois, avec le numéro de la ligne = le numéro de la loop. Donc dans la loop 1 = remplir ligne 1 dans la loop 2 = ligne 2 etc... Jusqu'à arriver à un nombre de loop = le nombre de ligne de la table.
Sans doute pas le plus efficace, mais j'ai pas mieux sous la main pour le moment :D

Mon problème vient donc du WHERE, je ne sais pas comment appeler le numéro de la ligne que je veux. J'ai essayé avec des choses style table.colonne.row = X mais sans succès. Je cherche donc à mettre en place un moyen permettant le WHERE NUMERO_DE_LIGNE = i.
Si vous avez d'autres idées évidemment, je suis preneur..

Pardonnez si je n'ai pas été clair, j'ai passé assez de temps dessus pour que potentiellement mes idées ne soient plus très clair :D

Mon code :

Public Sub Generation_Suite()

    Dim stSQLInsert As String
    Dim i As Integer
    Dim Nblignes As Integer

   
    Nblignes = DCount("*", "Table_Personnes")

    i = 0

    Do Until i = Nblignes
    i = i + 1

       stSQLInsert = "UPDATE Table_Personnes " & _
                     "SET Suite_Alpha= Mid('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',INT(RND()*62),1)&Mid('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',INT(RND()*62),1)"
                     "WHERE NUMERO_DE_LIGNE = i;"
       DoCmd.RunSQL stSQLInsert
                
    Loop

End Sub


Windows / Firefox 102.0

A voir également:

1 réponse

yg_be Messages postés 22491 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 février 2024 1 447
23 août 2022 à 17:42

bonjour,

une solution possible, ce serait de faire ainsi:

UPDATE Table_Personnes 
SET Suite_Alpha= 
Mid('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
     INT(myRND(Suite_Alpha)*62),1)
&Mid('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
     INT(myRND(Suite_Alpha)*62),1)"

et , en VBA, ajouter:

Public Function myrnd(x) As Single
myrnd = Rnd()
End Function

Une autre possibilité: 

Const alph As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Public Function myrndswit(x) As String
myrndswit = Mid(alph, 1 + Int(Rnd * 62), 1) & Mid(alph, 1 + Int(Rnd() * 62), 1)
End Function

et

UPDATE Table_Personnes 
SET Suite_Alpha= myrndswit(Suite_Alpha)
0

Bonjour,

Merci infiniment, problème résolu, je suis partie sur l'option 2, ça marche du tonnerre.

Bonne journée !

0