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 :

Incrémentation Compteur NuméroAuto


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Incrémentation Compteur NuméroAuto
    Je voudrais créer mon numéroauto dans un champs texte avec des conditions de date...

    J'ai en gros 5 criteres différents (champs [DATE]):
    - 24/12
    - 25/12
    - 31/12
    - 01/01
    - N'importe quelle date excepté les précédentes

    J'ai une Table (MAIN) contenant 3 champs : N°(NuméroAuto), DATE et NUMERO(Entier)

    J'ai crée un formulaire contenant les champs DATE et NUMERO je voudrais que lorsque je tape une date il me compte les enregistrements séparemment suivant les dates...

    ex:

    N° DATE NUMERO
    1 24/12/2006 001
    2 12/03/2006 001
    3 25/12/2006 001
    4 24/12/2006 002
    5 01/01/2006 001
    6 24/12/2006 003
    7....

    J'ai réussi à faire l'incrémentation du champs NUMERO mais impossible de mettre les critères dans le code..voici ce que j'ai fait :

    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 Form_BeforeInsert(Cancel As Integer)
     
    Dim rs As DAO.Recordset
    Dim db As DAO.Database
     
    Set db = CurrentDb()
    Set rs = db.OpenRecordset(Me.RecordSource, dbOpenSnapshot)
     
       If rs.EOF Then
       Me!NUMERO = 1
       Else
       rs.MoveLast
       Me!NUMERO = rs!NUMERO + 1
       End If
     
    rs.Close
    Set rs = Nothing
    Set db = Nothing
     
    End Sub
    Merci de votre aide et désolé pour l'orthographe

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Je dois avoir l'esprit embrumé, mais je ne comprends pas ce que tu veux faire.
    Je voudrais créer mon numéroauto
    Dans numéroauto, il y a auto(matique)
    dans un champs texte
    numéroauto est un type de champ
    avec des conditions de date
    J'ai vu qu'il y avait 5 catégories de dates, mais pas les conséquences attendues sur ce "numéroauto"?

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 29
    Points
    29
    Par défaut
    Je pense qu'il faut faire une requette sélection sur la date avec un tri sur numéro et ajouter 1 au supérieur.

    Salut et contact-moi si ce n'est pas assez clair.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    en gros je voudrais rajouter un code VBA sur le formulaire dans la zone texte de la date pour que dès que je rentre une date il me genere un numéro commencant par 001 puis incrementer de 1 en 1 mais la numérotation doit se faire suivant les 5 catégories...
    il me faut des numérotations indépendantes suivant les dates...

    si par exemple j'ai 7 enregistrement dans ma table dont 5 enregistrement du 24/12 ( NUMERO de 001 à 005) et 2 enregistrement du 25/12 (NUMERO de 001 à 002)

    dès l'instant ou je rentre une date il doit verifier le dernier enregistrement comprenant la meme date, recuperer son NUMERO et rajouter +1

    voila

  5. #5
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Bonjour,

    dans ce cas là ça ne s'appel plus un numéro auto, c'est plutot à numéro qui est fabriqué automatiquement par toi grâce à un petit code.

    bonne chance

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour

    Je comprends mieux. Avant de te proposer une solution encore deux questions sur les catégories de dates.
    Les deux dates 24/12/2005 et 24/12/2006 appartiennent-elles à la même catégorie?
    Dans le formulaire Numéro est un contrôle texte, mais relié par sa source à un champ de la table. Ce champ dans la table est de quel type texte ou numérique?

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par pgz
    Bonjour

    Je comprends mieux. Avant de te proposer une solution encore deux questions sur les catégories de dates.
    Les deux dates 24/12/2005 et 24/12/2006 appartiennent-elles à la même catégorie?
    Dans le formulaire Numéro est un contrôle texte, mais relié par sa source à un champ de la table. Ce champ dans la table est de quel type texte ou numérique?

    pgz
    oui tout à fait tu as compris chaque année doit marcher de la meme facon... tous les 24 décembre doivent rester ensemble...

    sinon en ce qui concerne les type de champs :

    dans la table :

    DATE est sous format date saisie avec masque type XX/XX/XXXX mais affichage en toute lettre type lundi 12 octobre 2006

    NUMERO est de type Numérique Entier sans décimale sous forme XXX incrémenté de 1 en 1 grace au code que je n'arrive pas à trouver...

    merci beaucoup pour ton aide...

  8. #8
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Maintenant c'est clair. Je te propose une solution. C'est juste l'idée, à débuguer.
    Je considère que la table s'appelle MaTable, le champ numéro s'appelle Numéro, le champ date s'appelle MaDate ( et pas Date à cause du risque de confusion avec date du jour).
    Dans le formulaire, le contrôle texte contenant le numéro s'appelle Numéro et le contrôle date s'appele MaDate.

    Procédure à attacher à l'évènement sur mise à jour de MaDate :
    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
    Dim sCond(1 à 4) as string
    If Isnull(Me.MaDate) Then exit sub
    sCond(1) = "(Day(MaDate) = 24 AND Month(MaDate) = 12)"
    sCond(2) = "(Day(MaDate) = 25 AND Month(MaDate) = 12)"
    sCond(3) = "(Day(MaDate) = 31 AND Month(MaDate) = 12)"
    scond(4) = "(Day(MaDate) = 1 AND Month(MaDate) = 1)"
     
    If Day(Me.MaDate) = 24 And Month(Me.MaDate) = 12
        Me.Numéro = Nz(DMax("Numéro","SELECT * FROM MaTable Where " & sCond(1)),0) +1
    ElseIf Day(Me.MaDate) = 25 And Month(Me.MaDate) = 12
        Me.Numéro = Nz(DMax("Numéro","SELECT * FROM MaTable Where " & sCond(2)),0) +1
     
    ElseIf ....
        ...
    ELseIf ....
        ....
    Else
       Me.Numéro = Nz(DMax("Numéro","SELECT * FROM MaTable Where NOT " & sCond(1) & " AND NOT " & sCond(2) & " AND NOT " & sCond(3) " AND NOT " & sCond(4)),0) +1
    End If
    A mettre au point.

    Bon courage,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  9. #9
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Sinon, ton code va être un peu difficile q'il doit faire des tests de cette manière pour tous les jours possible, et tous les mois possibles... sur toutes les années possibles...

    il y a une solution via les requêtes correllées
    une autre avec DCount

    Les deux sont expliquées dans la FAQ.

  10. #10
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Sinon, ton code va être un peu difficile q'il doit faire des tests de cette manière pour tous les jours possible, et tous les mois possibles... sur toutes les années possibles...
    Il n'y a que 5 catégories de dates, donc sCond (1 à 4) , et le reste...

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    alors voila grace à votre aide j'ai réussi...
    je me suis concentré sur le code que j'avais au départ et je me suis aidé des exemples que vous m'avez donné voila ce que ca donne si ca peut interesser quelqu'un...

    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
    51
    52
    53
    54
    55
    56
    Private Sub DATE_AfterUpdate()
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim rs3 As DAO.Recordset
    Dim rs4 As DAO.Recordset
    Dim db As DAO.Database
     
    Set db = CurrentDb()
    Set rs1 = db.OpenRecordset("SELECT COMMANDES.NUMERO, COMMANDES.DATE, COMMANDES.NUMCOMM, Day([DATE]) AS JOUR, Month([DATE]) AS MOIS FROM COMMANDES WHERE (((Day([DATE]))=24) AND ((Month([DATE]))=12))")
    Set rs2 = db.OpenRecordset("SELECT COMMANDES.NUMERO, COMMANDES.DATE, COMMANDES.NUMCOMM, Day([DATE]) AS JOUR, Month([DATE]) AS MOIS FROM COMMANDES WHERE (((Day([DATE]))=25) AND ((Month([DATE]))=12))")
    Set rs3 = db.OpenRecordset("SELECT COMMANDES.NUMERO, COMMANDES.DATE, COMMANDES.NUMCOMM, Day([DATE]) AS JOUR, Month([DATE]) AS MOIS FROM COMMANDES WHERE (((Day([DATE]))=31) AND ((Month([DATE]))=12))")
    Set rs4 = db.OpenRecordset("SELECT COMMANDES.NUMERO, COMMANDES.DATE, COMMANDES.NUMCOMM, Day([DATE]) AS JOUR, Month([DATE]) AS MOIS FROM COMMANDES WHERE (((Day([DATE]))=01) AND ((Month([DATE]))=01))")
     
    If Day(Me.DATE) = 24 And Month(Me.DATE) = 12 Then
        If rs1.EOF Then
        Me!NUMCOMM = 1
        Else
        rs1.MoveLast
        Me!NUMCOMM = rs1!NUMCOMM + 1
        End If
    ElseIf Day(Me.DATE) = 25 And Month(Me.DATE) = 12 Then
        If rs2.EOF Then
        Me!NUMCOMM = 1
        Else
        rs2.MoveLast
        Me!NUMCOMM = rs2!NUMCOMM + 1
        End If
    ElseIf Day(Me.DATE) = 31 And Month(Me.DATE) = 12 Then
        If rs3.EOF Then
        Me!NUMCOMM = 1
        Else
        rs3.MoveLast
        Me!NUMCOMM = rs3!NUMCOMM + 1
        End If
    ElseIf Day(Me.DATE) = 1 And Month(Me.DATE) = 1 Then
        If rs4.EOF Then
        Me!NUMCOMM = 1
        Else
        rs4.MoveLast
        Me!NUMCOMM = rs4!NUMCOMM + 1
        End If
    Else
        Me!NUMCOMM = ""
    End If
     
    rs1.Close
    rs2.Close
    rs3.Close
    rs4.Close
     
    Set rs1 = Nothing
    Set rs2 = Nothing
    Set rs3 = Nothing
    Set rs4 = Nothing
    Set db = Nothing
    End Sub
    Merci BCP

  12. #12
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Une version un peu plus simple...

    Faire la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PARAMETERS Num Short;
    SELECT Count(NUMERO) 
    FROM COMMANDES  
    WHERE (IIf(Format([DATE],"ddmm")="2412",1,
    IIf(Format([DATE],"ddmm")="2512",2,
    IIf(Format([DATE],"ddmm")="3112",3,
    IIf(Format([DATE],"ddmm")="0101",4,5)))))=[num];
    Puis, maintenant, ton code devient simplement :
    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
    Dim n as integer
    Dim qdf as DAO.QueryDef
    Dim rst as DAO.Recordset
     
    ' Définition du paramètre, en fonction de la date
    Select case Format$([DATE],"ddmm")
        Case "2412" : n=1
        Case "2512" : n=2
        Case "3112" : n=3
        Case "0101" : n=4
        Case Else: n=5
    End Select
     
    ' Récupération de la valeur
    Set Qdf = CurrentDb.QueryDefs("Nom De La Requête")
    Qdf.Parameters("Num").Value = n
    Set Rst = Qdf.OpenRecordset
     
    'Affectation de la valeur
    Me!NUMCOMM = rs(0) +1
     
    ' Fermetures
    rst.close
    qdf.close
    set rst=nothing
    set qdf=nothing
    Qu'en penses-tu ?

  13. #13
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Je continue à penser qu'une recherche sur le max c'est mieux qu'un Count si on envisage de pouvoir effacer des enregistrements.

    Cordialement,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  14. #14
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Possible que tu aies raison.
    Tout dépend si on travaille dans la légalité ou pas.
    On ne doit pas effacer une commande me semble-t-il, mais gérer les erreurs avec des avoirs.

    Pour terminer, j'en reviens à une questi
    on qui me taraude...
    Cette numérotation traverse les années ?

  15. #15
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Tout dépend si on travaille dans la légalité ou pas.
    On ne doit pas effacer une commande me semble-t-il, mais gérer les erreurs avec des avoirs.
    C'est vrai pour les factures. Mais pour tout dire je ne sais pas à quoi cette table est relative...
    Cette numérotation traverse les années ?
    Là par contre je crois savoir : j'ai posé la question au #6 et j'ai eu une réponse positive en #7.


    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  16. #16
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par pgz
    Là par contre je crois savoir : j'ai posé la question au #6 et j'ai eu une réponse positive en #7.
    Merci pour la précision.
    Je ne l'avais pas comprise comme cela.
    mea culpa.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/09/2008, 18h57
  2. update + incrémenter compteur
    Par elkhanssaa dans le forum Développement
    Réponses: 3
    Dernier message: 09/05/2008, 11h23
  3. [PHP-JS] Incrémenter compteur avec clic sur lien
    Par Bydouille dans le forum Langage
    Réponses: 5
    Dernier message: 12/11/2007, 16h32
  4. Incrémentation compteur à deux chiffres.
    Par masseur dans le forum Langage
    Réponses: 2
    Dernier message: 02/07/2007, 10h05
  5. [VBA-E] Incrémentation compteur lors du chargement de l'userform
    Par teaRz dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/06/2006, 12h19

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