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 :

Format date dans un numéro automatique


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Par défaut Format date dans un numéro automatique
    Bonjour,
    Je fais appel à votre communauté pour m'aider concernant un petit problème que j'ai sur Access.
    En fait, je souhaiterais avoir (pour mes devis) un numéro automatique sous cette forme : XXX-MM-AAAA X serait le n° de devis (ex: 001 ou 123), M serait le mois et A l'année. Par exemple, aujourd'hui je fais mon premier devis, ce sera 001-04-2014.
    Je ne veux pas que les numéros se remettent à zéro chaque mois.

    J'espère avoir été clair dans mes explications et que vous pourrez m'apporter votre aide.
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,

    As-tu eu la bonne idée de prévoir une clé de type NuméroAuto dans la table de ton formulaire ?

    Si oui, comment s'appelle-t-elle ?

    Comment s'appelle le contrôle de ton formulaire qui doit recevoir le N° de devis ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Par défaut
    Merci de ta réponse,
    Oui en fait dans ma table j'ai N°ListDevis qui est numéro automatique et j'ai aussi un champs N°Devis dans lequel j'afficherais la valeur que je souhaite afficher (XXX-MM-AAAA)

  4. #4
    Chroniqueur Actualités
    Avatar de Michael Guilloux
    Homme Profil pro
    Data Consultant
    Inscrit en
    Juillet 2013
    Messages
    2 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Data Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2 976
    Billets dans le blog
    2
    Par défaut ChampDate_AfterUpdate()
    salut,

    Je crois que le code qui suit peut résoudre ton problème à quelques retouches près. De toute façon, l'idée y est.
    Tu dois avant tout traiter le nombre de caractères pour ne pas avoir par exemple 1-1-2014 comme numéro de dévis au lieu de 001-01-2014.

    Crée avant tout dans table un champ texte NumeroDevis
    Crée ensuite une procédure AfterUpdate sur ton champ date pour traiter le nombre de caractères avant de générer le numéro de dévis

    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
    Private sub ChampDate_AfterUpdate()
    Dim NumMois, NumID as Variant 'le mois et l'identifiant
    Dim Mois, ID as Variant 'le mois et l'ID après les traitements éventuels du nombre de caractères
     
    NumMois=Month(Me.ChampDate.value)
    NumID=Me.ChampID.value
     
    'S' assurer que le mois soit sur 2 caratères
    If len(NumMois)=1 Then
    Mois= "0" & NumMois
    Else
    Mois= NumMois
    End if
     
    'S'assurer que la valeur ID soit sur 3 caractères, selon ta modélisation, je suppose que tu ne peux pas avoir 'plus de 999 factures
     
    If len(NumID)=1 Then
    ID="00" & NumID
    ElseIf len(NumID)=2 Then
    ID="0"& NumID
    Else
    ID=NumID
    End if
     
    'Gérons maintenant le numéro de dévis lui-même 
    Me.NumeroDevis.value= ID & "-"& Mois &"-"& Me.Year(ChampDate.Value)
     
    End sub
    NB! Dans ce cas l'ID est ton numéro de dévis (celui sous la forme XXX).
    Maintenant, si tu désires le gérer toi-même, c'est à dire, si tu le mets au type numérique au lieu de NumAuto, ça sera plus facile, parce que tu pourras gérer toi-même le format 3 caractères, et ton code sera simplifié. Mais vaut mieux écrire quelques lignes de code une seule fois au lieu de se demander 998 fois, quel est le numéro du dévis précédent.
    Prions maintenant pour que ça marche!

    Grand Merci à toi Robert pour ta vigilence
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Voici ce que je te propose : j'ai supposé que ta table s'appelle tDevis.

    Dans l'événement Sur activation du formulaire, ce code :

    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
    Option Compare Database
    Option Explicit
     
    Private Sub Form_Current()
      Dim lDerCle As Long
      Dim sDerNum As String
      Dim iDerOrdre As Integer
      If Me.NewRecord Then    's'il s'agit d'un nouveau
        'Recherche du dernier enregistrement créé
        lDerCle = DMax("N°ListeDevis", "tDevis")
        'Dernier N° attribué
        sDerNum = DLookup("N°Devis", "tDevis", "N°ListeDevis =" & lDerCle)
        'Dernier N° d'ordre
        iDerOrdre = Left(sDerNum, InStr(sDerNum, "-") - 1)
        'Construction du N°Devis suivant
        Me.N°Devis = Format(iDerOrdre + 1, "00#") & Format(Date, "-MM-YYYY")
      End If
     
    End Sub
    N.B. Peu importe si le nombre de devis dépasse 999.
    Pour amorcer la pompe, introduis manuellement dans ta table vide un devis N° 0-0 que tu supprimeras ensuite.

    Signale-moi si tu ne comprends pas tout le code malgré les commentaires.

  6. #6
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Par défaut
    Merci à vous deux pour votre réponse, je suis désolé mais je suis encore débutant et je ne comprend presque rien à vos codes, est ce que vous pourriez me détaillez ce que je dois faire précisément car en plus avec vos deux réponses, je suis un peu perdu, lequel dois-je utiliser ?

    Merci

  7. #7
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2005
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2005
    Messages : 164
    Par défaut
    Citation Envoyé par kkm90 Voir le message
    salut,

    Je crois que le code qui suit peut résoudre ton problème à quelques retouches près. De toute façon, l'idée y est.
    Tu dois avant tout traiter le nombre de caractères pour ne pas avoir par exemple 1-1-2014 comme numéro de dévis au lieu de 001-01-2014.

    Crée avant tout dans table un champ texte NumeroDevis
    Crée ensuite une procédure AfterUpdate sur ton champ date pour traiter le nombre de caractères avant de générer le numéro de dévis

    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
    Private sub ChampDate_AfterUpdate()
    Dim NumMois, NumID as Variant 'le mois et l'identifiant
    Dim Mois, ID as Variant 'le mois et l'ID après les traitements éventuels du nombre de caractères
     
    NumMois=Month(Me.ChampDate.value)
    NumID=Me.ChampID.value
     
    'S' assurer que le mois soit sur 2 caratères
    If len(NumMois)=1 Then
    Mois= "0" & NumMois
    Else
    Mois= NumMois
    End if
     
    'S'assurer que la valeur ID soit sur 3 caractères, selon ta modélisation, je suppose que tu ne peux pas avoir 'plus de 999 factures
     
    If len(NumID)=1 Then
    ID="00" & NumID
    ElseIf len(NumID)=2 Then
    ID="0"& NumID
    Else
    ID=NumID
    End if
     
    'Gérons maintenant le numéro de dévis lui-même 
    Me.NumeroDevis.value= ID & "-"& Mois &"-"& Me.Year(ChampDate.Value)
     
    End sub
    NB! Dans ce cas l'ID est ton numéro de dévis (celui sous la forme XXX).
    Maintenant, si tu désires le gérer toi-même, c'est à dire, si tu le mets au type numérique au lieu de NumAuto, ça sera plus facile, parce que tu pourras gérer toi-même le format 3 caractères, et ton code sera simplifié. Mais vaut mieux écrire quelques lignes de code une seule fois au lieu de se demander 998 fois, quel est le numéro du dévis précédent.
    Prions maintenant pour que ça marche!

    Grand Merci à toi Robert pour ta vigilence

  8. #8
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2005
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2005
    Messages : 164
    Par défaut Format Date
    Bonjour
    J'aide tristan a faire sa base.
    J'ai voulu mettre en place votre procédure mais je bogue sur year
    Manque t-il quelquechose dans les declartions ou definitions?
    Merci de votre aide
    Guy

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

Discussions similaires

  1. [C#][2.0][SQL Server 2005] Format date dans GridView
    Par just1980 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 13/11/2006, 22h45
  2. Format date dans excel
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/11/2006, 10h06
  3. Format Date dans Oracle :(
    Par uzumaki_naruto dans le forum Oracle
    Réponses: 3
    Dernier message: 25/08/2006, 15h45
  4. Format date dans état après migration
    Par guiguikawa dans le forum Access
    Réponses: 10
    Dernier message: 21/06/2006, 13h27
  5. Réponses: 3
    Dernier message: 21/02/2005, 00h29

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