Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/03/2011, 12h01   #1
Invité de passage
 
Inscription : février 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 8
Points : 0
Points : 0
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 :
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
lemautchisig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 14h39   #2
Membre éclairé
 
Avatar de dok flint
 
Inscription : septembre 2003
Messages : 292
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : septembre 2003
Messages : 292
Points : 378
Points : 378
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 :
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+
__________________
Pourquoi faire compliqué quand on peut faire simple
Je suis encore en ACCESS 2003
dok flint est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/03/2011, 15h29   #3
Invité de passage
 
Inscription : février 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 8
Points : 0
Points : 0
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
lemautchisig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 16h58   #4
Membre éclairé
 
Avatar de dok flint
 
Inscription : septembre 2003
Messages : 292
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : septembre 2003
Messages : 292
Points : 378
Points : 378
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+
__________________
Pourquoi faire compliqué quand on peut faire simple
Je suis encore en ACCESS 2003
dok flint est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/03/2011, 08h38   #5
Invité de passage
 
Inscription : février 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 8
Points : 0
Points : 0
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
lemautchisig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 13h01   #6
Membre éclairé
 
Avatar de dok flint
 
Inscription : septembre 2003
Messages : 292
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : septembre 2003
Messages : 292
Points : 378
Points : 378
Bonjour ,
Je crois que c'est comme ça :
Code :
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+
__________________
Pourquoi faire compliqué quand on peut faire simple
Je suis encore en ACCESS 2003
dok flint est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h22.


 
 
 
 
Partenaires

Hébergement Web