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 :

Incrémentation hexadecimale access [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut Incrémentation hexadecimale access
    Bonjour à tous,
    Je sollicite votre aide aujourd'hui pour une modification d'incrémentation personnalisée décimale vers hexadécimale.
    Dans une base access (migrée depuis peu de .mdb à .accdb), j'ai une numérotation Txxxxx.
    Le numéro fatidique de T99999 se pointe à l'horizon, je ne peux augmenter la taille de mon champs ni changer de lettre, je dois conserver les numérotations déjà utilisées.

    J'avais donc dans l'idée de passer en numérotation hexadécimale (ce qui augmenterait considérablement le nombre d'enregistrements possibles):

    1- reseter le comptage pour reprendre à T00001
    2- incrémenter en hexa sur 5 digits (T+5 digits)
    3- "sauter" les numéros déjà utilisés (que j'aurais stockés dans une table "TOld")

    Pouvez-vous m'aider à modifier ce code dans ce sens?

    voici le code actuel de cette incrémentation personnalisée:
    ===============================================
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function NextFIRNumber() As String
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sql As String
     
    sql = "SELECT Max(FIR.FIRNumber) as MaxFIR FROM FIR"
    Set db = Application.CurrentDb
    Set rs = db.OpenRecordset(sql)
    NextFIRNumber = Left(rs![MaxFIR], 1) & (CLng(Right(rs![MaxFIR], 5)) + 1)
    End Function
    ===============================================

    Merci par avance de toute l'aide que vous m'apporterez
    Fleur59

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Points : 2 491
    Points
    2 491
    Par défaut
    Voici ce que j'aurai fait: au lieu d'utiliser un système compliqué en passant par la numérotation hexadécimale, je rajouterai un nouveau champ basé sur une clef de 5 (ou +) positions alphanumériques que je construirai de façon structurelle pour qu'elle soit un index unique identifiant mes enregistrements avec leurs anciens n° Txxxxx. Exemple "000000", "000001", "000002", "000003", ......... , "099999".
    A tout moment, je peux retrouver le Txxxxx correspondant à ma clef. Question: que se passe t-il avec les enregistrements dépassant T99999 ? utiliser la nouvelle clef et oublier l'ancienne ?

  3. #3
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Bonjour Fleur59,
    Si j'ai bien compris, tu prépares une fonction qui te permettra de gérer la "suite" quand tu atteindras le numéro fatidique...
    Tu voudrais donc :
    - savoir comment ajouter dans ta fonction le code qui contrôle que la référence n'a pas déjà été utilisée ?
    - savoir quelle fonction utiliser pour obtenir la partie numérique de ta clé en hexa ? (il faut utiliser la fonction "hex" et padder à gauche avec des zéros)

    Dommage que tu ne puisses pas t'affranchir du "T" qui préfixe ton numéro ; ce serait tellement plus simple de passer à U, V...
    A ta disposition pour plus de précisions.

    Cordialement,
    Paraffine.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Voici ce que j'aurai fait: au lieu d'utiliser un système compliqué en passant par la numérotation hexadécimale, je rajouterai un nouveau champ basé sur une clef de 5 (ou +) positions alphanumériques que je construirai de façon structurelle pour qu'elle soit un index unique identifiant mes enregistrements avec leurs anciens n° Txxxxx. Exemple "000000", "000001", "000002", "000003", ......... , "099999".
    A tout moment, je peux retrouver le Txxxxx correspondant à ma clef. Question: que se passe t-il avec les enregistrements dépassant T99999 ? utiliser la nouvelle clef et oublier l'ancienne ?
    Bonjour
    Je me suis peut-être mal exprimée, je ne peux pas me passer du "T", le total du champs doit être sur 6 digits maximum. la question est bien là: je vous demande de l'aide pour cette raison, passer le cap des T99999.
    Cette base existe depuis 10 ans, je n'en suis pas le créateur, je prends donc ce qui existe.
    si je ne me trompe pas, passer en hexa me donnerai: 16x16x16x16x16=1048576, moins les 100000 déjà utilisés ou en passe de l'être donc 948576, comme la base utilise un peu moins de 9000 enregistrements par an, cela me laisse quelques années de tranquilité...
    Merci de ce premier contact

  5. #5
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    Si j'ai bien compris, tu prépares une fonction qui te permettra de gérer la "suite" quand tu atteindras le numéro fatidique...
    Tu voudrais donc :
    - savoir comment ajouter dans ta fonction le code qui contrôle que la référence n'a pas déjà été utilisée ?
    - savoir quelle fonction utiliser pour obtenir la partie numérique de ta clé en hexa ? (il faut utiliser la fonction "hex" et padder à gauche avec des zéros)

    Dommage que tu ne puisses pas t'affranchir du "T" qui préfixe ton numéro ; ce serait tellement plus simple de passer à U, V...
    A ta disposition pour plus de précisions.

    Cordialement,
    Paraffine.
    Bonjour Paraffine,
    oui c'est bien cela, Malheureusement le T m'est imposé.
    Désolée, bien que je me débrouille un peu en vba, le simple terme "padder" m'est inconnu, mais le champs contenant cette numérotation a un masque de saisie: "T"00000;0
    Merci de ce premier contact

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Juste une note en passant. Pourquoi se limiter à l'hexadecimal ?
    Tu pourrais faire une "Numerotation" qui utilise 0-9 et A-Z même en te limitant au 5 derniers caractères cela te fait un bon paquet de numéro.

    Et pour te simplifier la vie je repartirai en Hexa à partir du dernier numéro utilisé actuellement.
    Tu perdrais peut-être 100 000 numéros mais ce n'est pas une grosse perte en regard de ta nouvelle numérotation.
    Ici une manière simple d'y arriver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "T" & Right("00000" & hex$(val("&H" & Mid(DMax("TonNUmero"; "TaTable"); 2))+1)); 5)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DMax("TonNUmero"; "TaTable") 'Trouve le dernier numéro
    Mid(...; 2) 'Supprime le T du numéro
    val("&H" & ... )+1 'Converti en notation décimal et ajoute 1
    hex$(...) 'Converti en hexadécimal
    Right("00000" & ... ; 5) 'Ajoute des zéros à gauche du chiffre pour revenir à 5 chiffres
    "T" & ... 'Met un T au début du nouveau numero
    Attention utiliser DMax() dans un environnement multi-utilisateur peut retourner 2 fois le même numéros sur 2 machines différentes.
    C'est très improbable mais possible.
    Il faut prévoir de gérer les doublons ou s'assurer que le code s'exécute de manière exclusive en bloquant les accès simulatanés et en mettant en attente les demandeurs.

    La gestion des doublons est plus simple à implanter.

    A+

  7. #7
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Bonsoir Fleur59,
    Le code de Marot_r répond parfaitement à la problématique de la mise en forme.
    As-tu besoin d'un coup de main sur la recherche de doublons ou la cinématique (boucle) ?
    Dans la mesure où il faut de toute façon vérifier l'existence de doublons dans la table de production, inutile de stocker dans une table à part les numéros qui existaient avant cette la nouvelle numérotation ("tOld" est superflue).

    Cordialement,
    Paraffine.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Juste une note en passant. Pourquoi se limiter à l'hexadecimal ?
    Tu pourrais faire une "Numerotation" qui utilise 0-9 et A-Z même en te limitant au 5 derniers caractères cela te fait un bon paquet de numéro.

    Et pour te simplifier la vie je repartirai en Hexa à partir du dernier numéro utilisé actuellement.
    Tu perdrais peut-être 100 000 numéros mais ce n'est pas une grosse perte en regard de ta nouvelle numérotation.
    Ici une manière simple d'y arriver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "T" & Right("00000" & hex$(val("&H" & Mid(DMax("TonNUmero"; "TaTable"); 2))+1)); 5)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DMax("TonNUmero"; "TaTable") 'Trouve le dernier numéro
    Mid(...; 2) 'Supprime le T du numéro
    val("&H" & ... )+1 'Converti en notation décimal et ajoute 1
    hex$(...) 'Converti en hexadécimal
    Right("00000" & ... ; 5) 'Ajoute des zéros à gauche du chiffre pour revenir à 5 chiffres
    "T" & ... 'Met un T au début du nouveau numero
    Attention utiliser DMax() dans un environnement multi-utilisateur peut retourner 2 fois le même numéros sur 2 machines différentes.
    C'est très improbable mais possible.
    Il faut prévoir de gérer les doublons ou s'assurer que le code s'exécute de manière exclusive en bloquant les accès simulatanés et en mettant en attente les demandeurs.

    La gestion des doublons est plus simple à implanter.

    A+
    Bonjour Marot_r
    Merci pour ton idée, je pense que je peux me permettre les 100000 perdus.
    je vais dès demain tester ta phrase dans le code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "T" & Right("00000" & hex$(val("&H" & Mid(DMax("TonNUmero"; "TaTable"); 2))+1)); 5)
    et merci beaucoup pour l'explication pas à pas de cette phrase
    Je vous tiens au courant
    Merci

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Attention, tu as mentioné un masque donc vérifie que le T est vraiment présent dans les données.
    Il se peut que ce ne soit qu'un affichage sur un champ de type numérique.
    Au fait, as-tu testé à la main que tu pouvais mettre quelque chose comme TFFFFF dans tes données ?
    Si ce n'est pas un champ numérique mais que le T n'est pas là, l'idée reste la même de toute façon.

    A+

  10. #10
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    Le code de Marot_r répond parfaitement à la problématique de la mise en forme.
    As-tu besoin d'un coup de main sur la recherche de doublons ou la cinématique (boucle) ?
    Dans la mesure où il faut de toute façon vérifier l'existence de doublons dans la table de production, inutile de stocker dans une table à part les numéros qui existaient avant cette la nouvelle numérotation ("tOld" est superflue).

    Cordialement,
    Paraffine.
    Re-bonjour Parafine,
    je pense pouvoir me passer de la boucle, surtout que je risque de perdre un peu les utilisateurs à remettre des numéros "anciens", en leur expliquant que c'est la suite de la numérotation actuelle dans un langage différent, ils seront rassurés.
    Je viens d'essayer sur une vielle copie, en enregistrant le dernier numéro à T75009; le code me donne bien le numéro suivant à T7500A.
    Merci beaucoup , vous m'avez aidé grandement avec seulement 1 phrase de code modifiée, Chapeau!
    Voici la modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'avant
    NextFIRNumber = Left(rs![MaxFIR], 1) & (CLng(Right(rs![MaxFIR], 5)) + 1)
    'après
    NextFIRNumber = "T" & Right("00000" & Hex$(Val("&H" & Mid(DMax("FIRNumber", "FIR"), 2)) + 1), 5)
    Merci

  11. #11
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Attention, tu as mentioné un masque donc vérifie que le T est vraiment présent dans les données.
    Il se peut que ce ne soit qu'un affichage sur un champ de type numérique.
    Au fait, as-tu testé à la main que tu pouvais mettre quelque chose comme TFFFFF dans tes données ?
    Si ce n'est pas un champ numérique mais que le T n'est pas là, l'idée reste la même de toute façon.

    A+
    Re-bonjour Marot_r
    tout est ok, le champ concerné est en texte, ton code fonctionne à merveille!
    MERCI

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Attention si tu es en multi-ultilisateur n'oublie pas de gérer les doublons qui peuvent se créer même si c'est extrèmement improbable.
    Le plus simple est de mettre un index unique sur le champ et de gérer l'erreur avec On Error.
    Lorsqu'elles se produit, tu recommences le calcul au début de manière à trouver un nouveau maximum.

    Et si tu considères le sujet clos, merci d'appuyer sur le bouton en bas de discussion.

    A+

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Et si tu atteinds TFFFFF, tu peux passer au calul avec 0-9 et A-Z mais là c'est plus qu'une seule ligne.

    A+

  14. #14
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    Le code de Marot_r répond parfaitement à la problématique de la mise en forme.
    As-tu besoin d'un coup de main sur la recherche de doublons ou la cinématique (boucle) ?
    Dans la mesure où il faut de toute façon vérifier l'existence de doublons dans la table de production, inutile de stocker dans une table à part les numéros qui existaient avant cette la nouvelle numérotation ("tOld" est superflue).

    Cordialement,
    Paraffine.
    Bonjour Paraffine
    Après âpres discussion (je n'ai pas eu gain de cause), je vais solliciter votre aide pour la bouble de recherche.
    Je vais bel et bien devoir utiliser une table "TOld"; je m'explique, les numéros "générés" ne sont pas forcément "commandés"; à terme, les "non commandés" sont donc "libres", et on reprend la numérotation à T00001.
    Je dois donc générer un numéro (ça c'est fait),
    tester qu'il n'est pas utilisé dans ma table TOld ("commandés"), si oui +1, si non ok, je peux l'utiliser.
    Je n'ai aucun doute que vous ayez déjà ce bout de code en tête.
    Merci de toute l'aide que vous pourrez m'apporter.
    Cordialement
    Fleur59

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si tu a la possibilité de créer un table que tu nome T_AutoIncrement tu peu sauvegarder le max("0000FF") de T0000FF
    ainsi ton autoicrément restera unique!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    MsgBox AutoIncrement("000EFF")
    End Sub
    Function AutoIncrement(ByRef V As String, Optional rang As Integer = 0) As String
    V = UCase(V)
    Select Case Asc(Mid(V, Len(V) - rang, 1))
    Case 48 To 56:    Mid(V, Len(V) - rang, 1) = Val(Mid(V, Len(V) - rang, 1)) + 1
    Case 57:  Mid(V, Len(V) - rang, 1) = "A"
    Case 70:   Mid(V, Len(V) - rang, 1) = 0: AutoIncrement V, rang + 1
    Case Else: Mid(V, Len(V) - rang, 1) = Chr(Asc(Mid(V, Len(V) - rang, 1)) + 1)
    End Select
    AutoIncrement = V
    End Function

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Je propose cette solution car j'avoue que je ne comprends pas celle donnée par dysorthographie.
    Et je n'ai pas saisi si tu devais passer en Hex ou pas mais le principe reste le même.

    Je vais supposer que tu as une table tOLd qui contient juste le dernier numéro calculé.
    Ta table est initialisée à T00001

    tOld
    Numero (texte 6 caractères)

    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
    public function CalculerNumero() as string
     
    dim db as dao.database:set db=currentdb
    dim r as dao.recordset:set r=db.openrecordset("tOld", dbOpenDynaset)
    r.edit 'Bloque l'accès jusqu'à ce qu'on ai le numero
    dim numero as string:numero=r![Numero]
     
    do
       numero="T" & Right("00000" & hex$(val("&H" & Mid(Numero, 2))+1)), 5) 'Calcule le prochain numéro
    loop until isnull(DFirst("[Numero]", "TaTableDonnees", "[Numero]=""" & [Numero] & """")) 'Boucle jusqu'à ce qu'on trouve un numéro qui n'existe pas.
     
    r![Numero]=numero 'Mémorise le numéro trouvé.
    r.update 'Energistre le numéro.
     
    r.close:set r=nothing 'Ferme et libère la mémoire
    db.close:set db=nothing 'Ferme et libère la mémoire
     
    CalculerNumero=numero 'Retourne le numéro calculé.
    end function
    A+

  17. #17
    Membre à l'essai
    Femme Profil pro
    Assistante Service Approvisionnement
    Inscrit en
    Décembre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistante Service Approvisionnement
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 44
    Points : 20
    Points
    20
    Par défaut
    Bonjour chers Helpers
    Ma table Told contient les numéros (Txxxxx) que je ne pourrai pas réutiliser
    Merci

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Ma table Told contient les numéros (Txxxxx) que je ne pourrai pas réutiliser
    Pourquoi ? Il va falloir la mettre à jour à chaque nouveau numéro créé :-(.
    Ma solution fonctionne toujours sans avoir à maintenir un inventaire séparé des numéros déjà utilisés.
    L'inventaire c'est la table de données actuelle, si le numéro n'y ai pas alors il est disponible.
    Ai-je manqué quelque chose ?

    Si tu vas avec ma solution remplace tOld par TNumero pour plus de cohérence.

    A+

  19. #19
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Bonsoir Fleur59,
    Je suis bien d'accord avec Marot_r, je vois mal la valeur ajoutée de tOld.
    Ou alors pour "protéger" certains numéros qui ne se trouveraient plus dans ta table "active" (mais pourquoi ? suite à un archivage ?) ; et même dans ce cas, il faut bien vérifier (aussi) dans la table où l'on va insérer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loop until isnull(DFirst("[Numero]", "TaTableDonnees", "[Numero]=""" & [Numero] & """"))
    Très élégant, je trouve, Marot_r ! J'adopterai sûrement dès que j'en aurai l'occasion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je vais bel et bien devoir utiliser une table "TOld"; je m'explique, les numéros "générés" ne sont pas forcément "commandés"; à terme, les "non commandés" sont donc "libres", et on reprend la numérotation à T00001.
    Fleur59, c'est dommage, je trouvais ton choix de laisser les utilisateurs voir une continuité dans les numéros bien plus logique !

    Cela dit, pour une solution "propre", le contrôle des doublons me semble nécessaire, indépendamment du numéro duquel on redémarre...

    Cordialement.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Personnellement dans ce genre de cas j'opte pour une table qui contient le dernier numéro incrémenté! Sous oracle par exemple il existe des trigers!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Incrémentation sous Access
    Par jrege75 dans le forum Access
    Réponses: 6
    Dernier message: 16/04/2013, 17h10
  2. Incrémenter champ Access
    Par RKU01 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/09/2008, 11h19
  3. création clé primaire auto incrémentable SQL ACCESS ?
    Par colorid dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/11/2007, 14h25
  4. Requetes "incrémentées" sous Access
    Par benoit13 dans le forum Modélisation
    Réponses: 2
    Dernier message: 11/07/2007, 08h29
  5. auto-incrément Mysql sur Access
    Par maxireus dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 06/03/2006, 21h20

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