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

Macros et VBA Excel Discussion :

Supprimer une ligne d'une listbox [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut Supprimer une ligne d'une listbox
    Bonjour à tous,

    Je dispose d'une UserForm où j'ai disposé une listbox qui va s'incrémenter par le biais d'un bouton "OK". Avant d'appuyer sur le bouton "OK", l'utilisateur va devoir renseigner plusieurs ComboBox avec des choix multiples.

    Les utilisateurs peuvent se tromper dans un renseignement et s'en rendent compte lors de l'appui sur "OK". J'aimerais donc qu'ils puissent sélectionner sur la listbox la ligne où il se sont trompés et, avec un bouton "SUPPRIMER", supprimer cette ligne.

    Merci de votre aide!

    Cordialement.

    M.Gwénaël

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Re-

    !!!! Si tu as rempli la liste avec AddItem et pas RowSource :
    Un bouton "SUPPRIMER" et le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RemoveItem (ListBox1.ListIndex)
    Je te recommande la lecture de ces tutoriels :
    http://silkyroad.developpez.com/VBA/UserForm/
    et
    http://silkyroad.developpez.com/VBA/ControlesUserForm/

    Bonne continuation.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Oui j'avais déjà vu ces liens mais le soucis est que j'ai utilisé RowSource et pas AddItem donc je suis un peu perdu.
    RowSource me parait plus adapté à ma situation comme les utilisateurs seront amenés à ajouter ou supprimer des critères.

    Je suis donc un peu perdu sur le choix et sur le comment faire une suppression.

    Merci!

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Redonne moi le code de ton bouton OK stp.
    Je regarde ça demain.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Je vous donnerais ça demain car je ne suis plus au boulot.

    Merci beaucoup en tout cas

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    C'est pas la mère à boire tu replace RowSource par List.

    cobobox.list =range("A1:A120").value

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,


    Tu n'as pas le choix que de passer par AddItem si tu veux faire des suppressions car RowSource et List demande une plage ou un tableau (pour List)

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Ok très bien.

    Par contre avec la fonction AddItem je peux sélectionner une plage de cellule sur une feuille comme pour RowSource comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.fenginComboBox.RowSource = "INDEX!B2:B" & Sheets("INDEX").Cells(1, 2).End(xlDown).Row
    Ou je suis obligé de faire 50 lignes de code pour mettre tous mes critères?

  9. #9
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Tu n'as pas compris...
    Tes combobox peuvent être remplies comme tu le souhaites, on s'en fiche ici.
    C'est ta ListBox qui doit être remplie par AddItem...
    Donne nous donc le code de remplissage de ta ListBox, qui doit se trouver dans le code de ton bouton OK_Click.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ça ça marche très bien!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
    Me.ComboBox1.Clear
    Me.ComboBox1.List = Range("a1:a15").Value
    End Sub
     
    Private Sub CommandButton2_Click()
    ComboBox1.RemoveItem (0)
    End Sub

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Effectivement je me suis un peu perdu...

    Mon code du bouton_Ok est celui-ce:
    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 CommandButton_OK_Click()
    Dim DerLig As Integer
     
    If nomComboBox.Value = "" Or fenginComboBox.Value = "" Or enginComboBox.Value = "" Or typeoperationComboBox.Value = "" Or tempsComboBox.Value = "" Then
     
       MsgBox "Les critères non pas été tous renseignés"
     
    Else
      With Worksheets("EVENEMENTS")
        DerLig = .Range("B" & Rows.Count).End(xlUp).Row + 1
        .Range("B" & DerLig).Value = nomComboBox.Value
        .Range("C" & DerLig).Value = fenginComboBox.Value
        .Range("D" & DerLig).Value = enginComboBox.Value
        .Range("E" & DerLig).Value = typeoperationComboBox.Value
        .Range("F" & DerLig).Value = tempsComboBox.Value
        .Range("G" & DerLig).Value = DTPicker1.Value
    End With
     
    'Vider les combobox lors d'un click sur le bouton OK que lorsque toutes les données sont rentrées
    nomComboBox.Value = Clear
    fenginComboBox.Value = Clear
    enginComboBox.Value = Clear
    typeoperationComboBox.Value = Clear
    tempsComboBox.Value = Clear
    End If
     
    'Garder en historique, visible par l'utilisateur, que les 10 dernières saisies
    Dim DerniereLigneSaisie As Integer, PremiereLigne As Integer
    DerniereLigneSaisie = Sheets("EVENEMENTS").Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
     
    If DerniereLigneSaisie - 8 < 2 Then
        PremiereLigne = 2
    Else
        PremiereLigne = DerniereLigneSaisie - 8
    End If
    ListBox1.ColumnCount = 8
    ListBox1.ColumnHeads = True
    ListBox1.RowSource = "EVENEMENTS!A" & PremiereLigne & ":G" & DerniereLigneSaisie
    End Sub

  12. #12
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Essaye donc, comme dit par rdurupt (salutations au passage) précédemment, de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RowSource = "EVENEMENTS!A" & PremiereLigne & ":G" & DerniereLigneSaisie
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.List = Sheets("EVENEMENTS").Range("A" & PremiereLigne & ":G" & DerniereLigneSaisie).Value

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Lorsque je veux exécuter j'ai une erreur "70" Permission réfusé sur cette même ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.List = Sheets("EVENEMENTS").Range("A" & PremiereLigne & ":G" & DerniereLigneSaisie).Value

  14. #14
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    A ce niveau, on va devoir chercher à tâtons.
    Il nous faut (en tout cas moi...) le classeur de travail...

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Alors je vous transmets mon classeur de travail.

    Pour rappel, mon problème est que j'aimerais pouvoir, en cas de mauvaise manipulation, supprimer une ligne de ma listbox. J'ai mis un bouton supprimer sur la UserForm afin de supprimer une ligne.

    Merci de votre aide !
    Mission_Service_Garage.xlsm

  16. #16
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Chez moi cela fonctionne.
    Mais, il convient de modifier aussi dans l'Userform_initialize...

    Essaye donc de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RowSource = "EVENEMENTS!A" & PremiereLigne & ":G" & DerniereLigneSaisie
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.List = Sheets("EVENEMENTS").Range("A" & PremiereLigne & ":G" & DerniereLigneSaisie).Value

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Oui effectivement c'est une erreur de ma part. Du coup il me faut faire quoi pour la suppression?

  18. #18
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    1. Remplacer partout le RowSource par List
    2. Ajouter ce code dans le bouton Supprimer :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ListBox1.RemoveItem (ListBox1.ListIndex)

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Lorsque je remplace les RowSource par list jusqu'ici ça va. Ensuite j'ai un problème d'exécution sur mon bouton supprimer...

    De plus si je viens supprimer manuellement mes lignes sur mon tableau feuille "EVENEMENTS" mes combobox m'affiche n'importe quoi après...

  20. #20
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    En effet.
    Je n'avais pas regardé plus avant le fonctionnement que tu souhaites.
    En fait, quand nous disons qu'il est impossible de supprimer une ligne d'une ListBox alimentée par REowSource, ce n'est pas tout à fait vrai.
    Je te suggère donc de revenir au remplissage par RowSource (dans l'Userform_Initialize ET dans le code du bouton OK).

    Le code de ton bouton Supprimer sera alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton_supprimer_Click()
    Sheets("EVENEMENTS").Range("B" & ListBox1.ListIndex & ":G" & ListBox1.ListIndex).Delete Shift:=xlUp
    End Sub
    Comme tu vois, la suppression dans la feuille (dans la plage qui compose le RowSource) va supprimer dans la ListBox...

    Ensuite, ton cafouillage au niveau des combobox est dû à cette partie de ton code :
    dans le : Private Sub CommandButton_OK_Click()
    Tu nous mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Vider les combobox lors d'un click sur le bouton OK que lorsque toutes les données sont rentrées
    nomComboBox.Value = Clear
    fenginComboBox.Value = Clear
    enginComboBox.Value = Clear
    typeoperationComboBox.Value = Clear
    tempsComboBox.Value = Clear
    Or ça n'existe pas...
    A remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Vider les combobox lors d'un click sur le bouton OK que lorsque toutes les données sont rentrées
    nomComboBox.Value = ""
    fenginComboBox.Value = ""
    enginComboBox.Value = ""
    typeoperationComboBox.Value = ""
    tempsComboBox.Value = ""
    Après ceci, pour être tout à fait honnête, nous ne pouvons pas débugger toute ton application.
    Il faut que tu fasses un minimum de recherche par toi même.
    Sur les forums, tu poses une question précise sur un point précis du code.
    A toi ensuite d'analyser les réponses, de lire les tutoriels indiqués et d'adapter à ta situation...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Supprimer les lignes d'une table dans une autre table
    Par blastmind dans le forum SAS Base
    Réponses: 2
    Dernier message: 28/04/2009, 14h17
  5. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42

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