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 une selection


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 81
    Par défaut supprimer une selection
    Bonsoir
    Si je sélectionne plusieurs ligne et que je veux les supprimer à l'aide d'un bouton.
    Comment ont dit en vba : supprime les lignes sélectionnée ?
    Merci
    Justine

  2. #2
    Membre Expert Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunCommand acCmdDelete
    Cordialement

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 81
    Par défaut
    Bonsoir RobiPMS
    Merci
    grâce au petit code que tu m'as passé j'ai testé, mais ça ne supprime qu'un enregistrement à la fois
    je voudrais supprimer la plage sélectionnée (plusieurs à la fois)
    J'ai mis ce code grâce au code que tu m'as passé, j'ai trouvé ça sur le site :

    Private Sub cmdSupprimer_Click()
    On Error GoTo GestionErreurs
    'Désactive l'affichage des messages système
    DoCmd.SetWarnings False
    If MsgBox("Voulez-vous vraiment supprimer cet enregistrement ?", _
    vbQuestion + vbYesNo + vbDefaultButton2, "Suppression") = vbYes Then
    'Sélection de l'enregistrement
    DoCmd.RunCommand acCmdSelectRecord
    'Exécution de la commande
    DoCmd.RunCommand acCmdDeleteRecord
    End If
    Exit_cmdSupprimer:
    'Réactive l'affichage des messages système
    DoCmd.SetWarnings True
    Exit Sub
    GestionErreurs:
    Select Case Err.Number
    Case 2046
    'Affichage d'un message
    MsgBox _
    "La commande ""Supprimer l'enregistrement"" n'est pas disponible pour l'instant !", _
    vbInformation, "Erreur !"
    Resume Exit_cmdSupprimer
    Case Else
    MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _
    & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !"
    Resume Exit_cmdSupprimer
    End Select
    End Sub


    Que faut il faire pour dire supprime tout ce qu'on a sélectionné ?
    Merci
    Justine

  4. #4
    Membre Expert Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Par défaut
    Bonjour.

    Je pense que le plus simple et fiable pour arriver à ce que tu souhaites (si j'ai bien compris tu veux sélectionner des enregistrements dans un formulaire, puis les supprimer en une fois) serait ceci :
    1. Tu ajoutes un champ Oui/Non à la table source de ton formulaire (tu le nommes par exemple "selection"), avec comme valeur par défaut Non
    2. Dans le formulaire, tu sélectionnes les enregistrements à supprimer en cochant la case à cocher liée à ce champ Oui/Non
    Ensuite tu as plusieurs possibilités pour supprimer les enregistrements. La plus simple à réaliser me semble être celle-ci :
    - Tu crées une requête suppression où le critère est le champ "selection" sur Oui. Appelons cette requête "Suppr_select"
    Et dans ton code, plutôt que d'utiliser la commande DoCmd.RunCommand acCmdDeleteRecord, tu lances la requête suppression. Ce qui donnerait, dans ton 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
    Private Sub cmdSupprimer_Click()
    On Error GoTo GestionErreurs
    'Désactive l'affichage des messages système
    DoCmd.SetWarnings False
    If MsgBox("Voulez-vous vraiment supprimer les enregistrements sélectionnés?", _
    vbQuestion + vbYesNo + vbDefaultButton2, "Suppression") = vbYes Then      'Cas où l'utilisateur clique sur Oui
    DoCmd.OpenQuery "suppr_select"
    Else       'cas où l'utilisateur clique sur Non
    Exit sub
    End If
    Exit_cmdSupprimer:
    'Réactive l'affichage des messages système
    DoCmd.SetWarnings True
    Exit Sub
    GestionErreurs:
    Select Case Err.Number
    Case 2046
    'Affichage d'un message
    MsgBox _
    "La commande ""Supprimer l'enregistrement"" n'est pas disponible pour l'instant !", _
    vbInformation, "Erreur !"
    Resume Exit_cmdSupprimer
    Case Else
    MsgBox "Une erreur inattendue s'est produite !" & vbNewLine & "Erreur no : " _
    & Err.Number & vbNewLine & Err.Description, vbCritical, "Erreur !"
    Resume Exit_cmdSupprimer
    End Select
    End Sub
    Parmi les autres possibilités :
    - tu crées une requête normale, avec comme critère le champ de sélection sur Oui. Dans le code tu ouvres la requête, tu sélectionnes tous les enregistrements et tu les supprimes.
    - tu fais tout dans le code avec une requête de suppression en SQL
    Si tu veux mettre en œuvre cette dernière solution, et que tu as besoin d'aide, dis-le.
    Cordialement

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 81
    Par défaut
    Bonjour Robi et merci

    ALors j'ai fais ta première solution qui me plait beaucoup

    Je l'ai testé et c'est bizarre car lorsque je sélectionne ce que je veux supprimer. Tout est supprimé sauf le premier sélectionné. (pourquoi ça fait ça ?)

    Ensuite j'ai un autre problème qui s'impose car avant je rajoutais cette ligne de code juste après (if msgbox ....)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CurrentDb.Execute "delete from historique where IDELEVE=" & IDELEVE, dbFailOnError
    Car enfaîte quand je supprime un élève je supprime l'historique de l'élève.

    Pour le moment quand je supprime un élève l'historique est bien supprimé avec la ligne de code que j'ai mis en haut

    Mais maintenant que je veux supprimer plusieurs grâce à ta solution j'ai 2 problèmes
    > Le premier sélectionné n'est pas supprimé
    > comment dire dans le code supprime toutes les historiques des élèves sélectionnés

    Merci du temps que tu m'accordes
    Justine

  6. #6
    Membre Expert Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Par défaut
    Bonjour Justine.

    Puisque tu utilise déjà le SQL dans ton code, on va faire de même pour la suppression des sélectionnés. Donc tu convertis ta requête suppression en SQL. Et ça a l'avantage d'éviter que on ne la lance par erreur...
    Quant à la non suppression du premier c'est probablement une question d'actualisation du formulaire. Moi, pour éviter tout problème quand je fais ce genre de chose, je ferme mon formulaire au début de la procédure, avant l'exécution des requêtes et je le rouvre à la fin de la procédure. Cela évite un éventuel conflit si tu supprimes un enregistrement en cours d'affichage et considéré à ce moment comme impossible à modifier, et la réouverture du formulaire fait que tout est actualisé après l'exécution des requêtes.

    En supposant que tes tables s'appellent Elèves et historique, et que le champ commun soit IDELEVE (tu adaptes, sinon...)
    Dans le code, d'abord la suppression de l'historique, puis la suppression des sélectionnés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DoCmd.Close acForm, "le_nom_de_ton_formulaire"
    CurrentDb.Execute "DELETE DISTINCTROW historique.*, Elèves.selection FROM historique INNER JOIN Elèves ON historique.IDELEVE = Elèves.IDELEVE WHERE (((Elèves.selection)=Yes));"
    CurrentDb.Execute "DELETE Elèves.*  FROM Elèves WHERE Elèves.selection=Yes"
    DoCmd.OpenForm "le_nom_de_ton_formulaire"
    Tiens-moi au courant...
    RL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/01/2016, 16h21
  2. Supprimer une chaine entre parenthese sur un select
    Par sebg42 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/06/2007, 19h07
  3. Supprimer une selection de tables
    Par magic charly dans le forum Oracle
    Réponses: 7
    Dernier message: 12/10/2006, 15h17
  4. Supprimer une option d'un select à choix multiple
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/02/2005, 14h16
  5. [Sybase] Select dans une select loop en C
    Par Claudio dans le forum Sybase
    Réponses: 2
    Dernier message: 29/04/2003, 18h06

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