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

Modélisation Discussion :

Incrémentation auto : code lettre+chiffres


Sujet :

Modélisation

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Incrémentation auto : code lettre+chiffres
    Bonjour !

    Je débute un peu sur ACCESS et je créé une BDD où j'enregistre des produits référencés selon leur initiale : A01-A02 ; B01-B02 etc...
    J'aimerai que l'incrémentation de ces références soit automatique quand on rentre le nom du produit ou la lettre de la référence (ex : je commence à taper "ch..." dans le champs Produit ou "C" dans le champ Réf, et la BDD attribue automatiquement la réf C03 si C02 existe déjà)

    (Petite précision : cette base va être alimentée par un fichier EXCEL existant, je ne vais donc pas partir de 00 pour mes références...)
    Je ne pense pas pouvoir utiliser un NumAuto, puisqu'il ne peut pas contenir de lettre, me trompe-je ??

    J'espère que quelqu'un pourra m'aider !!
    Par avance merci de votre aide...

  2. #2
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Bonjour et bienvenue sur le forum!
    Effectivement, cela n'est pas possible avec un numeroAuto, aussi simplement.
    Avec un peu de VBA,on peut y arriver.
    Mais, il me semble que cela a déjà été resolu sur le forum.
    Cherche un peu.

    Bonne suite!

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    VBA, je maitrise pas vraiment, mais j'ai déjà fait quelques programme alors c'est jouable... (surtout si c'est "un peu" !!)
    Par contre, je me doute que la question a déjà été posée, mais j'ai trouvé de réponse (et pourtant, j'ai cherché, ici et ailleurs !!...)

    Merci pour votre aide en tout cas !

  4. #4
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Regarde

    Si ça ne te convient pas, suit cette recherche

  5. #5
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    si la partie à incrémenter est numérique alors tu peux faire des calculs et c'est plus simple
    tu peux aussi diviser ta référence en deux champs C d'un coté et 02 de l'autre
    pour résoudre le problème d'unicité, il suffit de mettre une clef double
    et un petit code sur sortie de la zone de la lettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Lettre_Exit(Cancel As Integer)
    if chiffre > 0 then else chiffre = dmax("chiffre","ma_table","lettre like '" & lettre &"'") +1
    End Sub
    j'explique:
    le if pour ne pas affecter de valeur à chiffre si il y en a déja une (quand on repasse par là en lecture, ça pourrait faire des conneries)
    dmax, la fonction pour chercher le plus grand
    ma_table est le nom de la tienne
    et ensuite un filtre pour ne pas avoir le plus grand de tous les chiffres mais bien le plus grand des chiffres dont la lettre est C (par ex)
    +1 juste pour incrémenter

    à l'affichage dans les états ou dans les formulaires, il suffit d'afficher lettre&chiffre dans le même champ (et peut être aussi lettre et chiffre dans deux champs séparés mais invisibles pour pouvoir faire les sélections sans peine)

    Ps: t'as raison le numauto est une casse.....
    en effet, l'incrémentation automatique ci-dessus ne t'empèche aucunement de forcer les valeurs pour avoir C04 après C02, ce qui faitt que le suivant sera C05 que tu pourra toujours forcer à C03 si tu le veux vraiment!!

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup Simplifi !

    Je n'ai pas encore essayé ce code, car ma BDD n'est pas encore créée, mais il m'a déjà dépanné pour une autre !
    J'avais envisagé de scinder le code en 2, mais je voyais pas comment éviter les doublons et mettre en place l'incrémentation auto...

    Je n'ai jamais eu de formation sur VB alors je galère un peu, mais je commence à comprendre quelques trucs, ça fait plaisir !

    Encore merci à tous, et à bientôt car vu mon niveau, j'aurai sans doute encore besoin de votre aide...

  7. #7
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    Avec plaisir
    n'oublie pas le tag résolu

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Et oui, c'est encore moi !

    Je savais bien qu'il ne fallait pas que je cloture la discussion...

    J'ai essayé d'adapter ton code sur une autre BDD, ou mes réf (champ "Code") sont de type "PL 0000" (toujours les mêmes lettres).
    Je voudrais qu'à l'ouverture de mon formulaire en mode ajout, le nouveau Code soit automatiquement attribué, par incrémentation du dernier utilisé (PL 1652 si PL 1651 existe déjà).

    Ca donne un truc comme ça, libre adaptation de ton code :

    Private Sub Form_Current()

    Dim NumCode As String
    NumCode = Val("code")

    If NumCode > 0 Then Else NumCode = DMax(NumCode, "Plantes") + 1
    Code = "PL " & NumCode

    End Sub

    Ca marche presque : quand j'ouvre mon formulaire, dans le champs Code il affiche PL 1*** (masque de saisie : PL ****), alors qu'il devrait mettre PL 1613, le dernier enregistrement de ma table "Plantes" portant le Code PL 1612...
    Mes connaisances de VB étant quasi nulle, je coince...

    Un (dernier, peut être...) petit coup de main ?...
    Merci d'avance !!

  9. #9
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    déja , tu devrais utiliser les balises de code le # au dessus de la fenêtre
    ensuite tu devrais essayer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_Current()
     
    Dim NumCode As String
    NumCode = Val(code)
     
    If NumCode > 0 Then Else NumCode = DMax("NumCode", "Plantes") + 1
    Code = "PL " & NumCode
     
    End Sub
    plus sérieusement, il faur savoir qu'est ce que tu as stocké dans la colonne numcode, si c'est dans cette colonne que tu trouves 1651 ça va marcher

    dans dmax, les valeurs entre guillemets sont les noms des champs
    par contre dans val(), c'est pas un texte que tu transmet mais une variable que la fonction va remplacer par sa valeur si code = "Pl 1651" alors val(code) = val ("PL 1651") = 1651

    Je suis pas sûr d'être clair

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Désolée du retard de ma réponse, j'étais passée sur autre chose. Je me replonge aujourd'hui dans ma BDD, et je galère toujours...

    Ton code marche mais dans ma table, je n'avais pas encore le champ "NumCode". J'ai essayé de le créer et qu'il se remplisse automatiquement à partir du champ "Code", mais je n'y suis pas arrivée...

    Pourtant définir un champ à partir d'un autre, ça parait simple !!!

    Je pourrais m'armer de patience et le remplir moi même (j'ai quand même + de 800 enregistrements...), mais il faut qu'il se remplisse automatiquement quand j'enregistre de nouvelles données !

    Une solution ?!
    Merci d'avance...

  11. #11
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    ton nouveau problème s'appelle "mise à jour"
    si j'ai bien compris, ta table contient 800 enregistrements avec comme référence: blabla-0000, blabla-0001 aisni de suite jusqu'à 800
    tu veux donc mettre à coté une colonne avec la partie numérique

    suivant le format de la référence tu utilisera des fonctions différentes val() fonctionne mais il il a aussi droite()

    commence par faire une requête sélection (on commence toujours par là)
    en haut la table
    en bas le champ référence
    exécuter -> 800 lignes, super
    à coté de référence on va mettre val(référence)
    si tu viens d'obtenir ce que tu voulais tu peux commencer de danser de joie
    sinon, cherche un peu dans les fonctions du générarteur associé à la création de devis
    quand tu as exactement le numéro que tu voulais en face de chaque référence, si t'es pas assomée par le plafond, on continue
    à partir du mode création, clique sur l'icone "Mise à jour"
    il te reste à supprimer la colonne "référence", à mettre la colonne "numref" et à mettre la formule_magique_qui_donne_ce_que_tu_veux dans la case "mise à jour", ce qui aura comme effet de remplacer "numref" par le résultat de la "formule_......"

    et ta table sera fin prète pour faire des dmax + 1

    tien moi au courant

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bonjour Simplifi !

    Encore pas mal de retard pour ma réponse, mais je fais pas mal de choses en même temps...

    Merci beaucoup encore une fois, grâce à tes (précieux) conseils, ma BDD est fin prête : le code PL xxxx est incrémenté et se met à jour automatiquement quand j'enregistre mes données.
    (pour ceux que ça pourrait aider, une fois ma requête Mise a jour créée , j'ai fait une macro qui ouvre cette requête et je lance cette macro "Après MAJ" dans mon formulaire d'enregistrement des données : il y a peut être plus simple, mais comme ça, ça marche, le "NumCode" est mis à jour à chaque nouvel enregistrement, pour que l'incrémentation suivante du "Code PL xxxx" soit correcte)

    J'ai fait, je crois, un énorme bond en avant dans ma connaissance d'ACCESS avec cette BDD, je remercie donc grandement ceux qui m'ont aidé !!

    Peut être à bientôt...

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

Discussions similaires

  1. incrémentation auto à partir d'un chiffre donné!
    Par BRUNO71 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/05/2008, 20h45
  2. incrémentation lettre chiffre
    Par FIFI33160 dans le forum Excel
    Réponses: 5
    Dernier message: 28/03/2008, 16h01
  3. [WD9]champ auto-incrémente par code
    Par loic20h28 dans le forum WinDev
    Réponses: 4
    Dernier message: 25/02/2008, 20h53
  4. [WTP] Gener. Auto. code proxy JAVA a partir WSDL
    Par svinchon dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 28/02/2006, 09h38
  5. incrémenter un code
    Par linou dans le forum Langage
    Réponses: 8
    Dernier message: 31/01/2006, 08h27

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