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 :

Champ dynamique et insertion en table


Sujet :

Access

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Champ dynamique et insertion en table
    Bonjour,

    J'ai un souci avec un formulaire pour alimenter une table et je ne vois pas comment faire après plusieurs recherches infructueuses...

    J'ai 2 tables :

    Table salarie
    -------------------
    id_sal
    nom_sal
    cout_quotidien_sal


    Table affectation (table d'association)
    -------------------
    id_sal
    id_chantier
    date_affectation
    coeff
    cout_sal

    Il y a donc bien une 3eme table "chantier" (id_chatier etc...) mais c'est juste pour aider à comprendre.

    affectation.cout_sal doit être le produit de salarie.cout_quotidien_sal et affectation.coeff.
    Je sais que normalement on ne mémorise pas de valeurs calculées dans une table mais dans ce cas j'y suis contraint...

    Bref j'ai un formulaire qui me sert à remplir les 4 premiers champs de "affectation" qui est organisé comme suit :
    combo de sélection du salarié (listesal) | combo de sélection du chantier | champ "date" | champ "coeff" | champ "cout_sal"

    le champ "cout_sal" me calcule déjà correctement ce que je veux y afficher (=[listesal].[Column(2)]*coeff) mais puisque dans la source de controle de mon champ j'ai "=[listesal].[Column(2)]*coeff" je ne peux pas lui dire de mémoriser la valeur ainsi calculée à la rubrique "affectation.cout_sal".

    Donc en résumé, je ne sais pas comment permettre à un champ d'effectuer dynamiquement un calcul en fonction de la valeur d'autres éléments du formulaire mais en même temps spécifier que cette valeur doit être insérée dans la table sur laquelle est basé mon formulaire...

    Ouf. J'espère avoir été claire et merci par avance de l'aide que vous voudrez bien m'apporter.

    Robson

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Tu devrais utiliser un formulaire independant, et faire un enregistrement de tous tes controles dans ta table.

    Il y a pas mal d'exemple de gestion de formulaire independant dans les sources et tutos.

    A+ et bon courage.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci mais j'ai encore cherché sur le site faq / sources et même avec le moteur de recherche ("gestion de formulaire independant" ou "formulaire independant") je ne trouve rien... Si tu as un exemple je suis preneur...

    Les autres idées aussi )

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Je reviens juste sur la nécessité d'enregistrer le coût.
    Citation Envoyé par Robson33
    Je sais que normalement on ne mémorise pas de valeurs calculées dans une table mais dans ce cas j'y suis contraint...
    Je ne vois pas trop pourquoi cela peu être nécessaire. Tu peux trés bien te faire une requete qui fait ce calcul et partout où tu utilise la table avec le coût, tu prend la requete à la place. Je ne sais pas si je me fais comprendre, mais bon je suis septique sur l'interet de la chose.

    Mais bon. Tu trouvera plus bas un exemple de code d'un formulaire à moi (gestion des fiches client avec un form indépendant). Si tu as des questions, n'hésite pas.


    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    Option Compare Database
    Option Explicit
    Dim Rs As DAO.Recordset
    Dim Sql As String
     
     
    Private Sub bc_enregistrer_Click()
    On Error GoTo bc_enregistrer_Click_Err
     
    'test du nom de client
     
    If Me.tb_Nom_Client & "" = "" Then
        MsgBox "Le nom du client est une information obligatoire.", vbCritical + vbOKOnly, "Enregistrement"
        Me.tb_Nom_Client.SetFocus
        Exit Sub
    End If
     
     
     
    If Me.Caption = "Saisie" Then
        'nouveau client
        If MsgBox("Voulez-vous enregistrer le nouveau client", vbQuestion + vbYesNo, "Enregistrement") = vbNo Then Exit Sub
        'calcul du n°
        Me.tb_N_Client = DLookup("max([N_Client])", "t_client") + 1
        'enregistrement
        Sql = "SELECT T_client.* FROM T_client"
        Set Rs = CurrentDb.OpenRecordset(Sql, dbOpenDynaset)
        Rs.AddNew
            Rs("Adresse") = Me.tb_Adresse
            Rs("Code_postale") = Me.tb_Code_postale
            Rs("N_Client") = Me.tb_N_Client
            Rs("Nom_Client") = Me.tb_Nom_Client
            Rs("Nom_contact") = Me.tb_Nom_contact
            Rs("Ville") = Me.tb_Ville
        Rs.Update
        'mode modif
        Me.Caption = "Modification du clinet N° " & Me.tb_N_Client
        Me.tb_N_Client.Visible = True
        Me.tb_N_Client.Enabled = False
     
    Else
        'enregistrement
        Sql = "SELECT T_client.* FROM T_client WHERE T_client.N_Client = " & Me.tb_N_Client & ";"
        Set Rs = CurrentDb.OpenRecordset(Sql, dbOpenDynaset)
        Rs.Edit
            Rs("Adresse") = Me.tb_Adresse
            Rs("Code_postale") = Me.tb_Code_postale
            Rs("N_Client") = Me.tb_N_Client
            Rs("Nom_Client") = Me.tb_Nom_Client
            Rs("Nom_contact") = Me.tb_Nom_contact
            Rs("Ville") = Me.tb_Ville
        Rs.Update
    End If
     
    MsgBox "Enregistrement du client N° " & Me.tb_N_Client & " réussit", vbOKOnly, "Enregistrement"
    Set Rs = Nothing
    Exit Sub
     
     
     
     
    bc_enregistrer_Click_Err:
    MsgBox "Une erreur inatendue s'est produite lors de l'enregistrement (erreur N° " & Err.Number & " ) dont la description est : """ & Err.Description & """. L'enregistrement n'est peut-être pas réalisé! Contactez l'administrateur de la base !", vbCritical + vbOKOnly, "Erreur"
    Set Rs = Nothing
    Exit Sub
     
     
     
    End Sub
     
    Private Sub bc_exit_Click()
    DoCmd.Close acForm, Me.Name
     
    End Sub
     
    Private Sub Form_Load()
    On Error GoTo Form_Load_Err
    If Me.OpenArgs = "S" Then
        'saisie d'un nouveau client
        Me.Caption = "Saisie"
        Me.tb_N_Client.Visible = False
     
    Else
        'modif d'un client
        Me.Caption = "Modification du clinet N° " & Me.OpenArgs
        'selection des infos sur le client
        Sql = "SELECT T_client.* FROM T_client WHERE T_client.N_Client = " & Me.OpenArgs & ";"
     
        Set Rs = CurrentDb.OpenRecordset(Sql, dbOpenDynaset)
        If Rs.BOF = True And Rs.EOF = True Then
            MsgBox "Impossile de trouver le client sélectionné", vbCritical + vbOKOnly, "Modification impossible"
            DoCmd.Close acForm, Me.Name
            GoTo Form_Load_Exit
        Else
            Rs.MoveLast
            Rs.MoveFirst
            If Rs.RecordCount <> 1 Then
                MsgBox "Le N° de client n'est pas unique ! Contactez l'administrateur de la base.", vbCritical + vbOKOnly, "Modification impossible"
                DoCmd.Close acForm, Me.Name
                GoTo Form_Load_Exit
            End If
        End If
        'remplissage du form
        Me.tb_Adresse = Rs("Adresse")
        Me.tb_Code_postale = Rs("Code_postale")
        Me.tb_N_Client = Rs("N_Client")
        Me.tb_Nom_Client = Rs("Nom_Client")
        Me.tb_Nom_contact = Rs("Nom_contact")
        Me.tb_Ville = Rs("Ville")
        'verrouillage du N° de client
     
        Me.tb_N_Client.Enabled = False
     
     
    End If
     
     
    Form_Load_Exit:
    Set Rs = Nothing
    Exit Sub
     
     
    Form_Load_Err:
    MsgBox "Une erreur inatendue s'est produite (erreur N° " & Err.Number & " ) dont la description est : """ & Err.Description & """. Contactez l'administrateur de la base !", vbCritical + vbOKOnly, "Erreur"
    Set Rs = Nothing
    DoCmd.Close acForm, Me.Name
     
     
    End Sub

    Voila c'est pas le code le plus abouti qui soit, mais bon si il peut t'aider ...





    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup,

    Je vais regarder ça avec attention, j'espère que ça va pouvoir m'aider...

    Si je veux mémoriser les couts, c'est parce que le cout quotidien du salarié (cout_quotidien_sal ) est appelé à varier dans le temps et que j'aurai besoin de me rappeler de ce que m'a couté le salarié 's' au cout 'c'... Bref.

    Mais merci beaucoup encore une fois, je vais regarder...

    ++ Robson

Discussions similaires

  1. insertion d'un champ de formulaire dans la table
    Par papagei2 dans le forum IHM
    Réponses: 3
    Dernier message: 17/12/2008, 21h42
  2. Champ dynamique dans une table
    Par stef_078 dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2007, 18h09
  3. Réponses: 1
    Dernier message: 03/07/2006, 17h47
  4. Réponses: 3
    Dernier message: 19/11/2004, 21h48
  5. ajouter un champ dynamiquement à une instance de table
    Par maniack dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/02/2004, 23h58

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