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 :

supprimer un enregistrement d'un sous-formulaire


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut supprimer un enregistrement d'un sous-formulaire
    Bonjour,

    J'ai un problème fort compliqué à résoudre. D'abord, et désolé d'être long, voici la situation de ma base de données.

    J'ai un F_entreprise, permettant de remplir la "T_entreprise", la clé primaire étant le code_ent (ENT_CODE_ENT)

    Dans le formulaire entreprise, on trouve 2 sous-formulaires permettant de remplir une même table "T_contact". La clé primaire de cette table est un numéro auto.
    -Le premier sous-formulaire permet d'enregistrer le contact "interlocuteur", dont les caractéristiques sont : type de contact = 1, et un code entreprise. --Le deuxième sous-formulaire permet d'introduire un nouvel enregistrement dans ma T_contact, soit le contact "direction", dont les caractéristiques sont les suivantes : type de contact = 2, et le même code entreprise que le premier sous-formulaire.
    Dans cette T_contact, on retrouve donc 2 fois le même ENT_CODE_ENT. Les 2 tables étant donc reliées selon une relation un à plusieurs.

    Ce F_entreprise, avec les 2 SF représente donc une fiche entreprise. J'aimerais pouvoir supprimer une fiche entreprise, donc 1 ligne dans la T_entreprise, et 2 lignes dans la T_contact ?

    Dans le formulaire entreprise, j'ai créé un bouton supprimer, dont 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
    30
    31
    Function Suppression_fiche_entreprise1()
    On Error GoTo Suppression_fiche_entreprise1_Err
     
        With CodeContextObject
            On Error Resume Next
            DoCmd.GoToControl Screen.PreviousControl.Name
            Err.Clear
            If (Not .Form.NewRecord) Then
                DoCmd.RunCommand acCmdDeleteRecord
            End If
            If (.Form.NewRecord And Not .Form.Dirty) Then
                Beep
            End If
            If (.Form.NewRecord And .Form.Dirty) Then
                DoCmd.RunCommand acCmdUndo
            End If
            If (.MacroError <> 0) Then
                Beep
                MsgBox .MacroError.Description, vbOKOnly, ""
            End If
        End With
     
     
    Suppression_fiche_entreprise1_Exit:
        Exit Function
     
    Suppression_fiche_entreprise1_Err:
        MsgBox Error$
        Resume Suppression_fiche_entreprise1_Exit
     
    End Function
    Le problème, c'est qu'il ne marche pasle bouton supprimer, car il ne peut pas supprimer les 2 enregistrements de la T_Contact.

    Que me conseillez-vous de rajouter dans mon code pour pouvoir effectuer les suppressions des enregistrements dans toutes les tables ?

    Je vous remercie d'avoir eu la patiente de me lire, mais si je ne détaillais pas mon problème, vous n'auriez pas du tout compris ce que je voulais dire.

    D'avance, un grand merci !

    PS : je n'y connais rien en VBA, mais j'essaie de m'y mettre

  2. #2
    Membre confirmé
    Avatar de dok flint
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 366
    Points : 548
    Points
    548
    Par défaut
    Bonjour ,
    On va essayer de faire quelque chose de simple :
    -on va créer deux requêtes de suppression qui aurons pour critère le champ[ENT_CODE_ENT] qui le champ commun à toutes les tables: du formulaire père et des 2 sous formulaire.
    La premiere requete pour supprimer les enregistrement de la table du sous formulaire1(Requete1)
    La deuxième requête pour supprimer les enregistrement de la table du sous formulaire2(Requete2)
    Donc il ne reste qu'a mettre sur un bouton 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
     
    'Arretet les msg d'Access
    DoCmd.SetWarnings False
     
     
    'Lancer les 2 requêtes de suppressions
    Dim stDocName As String
     
        stDocName = "requete1"
        stDocName = "requete2"
        DoCmd.OpenQuery stDocName, achiden, acEdit
     
    'Supprimer l'enregistrement en cours qui l'entête du formulaire principale
     
        DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
        DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
     
        'demarrer les msg d'Access
    DoCmd.SetWarnings True
    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre réponse très rapide. J'avoue cependant que je suis largué (je débute ).

    Tout d'abord, je ne comprend pas bien comment créer ma requête de suppression à partir du champ [ENT_CODE_ENT]. Pourriez-vous détailler la démarche ?

    Aussi, vous proposez de créer 2 requêtes à partir des 2 sous-formulaires. Ma réflexion va paraitre un peu bête, mais je peux réaliser une requête seulement à partir de table ou d'autres requêtes non ? Et comme les enregistrements effetués à partir de mes sous-formulaires s'enregistrent dans la même T_contact, ne dois-je pas alors réaliser une seule requête.

    Encore merci pour votre réponse, j'espère vraiment que vous allez pouvoir m'aider à résoudre ce problème

  4. #4
    Membre confirmé
    Avatar de dok flint
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 366
    Points : 548
    Points
    548
    Par défaut
    Bonjour ,
    Si les deux sous-formulaire sont basés sur la même table donc tu pourra faire une seule requête .
    Pour créer la requête tout simplement tu faits comme si tu va créer une requête sélection normale puis tu va dans l'espace ou la table est afficher et tu faits un clic avec le bouton droit de la souris , tu choisi dans le menu "type de requête" puis "Requête Suppression" , tu va dans la ligne Critères de la requête et sur le champ [ENT_CODE_ENT] tu fait un clic droit et tu choisi "Créer" et tu n'a qu'a choisir le champ [ENT_CODE_ENT] du formulaire .
    A+

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    j'ai créé la requête de suppression des sous-formulaires R_SUPPR_CONTACTS. Merci pour l'aide.

    Je dois maintenant insérer le code sur un bouton. Est-il possible d'insérer le code que vous m'avez fourni à l'intérieur du code du bouton "supprimer" que je vous ai donné dans le premier message ? C'est-à-dire, juste devoir pousser sur un bouton "suppression", pour qu'une macro supprime d'abord les sous-formulaires grâce à la requête, puis le formulaire principal ?

    Merci encore et d'avance pour votre aide.

    Mautchisig

  6. #6
    Membre confirmé
    Avatar de dok flint
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 366
    Points : 548
    Points
    548
    Par défaut
    Bonjour ,
    Je crois que c'est comme ça :
    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
     
    Function Suppression_fiche_entreprise1()
    On Error GoTo Suppression_fiche_entreprise1_Err
     
        With CodeContextObject
            On Error Resume Next
            DoCmd.GoToControl Screen.PreviousControl.Name
            Err.Clear
            If (Not .Form.NewRecord) Then
    "*****Debut Partie ajoutée au code original******
                'Arretet les msg d'Access
    DoCmd.SetWarnings False
     
     
    'Lancer les 2 requêtes de suppressions
    Dim stDocName As String
     
        stDocName = "requete"
           DoCmd.OpenQuery stDocName, achiden, acEdit
     
    'Supprimer l'enregistrement en cours qui l'entête du formulaire principale
     
        DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
        DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
     
        'demarrer les msg d'Access
    DoCmd.SetWarnings True
    "*****Fin Partie ajoutée au code original******
            End If
            If (.Form.NewRecord And Not .Form.Dirty) Then
                Beep
            End If
            If (.Form.NewRecord And .Form.Dirty) Then
                DoCmd.RunCommand acCmdUndo
            End If
            If (.MacroError <> 0) Then
                Beep
                MsgBox .MacroError.Description, vbOKOnly, ""
            End If
        End With
     
     
    Suppression_fiche_entreprise1_Exit:
        Exit Function
     
    Suppression_fiche_entreprise1_Err:
        MsgBox Error$
        Resume Suppression_fiche_entreprise1_Exit
     
    End Function
    A+

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/06/2015, 23h24
  2. [AC-2007] Supprimer un enregistrement dans un sous-formulaire
    Par eemii dans le forum IHM
    Réponses: 1
    Dernier message: 14/01/2011, 17h37
  3. Réponses: 2
    Dernier message: 16/03/2010, 16h43
  4. Réponses: 8
    Dernier message: 20/10/2008, 17h36
  5. Réponses: 4
    Dernier message: 16/09/2005, 15h56

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