IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Génération d'un code Aléatoire et Unique (fin de projet) [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut Génération d'un code Aléatoire et Unique (fin de projet)
    Bonjour,

    J'ai besoin d'aide afin de finir mon projet.

    Je souhaiterai lorsque je clique sur "Valider", générer un code unique et introuvable pour le commun des mortels.



    Je ne sais pas comment faire. Mon formulaire marche parfaitement, cependant il reste une colonne de ma table qui n'est pas renseignée. La colonne "Code".

    Avec les informations présente dans ce formulaire :
    • Nom de la société
    • Zone
    • Installation
    • Date
    • Numéro identification (NuméroAuto dans mon cas)
    Est-il possible de générer un code totalement aléatoire et unique, et l'inclure dans ma table_DemandeConsignation lorsque je clic sur Valider ?

    Exemple de code : Sur une base de 6 caratères

    4Xd854
    789dF1
    1047qP
    Z504wS
    ...etc

    Je vous remerice !

  2. #2
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Une astuce :

    Dans la structure de la table, définir le champ Code en entier Long, valeur par défaut "=GenUniqueId()"

    Et ainsi,à chaque nouvel enregesitrement, un code aléatoire unique sera défini.

    Par contre cela donnera un entier.

    Si tu veux vraiment une chaine sur 6 caractères, il te faudra écrire ta propre fonction, à partir par exemple de la fonction Rnd et une conversion Hexadécimale.

    Une piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Const NBMAX = 16777215
    Dim n As Long
    n = Int(NBMAX * Rnd + 1)
    MsgBox Hex(n)
    Pour empécher les doublons, il faudra indexer le champ Code sans doublon et tenter l'insertion jusqu'à ce que la valeur soit acceptée

  3. #3
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Grossièrement, dans la valeur par défaut d'un contrôle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function CreationCodeUnique() As String
    Const NBMAX = 16777215
    Dim n As Long
    Do
        n = Int(NBMAX * Rnd + 1)
        DoEvents
    Loop While Not IsNull(DLookup("Code", "tblTest", BuildCriteria("Code", dbText, Hex(n))))
    CreationCodeUnique = Hex(n)
    End Function

  4. #4
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Salut Tofalu est merci pour tes réponses.

    Dans un premier temps j'ai testé avec la valeur par défaut "=GenUniqueId()".

    Cela marche parfaitement. Mais par contre beaucoup trop long et parfois j'ai des valeurs dans le négatif :/

    Pour ton deuxième message, je ne sais pas quoi faire. A vrai dire je ne sais même pas ou mettre ces lignes. Dans la code VBA du bouton validé ?

    Je te remercie encore

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonjour,
    c'est bien cette idée Popperwin, Tofalu

    j'ai ceci à utiliser dans une zone de texte d'un formulaire :
    Dans la propriété Valeur par défaut de la zone de texte écrire :
    =SetUniqueId(6)

    6 représente la taille de la chaine à renvoyer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function SetUniqueId(Optional codeSize As Integer = 2) As String
        Dim CharCode As Byte, Code As String
        if CodeSize<2 then codesize=2
        Randomize
        Do
          CharCode = Int((62 * Rnd) + 1)
          Code = Code & Chr(CharCode + IIf(CharCode < 11, 47, IIf(CharCode < 37, 54, 60)))
         Loop Until Len(Code) = codeSize
        SetUniqueId = Code
    End Function

  6. #6
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Citation Envoyé par ilank Voir le message
    Bonjour,
    c'est bien cette idée Popperwin, Tofalu

    j'ai ceci à utiliser dans une zone de texte d'un formulaire :
    Dans la propriété Valeur par défaut de la zone de texte écrire :
    =SetUniqueId(6)

    6 représente la taille de la chaine à renvoyer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function SetUniqueId(Optional codeSize As Integer = 2) As String
        Dim CharCode As Byte, Code As String
        if CodeSize<2 then codesize=2
        Randomize
        Do
          CharCode = Int((62 * Rnd) + 1)
          Code = Code & Chr(CharCode + IIf(CharCode < 11, 47, IIf(CharCode < 37, 54, 60)))
         Loop Until Len(Code) = codeSize
        SetUniqueId = Code
    End Function
    Je ne vois pas ce qui garantit l'unicité de la chaîne renvoyée

  7. #7
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Citation Envoyé par ilank Voir le message
    Bonjour,
    c'est bien cette idée Popperwin, Tofalu

    j'ai ceci à utiliser dans une zone de texte d'un formulaire :
    Dans la propriété Valeur par défaut de la zone de texte écrire :
    =SetUniqueId(6)

    6 représente la taille de la chaine à renvoyer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function SetUniqueId(Optional codeSize As Integer = 2) As String
        Dim CharCode As Byte, Code As String
        if CodeSize<2 then codesize=2
        Randomize
        Do
          CharCode = Int((62 * Rnd) + 1)
          Code = Code & Chr(CharCode + IIf(CharCode < 11, 47, IIf(CharCode < 37, 54, 60)))
         Loop Until Len(Code) = codeSize
        SetUniqueId = Code
    End Function
    Ok merci.

    J'ai utilisé cette fonction. Marche très bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Génération d'une nombre aléatoire unique
    Par jopont dans le forum BIRT
    Réponses: 18
    Dernier message: 30/06/2013, 08h49
  2. Génération de codes aléatoires uniques
    Par Steph_ng8 dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 11/11/2010, 22h34
  3. Réponses: 4
    Dernier message: 01/02/2006, 14h56
  4. Génération de n nombres aléatoires différents
    Par progfou dans le forum Probabilités
    Réponses: 3
    Dernier message: 13/12/2005, 18h29
  5. [Plugin]Gestion de génération automatique de code
    Par Maggic dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/05/2004, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo