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 :

Copier plusieurs enregistrement d'un sous formulaire dans une table


Sujet :

Access

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut Copier plusieurs enregistrement d'un sous formulaire dans une table
    Bonjour à tous

    j'ai un Formulaire salarié (ID_SAL, NOM....) et un Sous formulaire AFFECTATION (#ID_SALARIE, CHANTIER)
    Ce sous-formulaire contient de 0 à 4 enregistrements par salarié

    Je souhaiterais pouvoir compter le nb d'enregistrements (ça fonctionne) et si nb > 1
    demander à l'utilisateur de choisir un chantier pour éditer une tenue type

    En préalable j'ai besoin d'afficher une combo qui va récupérer les chantiers concernés du sous-formulaire
    Je pensais donc faire un insert into qui me stocke les enregistrements du sous formulaire actif dans une table temporaire
    Le problème c'est que ça ne marche pas (aucun message)
    voici ce que j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                            Me.SF_AFFECTATIONSALARIE.SetFocus
                            sql = "INSERT INTO T_TEMPCHANTIER (#CHANTIER) values (Forms![F_SALARIE].Form![SF_AFFECTATIONSALARIE]![CHANTIER])"
                            Exit Sub
    peut-être que ma solution n'est pas la bonne
    Merci d'avance pour votre aide
    Cordialement

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Il faut "sortir" la valeur à insérer de l'expression SQL. De plus il faut "exécuter" le code SQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql = "INSERT INTO T_TEMPCHANTIER (#CHANTIER) values (" & Forms.[F_SALARIE].[SF_AFFECTATIONSALARIE].Form.[CHANTIER] & ")"
    Currentdb.execute sql
    Ensuite, je te conseille la lecture de cet article pour comprendre comment faire référence aux contrôles des sous-formulaires.

    Cordialement.

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut Re:
    Bonjour madefemere et merci
    j'ai recopié ton code mais ça ne marche pas il plante sur l'instruction SQL méthode non gérée par cet objet
    Bien cordialement

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    On peut voir la totalité du code s'il te plait.

    Cordialement.

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut RE
    Voici le code

    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
     
     
    Private Sub Commande9_Click()
     
    'compte si plusieurs affectations
    Dim i As Integer
    Dim sql As String
     
    i = Forms![F_SALARIE].Form![SF_AFFECTATIONSALARIE]![CHANTIER].Value
     
     
    If Forms("F_SALARIE").Controls("SF_AFFECTATIONSALARIE").Form.Recordset.RecordCount = 0 Then
        MsgBox ("vous devez affecter le salarié à un chantier avant de visualiser la tenue type")
        Exit Sub
            Else
                If Forms("F_SALARIE").Controls("SF_AFFECTATIONSALARIE").Form.Recordset.RecordCount = 1 Then
                    Me.SF_AFFECTATIONSALARIE.SetFocus
                    Me.VAR_CHANTIER = i
                    Exit Sub
                        Else
                            sql = "INSERT INTO T_TEMPCHANTIER (#CHANTIER) values (" & Forms.[F_SALARIE].[SF_AFFECTATIONSALARIE].Form.[CHANTIER] & ")"
                            CurrentDb.Execute sql
                End If
     
    End If
     
     
     
    End Sub

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Re-,

    Est-ce que tu peux imprimer dans la fenêtre d'exécution la valeur de "i" et l'expression "sql" obtenu en mettant les codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ....
    Debug.print i 'à la ligne 10
    ...
    Debug.print sql ' à la ligne 22
    ...
    A priori l'affectation de i devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i = Forms![F_SALARIE].[SF_AFFECTATIONSALARIE].Form.[CHANTIER].Value
    De plus tes "Exit sub" sont inutiles à mon avis.

    Cordialement.

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut Re
    Faux et faux

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Re-,

    Revenons depuis le début:
    1- Tu as un formulaire "F_SALARIE" qui représente les informations d'un salarié (IdSalarie,NomSalarie,....)
    2- dedans, tu as un sous-formulaire "SF_AFFECTATIONSALARIE" qui représente les différents chantiers où est affecté le salarié avec les champs IdSalarie_FK (rattaché à l'IdSalarie du formulaire principal) et IdChantier (qui est le chantier où le salarié est(était) affecté) entre autres.

    à partir de là, je SUPPOSE ... :
    Tu as un bouton "Commande9" (dont tu as donné le code) dans le formulaire qui devrait te permettre de sélectionner un chantier pour définir une tenue.

    C'est ce que tu veux faire ?
    Si OUI, quelle est la liaison des informations des tenues par rapport aux 2 tables que tu as données.
    Il y a peut -être un moyen beaucoup plus simple de faire

    Cordialement.

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut RE
    Alors

    j'ai un formulaire salarié basé sur une table T_SALARIE (Num_salarie, nom, prenom, statut)
    qui comprend un sous-formulaire en continu SF_AFFECTATIONSALARIE dans lequel je notifie une ou plusieurs affectations (#SALARIE, #CHANTIER, Date affectation)

    Dans mes relations, j'ai une table T_TENUETYPE [NUM_TENUE, #CHANTIER, #ARTICLE) qui me stocke par chantier la tenue type.
    Exemple chantier d'espaces verts : pantalon vert, veste de débroussaillage, casque antibruit...
    Exemple chantier bâtiment : pantalon blanc, veste blanche, gants ...

    Dans mon formulaire salarié, je souhaiterais lorsque j'affecte un salarié à un chantier, visualiser la tenue type pour que renseigne les tailles, que je vérifie l'état des stocks, que je passe une commande éventuellement...

    je n'en suis pas encore là. Je sais afficher dans une requête la tenue type en fonction du salarié. Pas de soucis
    là où je bloque c'est lorsqu'il y a plusieurs affectations (espaces verts en 2017 et batiment en 2018) donc tenues différentes. Comme le sous formulaire continu comporte deux enregistrements ma requête m'affiche uniquement la valeur sur laquelle j'ai le focus

    Donc je pensais dans un premier temps faire une macro pour me préparer la tenue type selon le chantier d'affectation
    1. compte le NB d'enregistrement du sous formulaire
    2. SI 0 = il faut renseigner
    3. SI 1 on fait un insert into dans une table T_EQUIPEMENTSALARIE qui me récupère la tenue type en fonction du chantier et me permette d'ajouter uiquement la taille
    4. SI >1 une zone de liste déroulante apparait avec au choix les deux chantiers renseignés dans le sous formulaire si 2, 3 si 3 etc....
    5. choix du chantier et rebelote sur insert into

    j'espère avoir été un peu plus clair

    Merci encore pour ton aide

  10. #10
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut Re on avance
    Je viens de changer le sQL et celà fonctionne mais par contre je n'ai qu'un seul enregistrement copié
    Si j'en ai trois, deux ou n il ne me copie que l'enregistrement actif

    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
     
     
    Private Sub Commande9_Click()
     
    'compte si plusieurs affectations
    Dim i As Integer
    Dim sql As String
     
    i = Forms![F_SALARIE].Form![SF_AFFECTATIONSALARIE]![CHANTIER].Value
     
     
    If Forms("F_SALARIE").Controls("SF_AFFECTATIONSALARIE").Form.Recordset.RecordCount = 0 Then
        MsgBox ("vous devez affecter le salarié à un chantier avant de visualiser la tenue type")
        Exit Sub
            Else
                If Forms("F_SALARIE").Controls("SF_AFFECTATIONSALARIE").Form.Recordset.RecordCount = 1 Then
                    Me.SF_AFFECTATIONSALARIE.SetFocus
                    Me.VAR_CHANTIER = i
                    Exit Sub
                        Else
    '                        Debug.Print sql = "INSERT INTO T_TEMPCHANTIER (CHANTIER) values (" & Forms![F_SALARIE].Form![SF_AFFECTATIONSALARIE]![CHANTIER].Value & ")"
    '                        CurrentDb.Execute sql
     
                                DoCmd.SetWarnings False
                                monsql = "INSERT INTO [T_TEMPCHANTIER] (chantier) SELECT " & Forms![F_SALARIE].Form![SF_AFFECTATIONSALARIE]![CHANTIER] & ""
                                DoCmd.RunSQL monsql
     
     
                End If
     
     
     
    End If
     
     
     
    End Sub

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Points : 58
    Points
    58
    Par défaut Re
    Je viens d'essayer autre chose mais ça plante également
    SOS les ami(e)s ...

    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
     
     
    Private Sub Commande9_Click()
     
    'compte si plusieurs affectations
    Dim i As Integer
    Dim sql As String
     
    i = Forms("F_SALARIE").Controls("SF_AFFECTATIONSALARIE").Form.Recordset.RecordCount
     
     
    If Forms("F_SALARIE").Controls("SF_AFFECTATIONSALARIE").Form.Recordset.RecordCount = 0 Then
        MsgBox ("vous devez affecter le salarié à un chantier avant de visualiser la tenue type")
        Exit Sub
            Else
                If Forms("F_SALARIE").Controls("SF_AFFECTATIONSALARIE").Form.Recordset.RecordCount = 1 Then
                    Me.SF_AFFECTATIONSALARIE.SetFocus
                    Me.VAR_CHANTIER = i
                    Exit Sub
                        Else
     
     
     
                            Do
                                DoCmd.SetWarnings False
                                monsql = "INSERT INTO [T_TEMPCHANTIER] (chantier) SELECT " & Forms![F_SALARIE].Form![SF_AFFECTATIONSALARIE]![CHANTIER] & ""
                                DoCmd.RunSQL monsql
                                DoCmd.GoToRecord , , acNext
     
                            Loop While i = 0
                End If
     
     
     
    End If
     
     
     
    End Sub

  12. #12
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 932
    Points
    932
    Par défaut Bonsoir Bvalenza,
    Effectivement si tu prends pour critère la "valeur" du contrôle de ton sous-formulaire, c'est celle de l'enregistrement actif qui est prise en compte.
    De mon point de vue, je recommanderais de synchroniser le sous-formulaire avec les données par un Requery (pour prendre en compte les modifications d'affectation), puis d'utiliser les données de ta table d'affectations pour alimenter ta liste déroulante.
    C'est à dire utiliser une liste déroulante indépendante, à deux colonnes (chantier, tenue type), qui aurait pour source de données une requête : jointure entre la table des affectations et celle des chantiers, avec pour critère (filtre) l'identifiant du salarié.

    Cordialement,
    Paraffine.

    P.S.: tu as des "#" dans tes noms de champs ? Cela fait partie des caractères à problèmes pour les noms de champs et d'objets Access d'après le support Microsoft.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/10/2009, 12h40
  2. sous formulaire dans une table
    Par alexandra06 dans le forum 4D
    Réponses: 1
    Dernier message: 17/12/2008, 14h02
  3. Copier l'enregistrement séléctionné d'un dbGrid dans une table
    Par doolar dans le forum Bases de données
    Réponses: 11
    Dernier message: 26/04/2008, 00h31
  4. Réponses: 3
    Dernier message: 21/05/2007, 12h49
  5. Réponses: 4
    Dernier message: 28/12/2006, 17h38

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