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 :

Suppression enregistrement sous formulaire


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 21
    Points
    21
    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 : 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
     
    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 Images attachées   

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonsoir,

    Voici un exemple de suppression par code VBA de l'enregistrement dont la clé est dans le champ cd du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Sr as string
    102   Sr = "DELETE FROM pointages WHERE cd_pointage=" & cd & ";"
    104   CurrentDb.Execute Sr, dbFailOnError
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Merci pour ton code, en faisant ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    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...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Merci pour cette réponse.

    J'ai fait ceci pour le moment.

    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 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.

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
        Supprimer_Enreg = (MsgBox("Voulez-vous supprimer le champ ?", VbQuestion + vbYesNo) = vbYes)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    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.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/09/2009, 16h27
  2. Réponses: 5
    Dernier message: 19/01/2007, 01h42
  3. renversement des enregistrements sous formulaire
    Par sebos21 dans le forum Access
    Réponses: 2
    Dernier message: 25/05/2006, 10h48
  4. suppression enregistrement sous formulaire
    Par fscli dans le forum Access
    Réponses: 6
    Dernier message: 24/05/2006, 16h37
  5. Enregistrer sous-formulaire meme si pas rempli
    Par mat75019 dans le forum Access
    Réponses: 3
    Dernier message: 22/04/2006, 08h32

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