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

  1. #1
    Membre du Club
    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
    Points : 46
    Points
    46
    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 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    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 ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre du Club
    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
    Points : 46
    Points
    46
    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 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2 888
    Points : 87 206
    Points
    87 206
    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 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    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.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  6. #6
    Membre du Club
    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
    Points : 46
    Points
    46
    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
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Regarde la db en annexe et ajoute un nouvel enregistrement au formulaire le N° voulu s'affiche automatiquement.

    Pour voir où j'ai logé le code, enfonce <ALT> + <F11> le module du formulaire s'affiche.


    ---------

    D'une manière générale, pour se documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
    - afficher l'objet en mode construction ;
    - cliquer sur la propriété => elle se met en surbrillance ;
    - enfoncer la touche <F1>
    => l'aide Access s'ouvre à la bonne page.
    De même dans le code, placer le curseur de la souris et enfoncer F1.
    On peut aussi :
    • ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
    • ouvrir la fenêtre d'exécution (<Ctrl> + G), saisir un mot-clé, y placer le curseur de la souris et enfoncer F1.
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  8. #8
    Membre du Club
    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
    Points : 46
    Points
    46
    Par défaut
    Super, ça marche parfaitement, milles merci pour cette aide, je met le sujet comme résolu.

    Encore merci.

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Si vous utilisez Access 2010, préférez une gestion au niveau de la table via les macros de données

    http://warin.developpez.com/tutoriel...s/numauto2010/

  10. #10
    Membre du Club
    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
    Points : 46
    Points
    46
    Par défaut
    Je suis sur Access 2007

  11. #11
    Membre du Club
    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
    Points : 46
    Points
    46
    Par défaut
    Petit problème :
    Ta solution marche parfaitement pour les devis mais pour les factures il y a un problème (j'ai un sous formulaire factures dans le formulaire devis), je m'explique :
    je suis sur le devis 001-04-2014, lorsque je fait la première facture, il n'y a pas de problème, c'est la 001-04-2014. Par contre si je crée un autre devis, le 002-04-2014, la facture qui se crée n'est pas la 002 mais c'est la 003-04-2014.

    Quelqu'un aurai la solution ? Sachant que lorsque je vais dans la table factures, la 001 est bien associé au devis 001, la 003 au devis 002 mais la 002 n'est associé à aucuns devis.

    J'espère que vous pourrez m'aider.

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Je n'ai rien compris !
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

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

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2 888
    Points : 87 206
    Points
    87 206
    Billets dans le blog
    2
    Par défaut Modélisation
    Slt,
    Je crois qu'il doit avoir un petit soucis au niveau de ta modélisation
    je suis sur le devis 001-04-2014, lorsque je fait la première facture, il n'y a pas de problème, c'est la 001-04-2014. Par contre si je crée un autre devis, le 002-04-2014, la facture qui se crée n'est pas la 002 mais c'est la 003-04-2014
    Quelle type de relation y a-t-il entre tes factures et devis (1:1 ou 1:n)?
    Au regard de ce que tu dis, il me semble qu'il y a une relation de type 1:1 entre facture et devis, ce qui ne semble pas réaliste, à moins que ça soit un cas d'école puisqu'un devis peut être réglé plusieurs fois donc induit plusieurs factures. Dans ce cas, un devis 002 peut engendrer des factures 002, 003 et 004 par exemple.
    Sachant que lorsque je vais dans la table factures, la 001 est bien associé au devis 001, la 003 au devis 002 mais la 002 n'est associé à aucuns devis.
    ça veut donc dire que ta modélisation autorise qu'il y ait des factures sans devis (Relation Factures-Devis)
    Quelle est donc le type de relations qu'il y a entre factures et devis? Et comment est ce que tu traduis cela au niveau des tables Factures et Devis?
    Essaie de jeter d'abord un coup d'oeil sur tes relations et après je crois que la méthode de Claude pourra parfaitement résoudre ton problème.

    J'espère que verras le problème!
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2005
    Messages : 164
    Points : 99
    Points
    99
    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

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2005
    Messages : 164
    Points : 99
    Points
    99
    Par défaut Format Date
    Citation Envoyé par ClaudeLELOUP Voir le message
    Regarde la db en annexe et ajoute un nouvel enregistrement au formulaire le N° voulu s'affiche automatiquement.

    Pour voir où j'ai logé le code, enfonce <ALT> + <F11> le module du formulaire s'affiche.


    ---------

    D'une manière générale, pour se documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
    - afficher l'objet en mode construction ;
    - cliquer sur la propriété => elle se met en surbrillance ;
    - enfoncer la touche <F1>
    => l'aide Access s'ouvre à la bonne page.
    De même dans le code, placer le curseur de la souris et enfoncer F1.
    On peut aussi :
    • ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
    • ouvrir la fenêtre d'exécution (<Ctrl> + G), saisir un mot-clé, y placer le curseur de la souris et enfoncer F1.

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2005
    Messages : 164
    Points : 99
    Points
    99
    Par défaut Foramat date
    Bonjour
    J'aide Tristan a faire sa base
    La procedure fonctionne bien avec date.
    Comment faire pour prendre en consideration un champ date comme par exemple DateDevis.
    J'ai essayé en remplaçant date par DateDevis mais cela ne fonctionne pas.
    Merci de votre aide

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2005
    Messages : 164
    Points : 99
    Points
    99
    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

  18. #18
    Membre du Club
    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
    Points : 46
    Points
    46
    Par défaut
    J'ai trouvé la solution avec l'aide de castours, voici le code qui est assez simple par rapport à ceux que vous me proposiez
    Private Sub N°Devis_Click()
    Me.N°Devis = Format([N°ListDevis], "00#") & Format(Date, "-MM-YYYY")
    End Sub

+ 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