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 :

RAZ Champs incrémentale [AC-2003]


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut RAZ Champs incrémentale
    Bonjour à toutes et à tous,

    Je suis nouveau sur ce forum et j'espère ne pas trop vous ennuyer avec mes demandes.

    Voilà, je dois créer dans un formulaire un champs numérique(N_PANIER) incrémentale avec un format "000".
    Jusque là, je ne pense pas avoir de pb (NuméroAuto).
    Cependant, ce champs avec cette valeur numérique doit avoir une remise à zéro à chaque changement de date.
    Et là, je bloque.
    N'étant pas fort en VBA, j'espère trouver de l'aide parmi vous .

    Bien à vous et merci d'avance

    Kikki1970

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Oui, lorsque tu crées une table avec au champ autonumber la séquence est crée un fois pour toute. Même si tu détruis tous les records, l'ajout d'un nouveau record n'aura pas le numero 1.

    Plusieurs solutions sont possibles.

    Soit tu détruis ta table et tu la recrées à chaque fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function testDemo()
    Dim strSQL As String
     
    strSQL = "DROP TABLE Table1"
    On Error Resume Next     'Je sais que ce DROP TABLE peut générer une erreur si la table a déjà été détruite
    DoCmd.RunSQL strSQL
    On Error GoTo 0          'Si une autre erreur devait survenir, je veux la voir pour débugger.  Après on fera mieux....
     
    strSQL = "CREATE TABLE [Table1] (ID Counter constraint ID PRIMARY KEY, Champ1 char (50), Champ2 single null, Champ3 date null)"
    DoCmd.RunSQL strSQL
     
    End Function
    Soit tu gères toi-même le numéro de l'increment en choisissant une simple champ Integer (ou Long si ta table est très grande) que tu remets à zéro en début de processus.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Pour plus de précision, va voir http://support.microsoft.com/kb/812718/fr

  4. #4
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par PipoWIL Voir le message
    Oui, lorsque tu crées une table avec au champ autonumber la séquence est crée un fois pour toute. Même si tu détruis tous les records, l'ajout d'un nouveau record n'aura pas le numero 1.

    Plusieurs solutions sont possibles.

    Soit tu détruis ta table et tu la recrées à chaque fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function testDemo()
    Dim strSQL As String
     
    strSQL = "DROP TABLE Table1"
    On Error Resume Next     'Je sais que ce DROP TABLE peut générer une erreur si la table a déjà été détruite
    DoCmd.RunSQL strSQL
    On Error GoTo 0          'Si une autre erreur devait survenir, je veux la voir pour débugger.  Après on fera mieux....
     
    strSQL = "CREATE TABLE [Table1] (ID Counter constraint ID PRIMARY KEY, Champ1 char (50), Champ2 single null, Champ3 date null)"
    DoCmd.RunSQL strSQL
     
    End Function
    Soit tu gères toi-même le numéro de l'increment en choisissant une simple champ Integer (ou Long si ta table est très grande) que tu remets à zéro en début de processus.
    Bonjour PipoWIL,
    Merci pour les infos, mais as tu un exemple.
    Etant un novice en VBA, j'ai un peu de mal avec les +1 -1 et Integer je ne connais pas.
    Merci d'avance.

    Kikki1970

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    As-tu regardé la solution proposée par Rolmaire ?
    Cela devrait te permettre de remettre facilement à zéro un increment dans une table.

    En relisant ta question, je vois que tu veux remettre à zéro un increment à chaque fois que la date change et que ton champ doit avoir 3 chiffres.

    Voici un exemple que tu peux analyser :

    Au départ j'ai une table, Table1, qui a deux champs : un champ "Jour" qui est de format DATE et un champ "MonChamp"avec mes données.
    Voici le contenu de ma table :
    Jour / MonChamp
    -------- -----------
    15/02/2011 / pierre
    15/03/2012 / Marbre
    14/02/2013 / bois
    14/02/2013 / platique
    14/02/2013 / metal
    15/03/2012 / verre
    15/12/2013 / cristal
    Ce que je te propose, pour que tu voies bien des étapes distinctes, c'est de créer une nouvelle table avec les dates bien classées dans l'ordre puis de créer ton incrément. Tu remqrqueras que la Table2 est crée avec un champ texte 'Compteur' qui est vide.

    Voici un code VBA :
    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
    57
    58
    59
    60
    61
    62
    Option Compare Database
    Option Explicit
    Function increment_avec_date()
    'cette fonction crée la table Table2 qui n'est rien d'autre qu'une copie de la Table1 ordonnée
    'par Jour Ascendant
    'Je parcours la table Table2 du début à la fin et je mets à jour le champ Compteur : pour
    'chaque changement de jour, je remets mon compteur à zéro
     
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
    Dim i As Integer
    Dim dtJourPrec As Date
    Dim strCompteur As String
     
    'Je ne peux pas créer une table qui existe déjà.  Donc pour éviter une erreur, je supprime
    'la Table2.
    'Si j'essaye de supprimer une table qui n'existe pas, MS Access me donnera une erreur.
    'Alors, ici je dis à MS Access, "si tu vois une erreur, reprends à la ligne suivante"
    strSQL = "DROP TABLE Table2"
    On Error Resume Next     'Je sais que ce DROP TABLE peut générer une erreur si la table a déjà été détruite
    DoCmd.RunSQL strSQL
    On Error GoTo 0          'Si une autre erreur devait survenir, je veux la voir pour débugger.  Après on fera mieux....
     
     
    'Ceci est une "make table query" qui va te créer une table
    strSQL = "SELECT Table1.Jour, Table1.MonChamp, '' AS Compteur INTO Table2 FROM Table1 ORDER BY Table1.Jour"
    Application.CurrentDb.Execute strSQL        'une autre manière, plus élégante,  d'exécuter le statement SQL
     
     
     
    'si tu interromps le code ici, tu peux voir la table2
     
     
    Set db = Application.CurrentDb
    Set rst = db.OpenRecordset("Table2")
     
    dtJourPrec = #1/1/1900#
    i = 1
    rst.MoveFirst
    Do Until rst.EOF
        If rst!jour = dtJourPrec Then
            'si le Jour = jour precedent, alors on continue avec le meme compteur sinon on remet le compteur à zéro
            i = i + 1
        Else
            i = 1
        End If
        dtJourPrec = rst!jour
        strCompteur = Right("000" & i, 3)
        rst.Edit
        rst!Compteur = strCompteur
        rst.Update
     
        rst.MoveNext
    Loop
     
    Set rst = Nothing
    Set db = Nothing
     
    'regarde maintenant ta Table2.  Tu peux la mettre facilement dans ton formulaire
     
    End Function

  6. #6
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Impéccable
    Bonjour,
    Merci à tout le monde et à PipoWIL pour son code.
    Cela fonctionne super.


    Bien à vous.

    Kikki1970

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

Discussions similaires

  1. [WD15] raz les champs de saisie
    Par fr832 dans le forum WinDev
    Réponses: 2
    Dernier message: 18/09/2011, 15h34
  2. [AC-2007] Formulaire: champ incrémentale
    Par samsab dans le forum IHM
    Réponses: 8
    Dernier message: 08/03/2011, 12h44
  3. [WD12E] RAZ saisie de champ combo
    Par no_me_entero dans le forum WinDev
    Réponses: 3
    Dernier message: 01/06/2009, 18h46
  4. Numérotation incrémentale d'un champ extensible
    Par Minels dans le forum InfoPath
    Réponses: 5
    Dernier message: 02/03/2009, 11h56
  5. RAZ d'un champs formulaire onclick
    Par bibom dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/08/2006, 12h13

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