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 toutes les lignes sélectionnées d'une liste [AC-2019]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Décembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Supprimer toutes les lignes sélectionnées d'une liste
    Bonjour,

    J'ai un petit problème,

    Je possède une liste à choix multiple. J'aurais souhaité récupérer les lignes sélectionnées et les supprimer.

    Or cela ne supprime que la première ligne sélectionné.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim j As Integer
    For j = Me.List1.ListCount - 1 To 0 Step -1
        If Me.List1.Selected(j) = True Then
        'on Supprime l'élément selectionné dans la ListBox.
            Me.List1.RemoveItem (j)
        End If
    Next j
    Après avoir supprimé une ligne, c'est comme si mes autres lignes n'étaient plus du tout sélectionnées.

    Pouvez-vous m'éclairer sur ce problème.

    En vous remerciant,

    Cordialement,

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 677
    Points : 14 669
    Points
    14 669
    Par défaut
    bonjour,
    bienvenue dans le monde mystérieux des zones de liste.
    Il faut savoir que dès lors que tu touches aux valeurs d'une liste par suppression, l'index des items sélectionnés est réinitialisé dès la première suppression (d'où ton problème).

    Il faut donc passer par un subterfuge pour recharger la liste à partir de ceux qui n'ont pas été sélectionnés.
    Bien évidemment, ce code ne fonctionne qu'avec une zone de liste de type liste de valeurs, on ne peut pas supprimer les lignes d'une table ou d'une requête:
    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
    ' supprimer une sélection multiple d'une liste de valeurs
     
    Dim varItm
    Dim I As Integer, J As Integer
    Dim stLstVal As String
     
    varItm = Null
    stLstVal = ""
    For J = 0 To Me.Liste1.ListCount - 1                ' lecture de la liste 1
        If Not (Me.Liste1.Selected(J)) Then
            For I = 0 To Me.Liste1.ColumnCount          ' lecture des colonnes de la liste 1
                varItm = varItm & IIf(IsNull(varItm), Null, ";") & Me.Liste1.Column(I, J)
            Next I
                                                        ' copie des items non sélectionnés
            stLstVal = stLstVal & varItm
            varItm = Null
        End If
    Next J
     
    ' Vidage des anciennes valeurs de la liste 1
    If Me.Liste1.ListCount > 0 Then
        For I = Me.Liste1.ListCount - 1 To 0 Step -1
            Me.Liste1.RemoveItem (I)
        Next I
    End If
    ' rechargement de la liste de valeurs
    Me.Liste1.RowSource = stLstVal
    Avec une liste de valeurs de type Table/requête c'est possible mais un peu plus délicat à gérer car il faut appliquer un filtre sur la table/requête source et indiquer le champ de la colonne utilisée comme identifiant unique pour créer un filtre de type NOT IN avec le risque possible de perdre en performances.

    Voici un exemple avec une zone de liste dont le contenu est une requête et l'identifiant unique se nomme N°:
    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
    Dim strFiltre As String
    Dim strSQL As String
    Dim varItm
     
    ' exclusion des items sélectionnés
    For Each varItm In Me.Liste3.ItemsSelected
       strFiltre = strFiltre & IIf(strFiltre = "", "", ",") & (Me.Liste3.ItemData(varItm))
    Next varItm
     
    ' suppression du caractère de fin si c'est une requête
    strSQL = Replace(Me.Liste3.RowSource, ";", "")
    'si c'est une requête, mettre des parenthèses pour la transformer en sous-requête
    If Left(strSQL, 7) = "SELECT " Then
        strSQL = " SELECT * from (" & strSQL & ")"
    Else
        strSQL = " SELECT * from " & strSQL
    End If
     
    strSQL = strSQL & " WHERE N° not In(" & strFiltre & ")"
    ' rechargement du contenu de la liste
    Me.Liste3.RowSource = strSQL
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Décembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Décembre 2018
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour cette solution

    Et surtout pour ces explications claires et précises.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/08/2017, 13h58
  2. [XL-2016] Supprimer les lignes vides d'une liste déroulante
    Par touch my tralala dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/06/2017, 16h49
  3. Réponses: 5
    Dernier message: 18/03/2009, 12h11
  4. Supprime toutes les lignes d'une table fichier
    Par Loko dans le forum WinDev
    Réponses: 38
    Dernier message: 10/12/2007, 16h21
  5. Supprimer toutes les lignes en dessous d'une cellule
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/08/2007, 13h50

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