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 d'un selection multiple dans une zone de liste [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut Suppression d'un selection multiple dans une zone de liste
    Bonjour à tous,

    j'ai une zone de liste nommée : Liste_Article.

    Au début le paramètre "sélection multiple" de celle-ci était sur aucun.

    Voici le code pour supprimer une ligne :

    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
     
    Private Sub Del_Article_Click()
    On Error GoTo Err_Del_Article_Click
     
        DoCmd.OpenForm "Formulaire1", acNormal, , "[N°Article] = " & Me.Liste_Article
     
        DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
        DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
     
        Forms!Formulaire1.Refresh
     
    Exit_Del_Article_Click:
        Exit Sub
     
    Err_Del_Article_Click:
        MsgBox Err.Description
        Resume Exit_Del_Article_Click
     
    End Sub
    Jusque là tout allait bien, maintenant j'aimerais pouvoir faire une "sélection multiple étendue" et donc supprimer plusieurs lignes d'un coup.

    C'est là que ça ne va plus et que je ne vois pas quoi écrire.

    Faut-il par exemple enregistrer les lignes sélectionnées puis lui dire de supprimer ces items là ?

    merci.

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    yieiyiei,



    un peu compliqué pour effacer une ligne (ouverture d'un formulaire -> suppression -> rafraichissement)

    Tu peux utiliser des requêtes suppression en y incluant un filtre par exemple :

    regarde ici

    http://access.developpez.com/faq/?page=SQL#DeleteAll

    Cldt

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    merci jimbolion, c'est effectivement plus court

    j'ai changé mon code suivant l'exemple à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "Delete * From T_Article WHERE [N°Article]= ...
    mais voilà, que mettre aux "..." comment lui dire = sélection de ou des [N°Article] dans ma zone de liste [Liste_Article] ?

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    yieiyiei,

    un descriptif et quelques explications sur le contenu des tables, les règles de suppression me permettrait d'en savoir un peu plus sur l'objet de ta demande et ainsi te fournir une solution adaptée.

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    je ne sais pas si ça t'arrange, le fichier est joint ...

    ça se passe dans le "formulaire1" tu verras un bouton avec ton code de suppression qui marche lorsque la sélection multiple n'est pas activée. Mais plus ensuite.

    Mon projet est bricolé mais avec mes connaissances fort limitées je fais ce que je peux

    merci de me donner ton avis
    Fichiers attachés Fichiers attachés

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    j'ai aussi retranscrit un post en concret qui pourrait être intéressant, ça récupère les valeurs sélectionnées, faut il encore arriver à demander de supprimer la sélection
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    yieiyiei,

    donc je te remercie pour l'exemple, mais j'ai su m'en tirer sans

    Donc le principe est le parcours de la zone de liste et récupérer uniquement les articles sélectionnés, j'ai commenté en marge de chaque ligne le déroulement des opérations :

    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
    Private Sub Del_jimbolion_Click()
    '
    Dim i As Long, Article As Long
    For i = 0 To Me.Liste_Article.ListCount                                 ' lecture de l'ensemble des lignes de la zone de liste
    '
    DoCmd.SetWarnings False                                                 ' supprime le message de confirmation
    Dim SQL As String
    '
         If Me.Liste_Article.Selected(i) Then                               ' contrôle si article sélectionné
              Article = Liste_Article.Column(0, i)                          ' récupère l'id de l'article
              '
              SQL = "Delete * From T_Article WHERE [N°Article]=" & Article  ' Supprime l'article sélectionné
              DoCmd.RunSQL SQL
         End If
     
    Next i
     
    DoCmd.SetWarnings True                                                  ' réactive les messages de confirmation
    '
    DoCmd.Requery "Liste_Article"                                           'Rafraichit la zone de liste
    '
    End Sub
    Je te laisse parcourir et analyser ces quelques lignes

    Cordialement

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    C'est parfait !

    faute de temps j'avoue ne pas faire les choses dans l'ordre mais j'aimerais pouvoir établir des codes ainsi, mais par où commencer ? lol

    En tout cas un grand merci.

    Avant de mettre le post en Résolu j'ai une dernière question. Dans mon ancien code j'ajoutais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If IsNull(Me.Liste_Article.Value) Or Me.Liste_Article.Value = "" Then
        MsgBox ("Sélectionner une ligne")
        Exit Sub
        Else
    qui permettait donc que si on clique sur "Supprimer" de reconnaître qu'aucune ligne n'avait été sélectionnée et donc de demander d'en choisir une. C'est ce qu'il me reste d'ajouter à ton code mais quelle champ remplace "Me.Liste_Article.Value" ? il s'agit de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Liste_Article.Selected(i)
    ?

  9. #9
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    yieiyiei

    En vérifiant si une ligne au moins a été sélectionnée et l'utilisation d'un flag de contrôle

    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
    Private Sub Del_jimbolion_Click()
    '
    Dim i As Long, Article As Long, Trouve As Boolean
    '
    Trouve = False                                                          ' positionne l'indicateur de suuppression à false
    '
    For i = 0 To Me.Liste_Article.ListCount - 1                             ' lecture de l'ensemble des lignes de la zone de liste
    '
    DoCmd.SetWarnings False                                                 ' supprime le message de confirmation
    Dim SQL As String
    '
     
    '
         If Me.Liste_Article.Selected(i) Then                               ' contrôle si article sélectionné
              Article = Liste_Article.Column(0, i)                          ' récupère l'id de l'article
              '
              SQL = "Delete * From T_Article WHERE [N°Article]=" & Article  ' Supprime l'article sélectionné
              '
              Trouve = True                                                 ' un enregistrement supprimé on modifie la variable
              DoCmd.RunSQL SQL
         Else
     
         End If
     
    Next i
    '
    If Trouve = False Then                                                  ' teste si on a effacé un enregistrement
        MsgBox "Sélectionner une ligne", vbCritical, "Erreur"
    End If
     
    '
    DoCmd.SetWarnings True                                                  ' réactive les messages de confirmation
    '
    DoCmd.Requery "Liste_Article"                                           'Rafraichit la zone de liste
    '
    End Sub
    @ Bientôt

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    merci bcp jimbolion

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    sorry de revenir encore vers toi, je pensais y arriver mais non

    j'ai bien vu que la demande de confirmation était supprimée, là c'est ok.

    Je voulais par contre la remplacer par une de ce type là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If MsgBox("Supprimer l'article ?", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
        Exit Sub 'Si NON ne fait rien
        End If 'Si oui ... :
    Sinon l'utilisateur n'est pas à l'abri de supprimer une ligne par accident mais voilà, j'ai beau la placer à plusieurs endroits, ça ne semble pas être compatible tel quel. Peux-tu encore juste m'éclairer sur ce point ?

    merci beaucoup.

  12. #12
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    yieiyiei

    la question doit être posée sur chaque article ou simplement si il y a au moins une ligne de sélectionnée ?
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    héhé, je n'avais même pas envisagé ce cas là, non il ne s'agit que d'une sécurité avant annulation que la sélection soit une ligne ou plusieurs donc si après demande : oui, ton code est appliqué, sur l'utilisateur clic non, on sort !

    ça répond à ta question ?

    merci pour ta réactivité en tout cas

  14. #14
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    yieiyiei,

    Donc principe similiare et falg permettant de savoir si la question a été posée


    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
    Private Sub Del_jimbolion_Click()
    '
    Dim i As Long, Article As Long, Trouve As Boolean, QuestionPosee As Boolean
    '
    Trouve = False                                                          ' positionne l'indicateur de suppression à false
    QuestionPosee = False                                                   ' positionne l'indicateur de question déjà posée à false
    '
    For i = 0 To Me.Liste_Article.ListCount - 1                             ' lecture de l'ensemble des lignes de la zone de liste
    '
    DoCmd.SetWarnings False                                                 ' supprime le message de confirmation
    Dim SQL As String
    '
         If Me.Liste_Article.Selected(i) Then                               ' contrôle si article sélectionné
              Article = Liste_Article.Column(0, i)                          ' récupère l'id de l'article
              '
              If QuestionPosee = False Then
                If MsgBox("Supprimer le(s) article(s) ?", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
                  Exit Sub 'Si NON ne fait rien
                Else
                  QuestionPosee = True
                End If 'Si oui ... :
              End If
              '
              SQL = "Delete * From T_Article WHERE [N°Article]=" & Article  ' Supprime l'article sélectionné
              '
              Trouve = True                                                 ' un enregistrement supprimé on modifie la variable
              DoCmd.RunSQL SQL
         Else
     
         End If
     
    Next i
    '
    If Trouve = False Then                                                  ' teste si on a effacé un enregistrement
        MsgBox "Sélectionner une ligne", vbCritical, "Erreur"
    End If
     
    '
    DoCmd.SetWarnings True                                                  ' réactive les messages de confirmation
    '
    DoCmd.Requery "Liste_Article"                                           'Rafraichit la zone de liste
    '
    End Sub
    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    c'était effectivement plus compliqué que ce que j'imaginais

    merci

    dans mes objectifs j'envisage de pouvoir dupliquer un article ou soyons fous plusieurs, je me trompe peut-être mais la mécanique sera fort semblable avec une partie pour la duplication différente.

    si ça coince, je posterai un autre poste.

    sincèrement, merci 1000 fois !!!

    C'est Résolu de Résolu

  16. #16
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    yieiyiei

    la manipulation des zones de liste en partie VBA oui, car on arrive pas à récupérer le nombre de lignes sélectionnées avant parcours de la boucle.

    pour le reste ce sera plus simple

    donc @ bientôt
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/01/2016, 16h21
  2. supprimer dans une zone de liste à multiple selection
    Par vavou dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/04/2008, 13h54
  3. Sélection multiple dans une zone de liste
    Par mawi dans le forum VBA Access
    Réponses: 5
    Dernier message: 25/09/2007, 18h00
  4. Réponses: 1
    Dernier message: 06/07/2007, 13h44
  5. selection multiple dans une zone de liste
    Par issam16 dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 10h44

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