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

IHM Discussion :

[Access 2007] Champ numeroAuto qui se remet sur 1 à chaque nouvel enregistrement


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut [Access 2007] Champ numeroAuto qui se remet sur 1 à chaque nouvel enregistrement
    Bonjour

    J'ai souhaité créer un champ numéroAuto (qui n'est pas une clé primaire!) dans 2 de mes formulaires. Pour cela je me suis servi du code donner dans la FAQ ICI par User.

    Dans mon formulaire, j'ai un onglet appelé Cycles Production contenant un sous-formulaire sous forme feuille de données basé sur une table.
    En résumé:
    Form >> onglet avec SForm mode datasheet >> table >> champs: IdCycle (liste déroulante contenant IdCycle et NomCycle) et N°Operation

    J'ai donc mis le code ci-dessous dans mon sous-formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_BeforeInsert(Cancel As Integer)
    Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenDynaset)
        If rst.EOF Then
            Me!N°Operation = 1 
        Else
            rst.MoveLast
            Me!N°Operation = rst!N°Operation + 1
       End If
    rst.Close 
    Set rst = Nothing
    End Sub
    Pour chaque enregistrement, je peux donc avoir plusieurs cycles.
    Ce que j'aimerais c'est que N°Operation s'incrémente de 1 à chaque nouveau cycle (jusque là pas de problème ^^) mais qu'à chaque nouvel enregistrement celui-ci commence à 1.
    C'est-à-dire j'ai un premier enregistrement avec par exemple 4 cycles donc comme N°Operation 1 à 4. Puis un deuxième enregistrement avec 3 cycles. Et là je souhaiterais avoir N°Operation 1 à 3 et pour le moment j'ai 5 à 7

    Serait-il possible de faire cela??

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il ne faut pas utiliser un champ numéroautomatique pour réaliser cela, mais bien un champ numérique normal.

    C'est via le formulaire et des fonctions de domaine ou du VBA que tu pourras t'en sortir... Mais ce n'est pas possible en Access directement dans les tables car Access ne permet pas l'utilisation des déclencheurs.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Bonjour

    Je me suis peut être mal exprimé mais mon champ n'est pas un champ numeroAuto. C'est un champ numérique entier long sur lequel j'ai placé le code VB trouvé dans la FAQ mais il incrémente de 1 à chaque nouvel entrée dans le sous form quelque soit l'enregistrement du formulaire. Et ce n'est pas ce que je souhaite.
    J'aimerais juste savoir comment je dois modifier le code actuel pour qu'il recommence le décompte à 1 pour chaque enregistrement.
    Ca fait à peine 2 mois que je me suis mis au VBA donc je connais pas encore toute les ficelles ^^'

    ps: fonctions de domaine > késako??

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Dans le cas que tu présentes, tu ne peux pas utiliser l'évènement BeforeInsert puisque tu as besoin du numéro du cycle pour pouvoir calculer le numéro de l'opération.

    N'ayant pas la structure de ta table, j'ai créé l'exemple suivant:
    Une table Table4 possédant un champ OpeCyc entier long qui stocke le cycle et un champ OpeOpe entier long qui stocke l'opération.

    L'idée est d'intercepter l'évènement de mise à jour du contrôle du cycle du formulaire, et de remplir le contrôle de l'opération avec le résultat de la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function GetOperation(Cycle As Long) As Long
        Dim Valeur
        Dim rs As ADODB.Recordset
        Set rs = CurrentProject.Connection.Execute("select max(opeope)as nombre from table4 where opecyc = " & Cycle)
        If rs.EOF Then
            GetOperation = 1
            Else
            GetOperation = IIf(IsNull(rs!nombre), 1, rs!nombre + 1)
        End If
        Set rs = Nothing
    End Function
    Tu utilises cette fonction dans l'évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub OpeCyc_AfterUpdate()
        OpeOpe = GetOperation(OpeCyc)
    End Sub

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Euhh...

    Question: c'est quoi la différence entre DAO et ADO?
    Question: quelle(s) référence(s) faut-il pour ADO? (histoire de pas venir pour un problème d'erreur liée aux référence)


    Pendant ce temps je vais essayer de comprendre ce bout de code. C'est pas le tout de copier/coller faut aussi comprendre pour pouvoir le refaire plus tard et surtout progresser

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    ADO est une technologie plus récente et plus performante que DAO.

    Depuis les versions d'Excel 2000, elle est cochée par défaut en plus de la référence à DAO. Il me semble que par défaut il coche la 2.1 alors qu'on est (au moins) à la 2.8.

    Je te laisse comprendre le bout de code, et tu reviens si pb ou question? Cela étant, je l'ai pondu comme ça en vitesse, il n'est peut-être pas optimal, mais la logique est là.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Bon alors...

    J'ai compris le If, le dim rs.
    Ensuite on lui dis de se placer sur le projet en cours et d'exécuter la requête SQL.

    Par contre (j'ai oublié de le mettre cette fois ) je travail en access 2007 et pas en excel donc le Select max(opeope), je crois qu'il apprécie pas trop (quand je fais F1 sur max il me renvoie à l'aide excel). Sinon le reste de la requête ça va, c'est pas trop difficile...

    Mais j'ai pas compris pourquoi Dim Valeur O_o puisqu'il n'apparait pas ensuite. Est-ce que valeur=nombre?

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    est de trop

    Si si, le langage SQL apprécie MAX.

    J'utilise MAX pour renvoyer le plus grand numéro d'opération en fonction du numéro de cycle. Ainsi, lorsqu'un cycle a par exemple 3 opérations, rs!nombre vaudra 3, et il suffira de lui ajouter 1 pour avoir le numéro de l'opération suivante

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Ok ça deviens un peu plus clair ^^

    Mais j'ai toujours mon erreur sur le set rs=currentdb...
    erreur d'exécution '-2147217904(80040e10)': aucune valeur donnée pour un ou plusieurs des paramètres requis O_o

    (cherche d'où ca vient...)

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Donne tout ton code.

    Cela étant, si tu utilises Currentdb, c'est que tu es en DAO

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    oups pardon (l'habitude ) je voulais dire currentproject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function GetOperation(Cycle As Long) As Long
    Dim rs As ADODB.Recordset
    Set rs = CurrentProject.Connection.Execute("SELECT Max(N°Operation) As Nombre FROM [Subir ana] WHERE IdCycle = " & Cycle)
        If rs.EOF Then
            GetOperation = 1
        Else
            GetOperation = IIf(IsNull(rs!Nombre), 1, rs!Nombre + 1)
        End If
    Set rs = Nothing
    End Function
    Je vois vraiment pas pourquoi ça déconne (peut être mon idcycle qu'il aime pas... )

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    SQL et le VBA n'aiment pas trop les noms de champs "exotiques", comme par exemple N°Operation ou subir ana. Il est préférable d'utiliser des noms sans espaces et sans caractères spéciaux, accentués, etc...

    Il serait peut-être bon, pour les noms "hors normes", de mettre cela entre crochets.

    IdCycle est-il un champ numérique ou un champ texte? Si c'est un champ texte, il faut encadrer la valeur passée avec des apostrophes.

    Il faut aussi s'assurer que Cycle renvoie une donnée valide. Il faut aussi s'assurer que IDCycle est bien un champ de la table [Subir ana]

    Tu as, en fait, intérêt à passer par une chaine de caractère pour construire ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim sql as string
     
    sql = "SELECT Max([N°Operation]) As Nombre FROM [Subir ana] WHERE IdCycle = " & Cycle
    set rs = currentproject.connection.execute(sql)
    Cela te permet de mettre un point d'arrêt sur set rs... et de vérifier la valeur de la chaine sql

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Rhooo je viens de piger un truc. Me suis trompé de table C'est pas la table [Subir ana] mais la table [Reunir]
    J'ai 2 tables qui se ressemblent du coup je les ai confondues

    Pas tapé, ça fais mal les griffes


    Bon j'ai plus d'erreur mais ça me fait la même chose qu'avant
    Quand je fais enregistrer enregistrement / nouvel enregistrement et que je vais sur l'onglet cycle prod pour ajouter un cycle au nouvel enregistrement ben il m'incrémente à la suite au lieu de reprendre à 1 >.<

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    As-tu bien suivi la démarche que j'ai expliquée dans un précédent message, à savoir gérer l'évènement afterupdate du contrôle qui contient le cycle.

    Voici un fichier exemple.

    En parcourant le formulaire, tu verras les numéros de cycle et les opérations. Si tu crées un nouvel enregistrement et que tu choisis un cycle existant, tu auras le dernier numéro d'opération +1. Si tu choisis un nouveau cycle, tu auras 1 comme numéro d'opération.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Arf j'viens de pigé ce que ça fait
    C'est pas vraiment le but que je rechercher mais là j'suis fatiguée et je dois rentrer. Je verrais ça demain à tête reposée

    Merci pour ton aide ^^

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Ben... Alors, je n'ai pas compris ce que tu souhaites réaliser...

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut


    J'ai mis mon formulaire en pièce jointe pour mieux expliquer.
    Pour chaque composant saisie grâce à son code, je vais avoir toute une série d'informations à rentrer sur ce composant (Identification, caractéristiques...)
    Dans l'onglet Cycle production, j'ai 2 champs: IdCycle et N°Operation.
    Pour Composant, je n'aurais que des cycles de SAV (SAV1 ou SAV2 ou SAVn) [SAV: service après vente]
    SAV1 correspond à n opérations (dans une autre table), SAV2 correspond à n opérations différentes de SAV1.
    Donc pour chaque composant je vais avoir 1 ou plusieurs cycle de SAV.

    Donc, par exemple, pour un composant x (enregistrement 1), je vais avoir 4 SAV et donc dans N°Operation les n° 1 à 4. Et pour un composant y (enregistrement 2), j'aurais 2 SAV soit les N°Operation 1 et 2 et non pas 5 et 6.

    Et je voulais savoir si c'était possible de faire cela avec un numeroauto sur N°Operation

    (j'espère avoir mieux expliqué cette fois )
    Images attachées Images attachées  

  18. #18
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Il "suffit", je pense, de modifier mon code pour qu'il remette à zéro sur les composants et pas sur les cycles...

    Peux-tu donner la structure de tes tables?

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 57
    Points : 29
    Points
    29
    Par défaut
    Structure? c'est à dire?

    Ca??
    Images attachées Images attachées  

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Comme souvent (toujours?), l'important est d'abord de bien cerner ce qui doit être réalisé... Après, la mise en place du code est simplement la traduction informatique de ce qui doit être réalisé...

    Quand le numéro d'opération doit-il être remis à 1?

    A chaque changement de cycle sur un composant donné, ou à travers tous les cycles d'un même composant?

    Autrement dit, avec un exemple
    Composant1...............SAV1...............Operation1
    Composant1...............SAV1...............Operation2
    Composant1...............SAV2...............Operation1
    Composant1...............SAV2...............Operation2
    Composant2...............SAV1...............Operation1
    ...

    ou bien
    Composant1...............SAV1...............Operation1
    Composant1...............SAV1...............Operation2
    Composant1...............SAV2...............Operation3
    Composant1...............SAV2...............Operation4
    Composant2...............SAV1...............Operation1

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2009, 20h32
  2. [Access 2007] Fichier excel qui ne s'ouvre pas
    Par enkie dans le forum VBA Access
    Réponses: 5
    Dernier message: 07/08/2008, 10h08
  3. Réponses: 1
    Dernier message: 09/05/2008, 16h55
  4. Access 2007 - champs à plusieurs valeurs
    Par kvoskol dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/08/2007, 18h06
  5. [access 2007] Champs multivalué
    Par gihel dans le forum Access
    Réponses: 2
    Dernier message: 15/01/2007, 22h11

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