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

Access Discussion :

Incrementation d'un caractere Alphanumerique


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 24
    Points
    24
    Par défaut Incrementation d'un caractere Alphanumerique
    Bonjour a tous,
    C'est mon premier poste sur ce forum, que j'ai longuement parcourus avoir de vous posez cette question:
    je suis en stage dans une société où les commandes passé par les clients ont un numéro de type:
    N°depuis le debut de l'année+lettre pour l'année

    ma question est comment faire pour que lorsque l'on ouvre un nouveau formulairel le numero de commande soit automatiquement
    N°depuis le debut de l'année+1 +lettre pour l'année

    et changement de lettre avec l'année


    je vous remercie pour vos réponses!!

    @+++

  2. #2
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    Tu devrais incrémenter la valeur ASCII de la lettre
    Pti Pié

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 340
    Points : 19 577
    Points
    19 577
    Billets dans le blog
    65
    Par défaut
    comment fait tu la correspondance entre l'année et la lettre, est-ce 1 truc du genre:

    'a' -> 2006
    'b' -> 2007
    'c' -> 2008

    donne des exemples de numéro, c'est toujours plus parlant...

    si tu sauvegarde ce numéro dans ta table...
    Comment souhaite tu mettre à jour ce champ numéro dans ton form: à partir du numéro précédent ???

    @+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  4. #4
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    tu sais que le code ASCII (décimal) de "a" (minuscule) est 97

    donc si 2006 correspond à "a" (donc à 97) alors, 2008 correspond à :

    97 + (2008-2006) = 99

    or la valeur du code ASCII 99 est "c"


    plus simplement

    année --> lettre --> ASCII
    --------------------------------
    2006 --> a --> 097
    2007 --> b --> 098
    2008 --> c --> 099
    2009 --> d --> 100
    Pti Pié

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 340
    Points : 19 577
    Points
    19 577
    Billets dans le blog
    65
    Par défaut
    salut repié,

    en fait il ne s'agit pas de ma discussion,

    j'ai juste fait une hypothèse, mais pour reprendre ton explication je verrai bien une fonction du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function maj_numero() As String
    Dim l As String
    Dim req As DAO.Recordset
    Dim num As Long
     
    l = Chr(Asc("a") + Year(Date) - 2006)
     
    Set req = CurrentDb.OpenRecordset("select count(numero) as max from table1 where numero like '*" & l & Chr(39))
     
    num = req!Max + 1
     
    req.Close
     
    maj_numero = num & l ' renvoi le numéro alphanumérique ex: "1234a"
     
    End Function
    maintenant ce n'est que pure spéculation en attendant la réponse de Kelly182
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    Petit code bidouillé en quelques minutes et en partant sur les hypothèses suivantes :

    1 table Commande avec 1 champ NumeroCommande et 1 champs Date (qui met la date du jour automatiquement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    Dim Commande As String
    Dim Chiffre As String
    Dim Lettre As String
    Dim Résultat As String
     
     
    'Vérifie si une comamnde existe
    If DCount("NumeroCommande", "Commande") > 0 Then
        'Récupère le N° de la dernière commande
        Commande = DMax("NumeroCommande", "Commande")
     
        'Récupère le numéro sans la lettre
        Chiffre = Left(Commande, Len(Commande) - 1)
     
        'récupère la lettre
        Lettre = Right(Commande, 1)
     
        'Vérifie l'année
        'Si l 'année change, la lettre s'incrémente de 1 lettre
        If Format(DMax("Date", "Commande"), "yyyy") < Format(Now, "yyyy") Then
            Lettre = Chr(Asc(Lettre) + 1)
        End If
    Else
        'Crée un nouveau numéro
        Chiffre = "0"
        Lettre = "A"
    End If
     
    Résultat = Chiffre + 1 & Lettre
     
    Me.Mazonedetexte = Résultat

  7. #7
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    autant pour moi User je suis allé un peu vite...
    Pti Pié

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    En plus de l'algo pour générer un nouveau N°, il faut savoir si la base est en multi-utilisateur. Si oui, attention si 2 personnes veulent créer un nouvel enregistrement en même temps (plus exactement si une 2ème personne ouvre le form avant que le premier ait enregistré) tu aura 2 fois le même N° ...
    A+

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Merci a tous pour vos reponses!!
    effectivement la table est en multi-utilisateur, et je souhaitais faire une table commande avec les champ numero commande, qui serait un bete numero et un autre champ qui serait codecommande est qui correspondrait au code qu'utilise l'entrprise. J'en suis au MCD et je me suis posé la question quand il a fallut mettre le type.

    exemple:

    449K: 449éme commande de l'année 2006

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    on peut règler le problème de conflit multi utilisateurs de la façon suivante

    je crée une table genum
    clef champauto
    ref texte

    quand j'ai une nouvelle entrée dans la base
    je n'entre pas dans la table cible mais préalablement dans genum

    access va gérer l'attibution de numéro auto

    dans ref je pose une variable du type user+client
    il me reste
    à recupérer clef de genum
    à effacer ref de genum
    à entrer dans ma base mes données
    Elle est pas belle la vie ?

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Merci de ta reponse random!
    mais la je crois que j'ai pas tout compris! dsl

    donne moi un peu de temps pour comprendre!!


  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 340
    Points : 19 577
    Points
    19 577
    Billets dans le blog
    65
    Par défaut
    Une question:

    En cas de conflit en mode multiutilisateurs, je me demandais:
    Il va se produire une erreur du genre "doublon dans un index",
    a ce moment ne peut t'on pas récupérer l'erreur dans le form pour générer un numéro supérieur au précédent ???
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  13. #13
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Salut a tous!!

    bon voila comment je pense gérer mon probléme avec vos précieuses aides

    Table: Devis (NumDevis, Accepté (booléen) plus d'autres propriétès)

    GeNumCommande(NumCommande, CodeCommande (obtenu grace a la conversion de scorpion 1611), Date)

    Commande(NumCommande, code commande, ....)

    merci d'avance pour vos aides!!!

    si j'ai bien compris la faq access, le fait d'avoir une table intermediaire force les utilisateurs a chargé la table seulement lors d'une modif, et non d'avoir la table en permanance. C'est mon deuxiéme projet Access et premier complet en reseau.

Discussions similaires

  1. [RegExp] Comment autoriser en regexp les caracteres alphanumeriques et interdire tous le reste
    Par yassinozi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/08/2014, 23h50
  2. Réponses: 4
    Dernier message: 17/12/2013, 22h14
  3. Comment incrementer une chaine de caracteres
    Par KeZyX dans le forum C++
    Réponses: 7
    Dernier message: 04/06/2007, 08h34
  4. [Regex] Verifier presence de caracteres alphanumeriques seuls
    Par Arnard dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 03/11/2006, 09h12
  5. incrementation alphanumerique
    Par zephyr59 dans le forum Access
    Réponses: 4
    Dernier message: 20/04/2006, 22h56

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