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 25/05/2011, 17h28   #1
Candidat au titre de Membre du Club
 
Homme Vincent Gheza
Étudiant
Inscription : février 2010
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Vincent Gheza
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2010
Messages : 19
Points : 10
Points : 10
Par défaut Suppression enregistrement sous formulaire

Voila mon petit soucis est la compréhension de création du code de suppression d'un enregistrement étant en sous formulaire d’une part et d'également pouvoir supprimer le champ du formulaire.

Voici mon code VBA basique , il ne fonctionne que si on supprime dans un formulaire sans table connexe.

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
 
Private Sub BT_DEL_Click()
On Error GoTo Err_BT_DEL_Click
 
    If (Supprimer_Enreg = True) Then
 
        DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
        DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
    Else
        MsgBox (" /!\ Vous n'avez pas supprimer l'enregistrement !")
    End If
 
Exit_BT_DEL_Click:
    Exit Sub
 
Err_BT_DEL_Click:
    MsgBox Err.description
    Resume Exit_BT_DEL_Click
 
End Sub
 
Function Supprimer_Enreg() As Boolean
    If MsgBox("Voulez-vous supprimer le champ ?", _
       vbQuestion + vbYesNo) = vbYes Then
 
         Supprimer_Enreg = True
 
    Else
         Supprimer_Enreg = False
 
    End If
End Function

je joins le screen de mon formulaire , et de la liaison de ma table.

Je suppose que je dois modifier mon code afin de faire une requête SQL dans le VBA, mais je bloque sur la manière de la mettre en forme.

Mes tables se nomment T_PROJECTION & T_DETAIL_PROJECTION
Et le nom de mes formulaires F_PROJECTION & T_DETAIL_PROJECTION.

Merci de votre aide afin d’éclairé ma lanterne. J'aimerais vraiment pouvoir supprimer le champ de mon sous formulaire et le champ du formulaire.
Images attachées
Type de fichier : png image1.png (20,6 Ko, 13 affichages)
Type de fichier : png image2.png (8,3 Ko, 8 affichages)
KaZz- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 22h10   #2
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 254
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 254
Points : 1 870
Points : 1 870
Bonsoir,

Voici un exemple de suppression par code VBA de l'enregistrement dont la clé est dans le champ cd du formulaire :
Code :
1
2
3
Dim Sr as string
102   Sr = "DELETE FROM pointages WHERE cd_pointage=" & cd & ";"
104   CurrentDb.Execute Sr, dbFailOnError
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 15h51   #3
Candidat au titre de Membre du Club
 
Homme Vincent Gheza
Étudiant
Inscription : février 2010
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Vincent Gheza
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2010
Messages : 19
Points : 10
Points : 10
Merci pour ton code, en faisant ceci

Code :
1
2
3
 
Sr = "DELETE FROM T_DETAIL_PROJECTION WHERE T_DETAIL_PROJECTION.ID_PROJECTION=" & ID_PROJECTION & ";"
          CurrentDb.Execute Sr, dbFailOnError
Ça me supprime bien toutes les entrées de mon sous formulaire, mais j'aurais bien voulu pouvoir choisir l'enregistrement précis.
Ah moins que j'ai mal préciser quelque chose dans la nomenclature.

Car dans un sens j'aimerais bien si je suis dans mon formulaire que ca efface son contenu et en cascade dans le sous formulaire.

Mais que si je clique sur l'une des lignes du sous formulaires que celle de mon sous formulaire.

Cela n'est peut être pas possible en access ?
KaZz- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 19h43   #4
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 254
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 254
Points : 1 870
Points : 1 870
Citation:
Car dans un sens j'aimerais bien si je suis dans mon formulaire que ca efface son contenu et en cascade dans le sous formulaire.
Quand on crée une relation 1--8 entre 2 tables il y a une option dans access qui permet de supprimer automatiquement les enregistrements liés.
J'utilise rarement car c'est très expéditif !

Pour en supprimer + ou - il suffit de changer la condition WHERE...
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 22h10   #5
Candidat au titre de Membre du Club
 
Homme Vincent Gheza
Étudiant
Inscription : février 2010
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Vincent Gheza
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2010
Messages : 19
Points : 10
Points : 10
Merci pour cette réponse.

J'ai fait ceci pour le moment.

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
 
 
Private Sub BT_DEL_Click()
On Error GoTo Err_BT_DEL_Click
Dim Sr As String
Dim Srq As String
 
Srq = [F_DETAIL_PROJECTION].[Form]![ID_DETAIL_PROJECTION]
 
    If (Supprimer_Enreg = True) Then
 
 
          Sr = "DELETE FROM T_DETAIL_PROJECTION WHERE T_DETAIL_PROJECTION.ID_PROJECTION=" & ID_PROJECTION & " AND T_DETAIL_PROJECTION.ID_DETAIL_PROJECTION=" & Srq & ";"
          CurrentDb.Execute Sr, dbFailOnError
 
    Else
        MsgBox (" /!\ Vous n'avez pas supprimer l'enregistrement !")
    End If
 
Exit_BT_DEL_Click:
    Exit Sub
 
Err_BT_DEL_Click:
    MsgBox Err.description
    Resume Exit_BT_DEL_Click
 
End Sub
 
Function Supprimer_Enreg() As Boolean
    If MsgBox("Voulez-vous supprimer le champ ?", _
       vbQuestion + vbYesNo) = vbYes Then
 
         Supprimer_Enreg = True
 
    Else
         Supprimer_Enreg = False
 
    End If
End Function
Donc actuellement ça supprime bien le champ restant du sous formulaire, ou celui sur lequel j'ai cliquer.

Maintenant je me demande s'il est possible de faire l'action soit je supprime directement mon enregistrement du formulaire principal et donc l'effet cascade logique, soit donc mon enregistrement sous formulaire précis.


Aurais tu un indice ?

Car soit je fais deux boutons, soit je réunis les deux en un, mais la j'ai juste un blanc sur ce que je serais censé faire.
KaZz- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 10h45   #6
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 254
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 254
Points : 1 870
Points : 1 870
Euh j'ai pas tout compris...
Si c'est l'utilisateur qui décide il va falloir lui poser la question ou mettre 2 boutons
Pour tout supprimer il faut un delete sur la table projection et un autre sur la table detail
Par ailleurs il est souhaitable de mettre une sécurité pour qu'on ne puisse pas supprimer le "père" avant d'avoir supprimé ses "fils"

NB :
Code :
1
2
3
4
5
6
7
8
9
If MsgBox("Voulez-vous supprimer le champ ?", _
       vbQuestion + vbYesNo) = vbYes Then
 
         Supprimer_Enreg = True
 
    Else
         Supprimer_Enreg = False
 
    End If
Peut s'écrire plus simplement :
Code :
    Supprimer_Enreg = (MsgBox("Voulez-vous supprimer le champ ?", VbQuestion + vbYesNo) = vbYes)
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 10h54   #7
Candidat au titre de Membre du Club
 
Homme Vincent Gheza
Étudiant
Inscription : février 2010
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Vincent Gheza
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2010
Messages : 19
Points : 10
Points : 10
Ok merci , oui c'est bien à l'utilisateur de choisir. C'est bien le principe sur lequel j'ai envie de développer.

Maintenant la méthode deux boutons n'est pas plus mal et plus intuitive sur ce genre de petit programme.

Comme j'ai une zone ajout date, je peux très bien lui mettre à coté un bouton de suppression.

J'hésite , mais je vais tenter de coder la choix utilisateur en premier, cela me semble intéressant niveau réflexion.

Merci de ton avis.
KaZz- 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 15h38.


 
 
 
 
Partenaires

Hébergement Web