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 :

Numérotation Automatique Personnalisée


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 37
    Points
    37
    Par défaut Numérotation Automatique Personnalisée
    Bonjour,

    Travaillant dans une reserve naturelle et étant chargé du développement de plusieurs bases de données en vue de leur exploitation sous SIG, j'aurais besoin de développer un système de numérotation automatique personnalisé du type :

    XXX-0
    XXX-1
    XXX-2
    XXX-3

    Ou XXX = un ensemble de caractère fixe, il n'y aurait que le chiffre suivant qui évoluerait automatiquement....

    Est ce que quelqu'un aurait une solution à mon problème ?

  2. #2
    Membre habitué

    Inscrit en
    Mars 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 92
    Points : 127
    Points
    127
    Par défaut
    Bonjour,
    Il faudra l'adapter à ton cas, mais voici ce que je propose:

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Function AttribNumero(Champ As String, Table As String, Lettre As String, Optional FormatDuNb As Integer = 4) As String
    'Attribution d'un numéro d'analyse de type alphanumérique:AAxx/yyyy
    'où AA est un préfixe, xx l'année et yyyy le numéro d'analyse sur 4 chiffres
    On Error GoTo Err_AttribNumero
       Dim Bds As DAO.Database
       Dim Rst As DAO.Recordset
       Dim PNo As Long
       Dim MaPos As Integer
       Dim FormatNb As String
       Dim PDeb As String
       Dim ValNum As String
       Dim i As Integer
       Set Bds = CurrentDb()
       Dim Lg As Integer
       Rq = "SELECT MAX(" & Champ & ") as ValMax FROM " & Table & " WHERE " & Champ & " Like '" & Lettre & "*' ;"
       Set Rst = Bds.OpenRecordset(Rq)
       If Not IsNull(Rst!ValMax) Then
          ValNum = Rst!ValMax
          If Len(ValNum) > 0 Then
             'Recherche de la barre de séparation:"/"
             MaPos = InStr(1, ValNum, "/", 1)
             If MaPos > 0 Then
                Lg = Len(ValNum) - MaPos
                PDeb = Left(ValNum, MaPos)
                PNo = Right(ValNum, Lg) + 1
             Else
                PDeb = ""
                PNo = CLng(ValNum) + 1
             End If
             For i = 1 To Lg
                FormatNb = FormatNb & "0"
             Next
             AttribNumero = PDeb & Format(CStr(PNo), FormatNb)
          End If
          Exit Function
       Else
          FormatNb = Format(FormatNb, "0000")
          PDeb = Right(CStr(Year(Date)), 2)
          AttribNumero = Lettre & PDeb & "/" & Format(1, FormatNb)
       End If
    Exit_AttribNumero:
       Set Rst = Nothing
       Set Bds = Nothing
       Exit Function
    Err_AttribNumero:
        MsgBox "Fct AttribNumero " & vbCrLf & Err.Description
        Resume Exit_AttribNumero
    End Function
    En espérant t'avoir aidé

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT Max("xxx-" & (CLng(Right([monchamp],Len([monchamp])-4))+1)) AS nclef
    FROM matable
    WHERE (((monchamp) Is Not Null));
    Elle est pas belle la vie ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Désolé de ne pas avoir repondu plus tot, mais j'ai passé les quelques jours précedant à decortiquer sans succès les codes que vous m'avez soumis... Je me dois de souligner que je débute en VBA et que je ne connait pas encore toutes les fonctions, meme si j'y vois plus clair aujourd'hui, et que je ne sais pas à quel évenement attacher ces codes....

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    L'événement où il faut l'attacher est : Avant Insertion (BeforeInsert) au niveau du formulaire.

    Attention avec le code ci-dessus, il ne fonctionne correctement QUE si tu es en monoutilisateur. En multi-utilisateur il peut entrainer le calcul de 2 fois le mëme numéro.

    Donc il te faut ajouter du code pour gérer les doublons de numéro dans le form et rappeler le calcul tant que tu es en erreur.

    Tu peux aussi ajouter le code ci-dessous, toujours dans l'evenement BeforeUpdate du form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        If EstRempli() Then
     
                If prmFormFacture.NewRecord Then
                    Call CalculerNouveauNumDossier(prmFormFacture)
                End If
     
            Else
                'Aucun champ de saisi rempli, pas de création
                Cancel = True
        End If
    EstRempli() est fonction qui vérifie que l'utilisateur a bien entré des données dans tous les champs de saisie, ça évite de perdre un numéro.

    Remplace CalculerNouveauNumDossier par ta fonction de calcul.
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [AC-2013] Numérotation automatique personnalisée
    Par 24071959 dans le forum Access
    Réponses: 24
    Dernier message: 26/03/2015, 15h38
  2. [AC-2007] Numérotation Automatique personnalisée
    Par Rogatic dans le forum VBA Access
    Réponses: 7
    Dernier message: 26/06/2012, 12h55
  3. Numérotation automatique personnalisée
    Par pat_che dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2008, 09h05
  4. Numérotation automatique personnalisée
    Par Nancyfr dans le forum Access
    Réponses: 0
    Dernier message: 24/07/2007, 09h52
  5. Numérotation automatique selon les utilisateurs
    Par Safaritn dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 12/08/2005, 14h11

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