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 :

Aide sur une fonction / pbm de manipulation de caractère


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Points : 55
    Points
    55
    Par défaut Aide sur une fonction / pbm de manipulation de caractère
    salut à tous !!!

    Voila mon problème est le suivant : Je dois facturer mes commandes 2 fois par mois. Lors de la première session tout se passe bien, mes N° de Factures s'incrémente bien dans l'ordre. Lors de la 2nd session, mes N° de Factures recommence au premier n° se qui fait que je me retrouve avec des doublons.

    Voici le code que j'utilise. Il se trouve dans un module

    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
    Function ProchainNumeroPiece(intAnnee As Integer, intMois As Integer)
    Dim strFiltre As String
    Dim test As Variant
    Dim Vartest As Variant
    Dim varAncienNumero As Variant
     
    '---------------------------------------------------------
    ' Récupération du dernier n° utilisé pour le mois en cours
    '---------------------------------------------------------
     
    Vartest = Nz(DMax("Val(Right([calculdate],4))", "Factures"), "Val(Right([calculdate],4))='" & Format(intAnnee, "0000") & Format(intMois, "00") & "'")
     
    '---------------------------------------------------------
    ' Construction du filtre en fonction des paramètres reçus
    '---------------------------------------------------------
     
    strFiltre = "Left([calculdate], 6) ='" & Format(intAnnee, "0000") & Format(intMois, "00") & "'"
    test = Nz(DMax("Val(Right([calculdate], 4))", "temp", strFiltre), 0)
     
    If test = 0 Then
    varAncienNumero = Val(Left(Vartest, 1))
    Else
    varAncienNumero = test
    End If
     
    ProchainNumeroPiece = Nz(varAncienNumero, 0) + 1
    End Function
     
    ' -------------------------------------------------------
    ' Formater la piece
    ' -------------------------------------------------------
    Function FormaterPiece(intAnnee As Integer, intMois As Integer, intNumero As Integer)
    FormaterPiece = Format(intAnnee, "0000") & Format(intMois, "00") & Format(intNumero, "0000")
    End Function
     
    ' -------------------------------------------------------
    ' Calcul du n°de piece avec le formatage
    ' -------------------------------------------------------
    Function ProchainNumeroFormate(intAnnee As Integer, intMois As Integer)
    Dim intNumero As Integer
    intNumero = ProchainNumeroPiece(intAnnee, intMois)
    ProchainNumeroFormate = FormaterPiece(intAnnee, intMois, intNumero)
    End Function
    Est ce un problème de manipulation de caractère?

    J'ai pensé à une solution alternative qui consisterait à stocker dans une table le prochain n° de facture disponible . Est ce une meilleure solution?

    si quelqu'un pouvait m'aider ce serait hyper cool car là je sèche vraiement....

    merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 419
    Points : 508
    Points
    508
    Par défaut
    Salut

    voila la méthode que j'utilise
    un recordset pour récupérer dans la variable DerFacture le dernier no.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim oDb As dao.Database
    Dim oRst As dao.Recordset
    Dim DerFacture As Long
    Set oDb = CurrentDb
    Set oRst = oDb.OpenRecordset("SELECT Max(RefFact) AS DerFact FROM Factures")
    If IsNull(oRst!DerFact) Then
    DerFacture = InputBox("Quel est le dernier no de facture ?")
    Else
    DerFacture = oRst!DerFact
    End If
    oRst.Close
    oDb.Close
    Set oRst = Nothing
    Set oDb = Nothing

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Points : 55
    Points
    55
    Par défaut
    Salut !

    Et tu n'as trouvé de moyen d'éviter la saisie dans un msgbox?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 419
    Points : 508
    Points
    508
    Par défaut
    le msgbox c'est juste pour le cas ou il ne trouve pas de dernier no de facture, vu que je vidange la table de temps a autre.

Discussions similaires

  1. Affichage de l'info bulle d'aide sur une fonction
    Par David Fouejio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/02/2009, 10h19
  2. Aide sur une fonction excel
    Par vanessb dans le forum Excel
    Réponses: 9
    Dernier message: 27/11/2008, 10h11
  3. aide sur une fonction
    Par haymen dans le forum C#
    Réponses: 7
    Dernier message: 11/09/2008, 22h14
  4. Aide sur une fonction sous Visual C++ .NET
    Par mog83 dans le forum C++
    Réponses: 0
    Dernier message: 22/04/2008, 15h17
  5. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40

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