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
    Futur Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Numérotation automatique personnalisée
    Bonjour,

    En navigant un peu partout je vois que l'on peut personnaliser la numérotation automatique depuis les formulaires.

    Pour ma part, je souhaiterais une numérotation automatique pour un champ "Numero_Proposition" puis une autre numérotation automatique d'un autre champ "Numero_Affaire" (de la table T_Base_Affaires) lorsque la commande sera validée par le client.
    En fouillant, j'ai trouvé le code ci dessous qui me semble intéressant
    Le format recherché pour Numero_Affaires est de type YYYY - MM - 0001 (Numéro auto qui reparte à 001 chaque mois)

    J'ai mis ce code dans un module et fait le test suivant dans la case exécution : AutoNumber("T_Base_Affaires", "Numero_Proposition","[YYYY]-[MM].",#01/01/100#) Déjà a ce stade, Access (2013) me répond qu'il y a erreur de compilation : Attendu: =

    Merci pour votre aide

    Jean-Pierre

    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
    50
    ' ---
    ' NUMEROTATION AUTOMATIQUE PERSONNALISEE
    ' ---
    ' Entrée : strTable  <- Nom de la table - Remplacé par T_Base_Affaires
    '          strField  <- Nom du champ contenant le numéro - Remplacé par Numero_Proposition
    '          strFormat <- Gabarit décrivant comment formater
    '                       le numéro.
    '          intDigits <- Nombre de caractères pour le
    '                       numéro proprement dit.
    '          dtDate    <- Date de référence pour le calcul
    '                       de l'année, du mois...
    '
    Function AutoNumber( _
      ByVal  T_Base_Affaires As String, _
      ByVal Numero_Proposition As String, _
      Optional ByVal strFormat As String = "", _
      Optional ByVal intDigits As Integer = 4, _
      Optional ByVal dtDate As Date = #1/1/100#)
     
    ' Quelques variables...
    On Error GoTo AutoNumberErr
    Dim varMarkers As Variant, varMark As Variant
    Dim strCriteria As String
    Dim strNum As String, lngNum As Long, strPart As String
     
    ' Quelques retraitements...
    If dtDate = #1/1/100# Then dtDate = Now()
    strField = "[" & strField & "]"
    strFormat = Replace(strFormat, "'", "''")
     
    ' Marqueurs à remplacer
    varMarkers = Array("YYYY", "YY", "Q", "MM", "WW", "DD")
    For Each varMark In varMarkers
      ' Formater la date et l'injecter dans le template
      strPart = Format(dtDate, varMark, vbMonday, vbFirstFourDays)
      strFormat = Replace(strFormat, "[" & varMark & "]", _
        Format(strPart, String(Len(varMark), "0")))
    Next
     
    ' On cherche la valeur maximale déjà employée dans la table
    strCriteria = strField & " LIKE '" & strFormat & "*'"
    strNum = Nz(DMax(strField, strTable, strCriteria), "")
     
    ' On crée le nouveau numéro
    lngNum = IIf(strNum = "", 1, Val(Mid(strNum, Len(strFormat) + 1)) + 1)
    strFormat = strFormat & Format(lngNum, String(intDigits, "0"))
     
    ' Valeur finale
    AutoNumber = strFormat
    Exit Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AutoNumberErr:
      MsgBox "Erreur : " & Err.Description, vbCritical
      AutoNumber = ""
      Exit Function
    End Function

  2. #2
    Modérateur

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

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

    As-tu regardé ici :
    Numérotation personnalisée des enregistrements dans Access 2010
    http://warin.developpez.com/tutoriel...s/numauto2010/

    C'est un sujet qui revient régulièrement et même si les éléments pris en compte sont parfois différents, le principe reste le même.
    Dans une table tu stockes le compteur et tu fais du code pour le calculer quand tu en as besoin.

    A+
    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.

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    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 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    As-tu regardé ici :
    Numérotation personnalisée des enregistrements dans Access 2010
    http://warin.developpez.com/tutoriel...s/numauto2010/

    C'est un sujet qui revient régulièrement et même si les éléments pris en compte sont parfois différents, le principe reste le même.
    Dans une table tu stockes le compteur et tu fais du code pour le calculer quand tu en as besoin.

    A+
    Oui, en effet, j'ajouterais pour préciser les choses, qu'il faut absolument sauvegarder avec du code VBA le numéro perso (sur avant maj du formulaire par exemple), où un indice de ce numéro perso dans la table.

    Car sinon, si les numéros sont calculés et dynamiques, ils vont évoluer au gré des suppressions d'enregistrements...

    Cdlt,
    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
    Futur Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    As-tu regardé ici :
    Numérotation personnalisée des enregistrements dans Access 2010
    http://warin.developpez.com/tutoriel...s/numauto2010/

    C'est un sujet qui revient régulièrement et même si les éléments pris en compte sont parfois différents, le principe reste le même.
    Dans une table tu stockes le compteur et tu fais du code pour le calculer quand tu en as besoin.

    A+
    Bonjour et merci de ton aide.
    J'ai effectivement regardé le tuto mais cela ne fonctionne pas car je n'arrive pas a imposer le format de format de mon champ... donc tant je ne change pas de mois cela fonctionnerais... mais ce n'est pas bon.
    le format que je souhaite serais du meme type que clui proposé dans le tuto (j'avance à petits pas) = type "FA" & Format([DateFacture];"yymm") & Format([Indice];"000") que ACCES me transforme en : "=F"a" & For"mat"([D"ate\Fact"ur"e"];yy"mm") & For"mat"([I"n"di"ce"];000)" lorsque je place ce type dans le format du champ de la table ou du formulaire donc évidement ca marche moins bien...
    Une idée?
    Jean-Pierre

  5. #5
    Modérateur

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

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

    Bonjour.

    Ce n'est pas un format à appliquer au champ mais une formule de calcul.
    Il te faut une variable qui va récupérer le résultat et ensuite l'enregistrer dans ta table.
    En VBA ça ressemble à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim NumAuto as string
    numAuto="FA" & Format([DateFacture], "yymm") & Format([Indice], "000")
    dans une requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    NumAuto: "FA" & Format([TaTable].[DateFacture]; "aamm") & Format([Indice]; "000")

    et dans un champ calculé dans un formulaire (ou un rapport) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="FA" & Format([DateFacture]; "aamm") & Format([Indice]; "000")
    Note aussi que quand tu es dans du code (VBA, SQL), pour format, il faut utiliser les symboles anglais (y, m, d) et la virgule comme séparateurs de paramètres et quand tu es dans l'interface (concepteur de requête, formulaire, rapport) il faut utiliser les symboles français (a, m, j) et le point virgule à la place de la virgule.

    A+
    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.

  6. #6
    Membre régulier Avatar de patou9999
    Homme Profil pro
    Formateur
    Inscrit en
    Janvier 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Formateur

    Informations forums :
    Inscription : Janvier 2009
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    bonjour,

    Est-ce que le champ [indice] s'alimente automatiquement ?
    Très cordialement, en vous remerciant
    La structure, encore la la structure et toujours la structure....
    La rigueur et la méthode sont les deux piliers colossaux de l'architecture d'une oeuvre. (J.S.BACH)

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 Personnalisée
    Par Dhumkazaar dans le forum Access
    Réponses: 4
    Dernier message: 10/05/2006, 20h34

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