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 :

Numerotation alpha numerique


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut Numerotation alpha numerique
    Bonjour,

    Suite à la lecture de certaines discussions relatives à la numérotation alpha numerique sur le forum j'ai essayé de créer le code suivant pour mon frmtblVente :

    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
     
    Private Sub CmdNumeroFacture_Click()
    Set rs = CurrentDb.OpenRecordset("tblVente", dbOpenSnapshot)
    rs.MoveLast
     
    'YYMMxxx
    LastID = rs!NumeroFacture
    Annee = Format(Now(), "yy")
    Mois = Format(Now(), "MM")
     
    If Annee = Left(LastID, 2) Then
        NewID = Val(Right(LastID, 3)) + 1
    Else
        NewID = 1
    End If
    NewID = Format(NewID, "000")
    NumeroFacture = Annee & Mois & NewID
     
    Refresh
    End Sub
    Ce code fonctionne tant qu'une valeur est inscrite dans le champ (Ex : 0809001, 0809002 pour le suivant et ainsi de suite...).

    Mais comme mon Frm est également utilisé pour la vente comptoir (donc pas de demande de numero de facture), le champ reste vide.
    Lorsque je demande à nouveau un numero de facture, ma numerotation débute à 0809001.

    Quelqu'un pourrait-il m'aider.


    Freddy

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,

    Dans un premier temps, déclares tes variables (LastID, NewID, Annee...), cela t'évitera des erreurs de frappe ou des pb de conversion.


    Mais comme mon Frm est également utilisé pour la vente comptoir (donc pas de demande de numero de facture), le champ reste vide.
    Lorsque je demande à nouveau un numero de facture, ma numerotation débute à 0809001.
    Que veux-tu dire? Précises quel est le comportement attendu et ce que tu obtiens en réalité. Essayes une exécution pas à pas pour mieux cerner ton problème.
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut Numerotation alpha numerique
    Bonsoir Mout1234,


    Ci-dessous tu trouveras un extrait de ma tblVente, composé des champs : VenteID, ClientID, NumeroFacture, DateVente, Port, Memo.

    - voir pièce jointe en annexe


    Toutes les ventes dont le champ NumeroFacture est vide sont des ventes comptoir.

    Si un client désire une facture alors le champ NumeroFacture est alimenté via un bouton de commande placé dans mon FrmtblVente : CmdNumeroFacture qui donne un numero de facture automatique composé de : année + mois + numero (02 + 02 + 03 chiffres) = exemple 0809168 (Voir code ci-dessus).

    Lors des essais, j'ai obtenu les numeros suivants 0809169, puis 0809170..., j'ai également testés les différents mois, l'année 2009, tout semble fonctionner correctement lorsque le dernier champ est complété ; mais lorsque le dernier champ est vide (Exemple VenteID_822), la vente suivante (VenteID_823) avec facture indiquera le numero 0809001 ! Or je souhaiterai qu'il marque : 0809170 car ma dernière facture en date était la 0809169.

    J'espère que j'ai été plus précis cette fois.

    Mon souhait, la traduction en code de : si dernier enregistrement est vide, aller au suivant jusqu'au moment où il trouve un champ complété.

    A bientôt


    Freddy
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Normal puisque ton MoveLast dans ce cas te place dans un enregistrement vide!!
    idée, parcourir tous les enregistrements (boucle avec Move next) et une condition et lire la valeur du champ NumeroFacture si cette valeur n'est pas nulle! la stocker dans une variable qu'il faut incrémenter par la suite (comme dans ton code)!
    J'espère que d'autres idées cartesiennes seraient là
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Bonjour,


    Je vais suivre ton idée.

    Mais avant, je dois effectuer des recherches car mes notions en language VBA sont au stade débutant.

    Je vous tiendrai au courant de l'évolution de ma db.


    A+


    Freddy

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par KADOMINO Voir le message
    Bonsoir Mout1234,


    Ci-dessous tu trouveras un extrait de ma tblVente, composé des champs : VenteID, ClientID, NumeroFacture, DateVente, Port, Memo.

    - voir pièce jointe en annexe


    Toutes les ventes dont le champ NumeroFacture est vide sont des ventes comptoir.

    Si un client désire une facture alors le champ NumeroFacture est alimenté via un bouton de commande placé dans mon FrmtblVente : CmdNumeroFacture qui donne un numero de facture automatique composé de : année + mois + numero (02 + 02 + 03 chiffres) = exemple 0809168 (Voir code ci-dessus).

    Lors des essais, j'ai obtenu les numeros suivants 0809169, puis 0809170..., j'ai également testés les différents mois, l'année 2009, tout semble fonctionner correctement lorsque le dernier champ est complété ; mais lorsque le dernier champ est vide (Exemple VenteID_822), la vente suivante (VenteID_823) avec facture indiquera le numero 0809001 ! Or je souhaiterai qu'il marque : 0809170 car ma dernière facture en date était la 0809169.

    J'espère que j'ai été plus précis cette fois.

    Mon souhait, la traduction en code de : si dernier enregistrement est vide, aller au suivant jusqu'au moment où il trouve un champ complété.

    A bientôt


    Freddy


    C'est plus clair ainsi et je te vois mal parti avec ton code existant. Comme le dit mercatog un simple movelast ne peut répondre à ton souci. De toute façon, tu ne sembles pas utiliser ton recordet dans la suite du code

    Ton code doit en fait rechercher la valeur la plus grande de numéro déjà généré pour l'année et mois en cours....

    Quelque chose du genre (non testé)
    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
     
    Dim sPrefixe as string
    DIm iNum    as integer
    DIm sDernierNum as string
     
    sPrefixe = Format$(Date,"YYMM")
     
    sDernierNum= Nz(DMax("NumeroFacture","tblVente","Left(NumeroFacture,4)='" & sPRefixe & "'"),"")
     
    IF sDernierNum = "" THEN
       iNum = 0
    ELSE
       iNum = CInt(Right(sDernierNum,3))
    END IF
     
      iNum = iNum +1
      sNum = sPrefixe & Format$(iNum,"000")
     
     
     
      'Application du nouveau numéro de facture au champ de l'enregistrement courant dans le formulaire
       ME!NumeroFacture= sNum
     
       'à toi de voir si tu veux forcer à enregistrer dans la foulée
       Docmd.Runcommmand acCmdSaveRecord
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Belgique

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Bonjour Mout1234,

    Je ne peux dire qu'un mot : genial

    Merci beaucoup.

    A+


    Freddy

  8. #8
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par KADOMINO Voir le message
    Bonjour Mout1234,

    Je ne peux dire qu'un mot : genial

    Merci beaucoup.

    A+


    Freddy
    Vas-y redis-le encore
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

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

Discussions similaires

  1. [WD12] Trier de l'alpha et du numerique dans une chaine
    Par JOlivier34 dans le forum WinDev
    Réponses: 1
    Dernier message: 07/07/2009, 16h42
  2. numerotation alpha-numérique avec perl
    Par perl4user dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2009, 10h00
  3. Changer valeur alpha en numerique
    Par merocean dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/11/2008, 16h57
  4. Convertion Alpha en numerique
    Par Ljosse dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/10/2008, 11h30
  5. condition: ne garder que certains alpha-numerique
    Par bibi5883 dans le forum Débuter
    Réponses: 8
    Dernier message: 12/09/2007, 16h30

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