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 :

Numérotation automatique dans un champ


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Numérotation automatique dans un champ
    Bonjour à tous,

    Je voudrais savoir dans quel évènement de mon sous-formulaire dois-je appeler le code de la fonction suivante afin de réinitialiser mon champ [N° ORDRE]. Présentement, j'ai déjà essayé dans plusieurs évènements sans suite favorable. Peut être que le problème viendrait du code en question, je ne sais pas. Pourtant, la première procédure reservée au Numéro auto personnalisé fonctionne très bien.

    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
    Public Function Init_numeroAuto()
    Dim rs As DAO.Recordset
    Dim i As Long
     
    On Error Resume Next
     
    Set rs = CurrentDb.OpenRecordset("CONSOMMATION", dbOpenDynaset)
     
    i = 1
     
       While Not (rs.EOF)
       rs.Edit
       rs![N° ORDRE] = i
       rs.Update
     
       rs.MoveNext
       i = i + 1
       Wend
     
    rs.Close
    Set rs = Nothing
     
    End Function
    Merci d'avance pour votre soutien.

  2. #2
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Salut

    On dirait que tu parles comme si tout le monde voyait ou tu en es. Ce n'est pas le cas.

    Pourquoi veux tu réinitialiser un champ NuméroAuto ?

    Quand veux tu que cette réinitialisation soit effectuée ? sur un choix de menu ? à l'ouverture du formulaire ? à chaque mise à jour de quelque chose ? autre chose ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bonsoir,

    En fait, je voudrais afficher à l'ouverture de mon formulaire feuille de données les 12 premières lignes dans lesquelles l'opérateur va saisir les données. Le 1er champ avec type NuméroAuto (1,2---12) doit-être réinitialiser après que l'opérateur ait enregistré les données en cliquant sur le bouton correspondant, ou alors à l'ouverture de mon formulaire.

    Merci de votre soutien

  4. #4
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Et bien, j'ai beau me creuser, ça n'a aucun sens. Quelque chose m'échappe. Bref.

    Si tu veux que ton code soit lancé à l'ouverture du formulaire, alors lance le depuis l'événement Sur Chargement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Load()
        Init_numeroAuto
    End Sub
    Et aussi, met le dans le code Sur clic de ton bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Bouton_Click()
        Init_numeroAuto
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Voici le code complet. La procédure Form_BeforeInsert marche très bien. Lorsque je passe d'une ligne à l'autre de ma feuille de données après saisie des données, le champ [N° ORDRE] s'incrémente automatiquement. Par contre, la fonction elle me pose un problème. Je l'ai bien appelé dans la procédure Form_Load. Et lorsque le formulaire veut s'ouvrir, ACCESS plante.
    Que dois-je faire ?

    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
     
     
    Private Sub Form_BeforeInsert(Cancel As Integer)
    On Error Resume Next
     
    Dim DB As DAO.Database
    Dim rs As DAO.Recordset
     
    'instancie la base de données
    Set DB = CurrentDb
     
    'ouverture du curseur
    Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenSnapshot)
     
       If rs.EOF Then
            Me![N° ORDRE] = 1
       Else
            rs.MoveLast
            Me![N° ORDRE] = rs![N° ORDRE] + 1
       End If
     
       rs.Close
       DB.Close
       Set rs = Nothing
       Set DB = Nothing
     
    End Sub
     
    Public Function Init_numeroAuto()
     
    Dim DB As DAO.Database
    Dim rst As DAO.Recordset
    Dim i As Long
     
    On Error Resume Next
     
    'instancie la base de données
    Set DB = CurrentDb
     
    Set rst = CurrentDb.OpenRecordset("CONSOMMATION", dbOpenDynaset)
     
    i = 1
     
       While rst.EOF
        rst.Edit
        rs![N° ORDRE] = i
        rst.Update
     
        rst.MoveNext
        i = i + 1
      Wend
     
    rst.Close
    DB.Close
    Set rst = Nothing
    Set DB = Nothing
     
     
    End Function
    Merci de votre soutien

  6. #6
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Que dois-je faire ?
    Dire où elle plante ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonsoir le forum.

    mchouaebou ,ton code dans la procédure Form_BeforeInsert est bon et se suffit à lui-même ,puisque que c'est le même que Init_numeroAuto . Sinon il faut l'appeler dans l'évènement Form_BeforeInsert justement (en supprimant tout le reste).

    mumen ,ce code est dans la faq ,permet de créer son pp numéro auto (incrément) ,évite le "trou" si on supprime le dernier enregistrement (attention ,cela peut parfois aussi etre un problème).
    On peut aussi ,en début d'année par ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    '    Else: rs.MoveLast
                Me![] = rs![] + ( le chiffre à atteindre - N°)
                End If
    et remettre pour les enregistrement suivant
    Cdlt

  8. #8
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Thierry, et ça, c'est là pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function Init_numeroAuto() 
        Dim i As Long 
        On Error Resume Next 
        With CurrentDb.OpenRecordset("CONSOMMATION", dbOpenDynaset)
            i = 1
            While Not .EOF
                .Edit
                ![N° ORDRE] = i
                .Update 
                .MoveNext
                i = i + 1
            Wend
        End With 
    End Function
    (C'est pas plus joli comme ça ?)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Numérotation automatique dans un champ
    Bonjour,

    ça ne marche toujours pas. Après la mise à jour de mon formulaire, le champ [N° ORDRE] ne s'initialise toujours pas.

    Est-il possible de placer une condition du genre if [N° ORDRE]>12, alors Me![N° ORDRE] = 1

    Si oui, comment le faire.

    Merci pour votre réaction.

  10. #10
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonsoir.
    Voir la faq http://access.developpez.com/faq/?pa...reerSonNumAuto
    La fonction n'est pas appelé dans la sub ,donc j'imagine qu'on utilise soit l'une soit l'autre !
    Perso, depuis la cration de mon appli (2006) ,j'utilise:
    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
    Private Sub Form_BeforeInsert(Cancel As Integer)
    'Creer son pp numero auto (increment)
    'Un table Table1 avec un champ num (cle primaire) de type Long Integer.
    'Un formulaire Form1 lie à la Table1 avec un contrôle Num (verrouille) lie au champ Num de table1:
    'Et sur l'evenement BeforeInsert du form:
     
        Dim rs As DAO.Recordset
        Set rs = CurrentDb.OpenRecordset(Me.RecordSource)    'dbOpenSnapshot)
        If rs.EOF Then
            Me![reservation] = 1
        Else: rs.MoveLast
            Me![reservation] = rs![reservation] + 1    ' '130001 '
        End If
        rs.Close
        Set rs = Nothing
        Me.regisseur = Usager()  'fUserName()
    End Sub
    Cela marche impec mais je viens de voir que mon champ "reservation" n'est pas verrouillé ,et je crois me souvenir qu'il faut que la table n'ai jamais contenu d'enregistrements auparavant .
    Si c'est le cas ,ne pas se contenter de vider la table ,mais en recréer une autre ,la renommer puis faire l'essais .Après on peut ,avec une requête ajout ,réintégrer les anciennes données .

    mumen ,je peux même t'affirmer que je peux réintégrer n'importe quel enregistrement supprimé !
    Ceci pour répondre au numéro auto. Concernant les 12 lignes .....?
    Bonne soirée.

Discussions similaires

  1. Numérotation automatique dans un champ
    Par mchouaebou dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/04/2013, 11h15
  2. Empêcher la saisie automatique dans un champ
    Par zooffy dans le forum ASP.NET
    Réponses: 6
    Dernier message: 14/01/2008, 12h51
  3. choix automatique dans un champ
    Par bibi28 dans le forum VBA Access
    Réponses: 6
    Dernier message: 15/10/2007, 12h54
  4. Réponses: 14
    Dernier message: 27/11/2006, 13h07
  5. Préfixe automatique dans un champ
    Par curt dans le forum Access
    Réponses: 1
    Dernier message: 12/06/2006, 19h27

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