Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Rafraichissement Listbox

Calvus

XLDnaute Barbatruc
Bonsoir à tous,

Je me heurte à un problème qui me rend fou, et pourtant j'ai déjà eu à résoudre ce type de cas, mais je dois être trop fatigué !

J'alimente une listbox via un tableau.
Une fois la ligne sélectionnée, les données sont écrites sur une nouvelle feuille, et j'aimerais mettre à jour ma listbox avec les nouvelles données, donc une ligne à chaque fois.
Il s'agit en fait de comparer 2 tableaux, en ayant comme critère une date, et recharger la listbox avec toutes les données sauf celle qui vient d'être copiée dans la seconde feuille.
Malgré des heures de tentative 'en passant même par un dico), soit je retrouve les mêmes données, soit 2 soit ma listbox est vide. Je devient chèvre !
Un exemple figure sur le fichier joint.
Merci.
 

Pièces jointes

  • Mise à jour Listbox.xlsm
    28.7 KB · Affichages: 13

Gégé-45550

XLDnaute Accro
Bonsoir,
Ce ne serait pas mieux comme ça ?
Cordialement,
 

Pièces jointes

  • Mise à jour Listbox_GG.xlsm
    47.1 KB · Affichages: 8

Calvus

XLDnaute Barbatruc
Bonjour,
Initialiser la listbox fonctionnait très bien.
L'idée est de est de la recharger après avoir cliqué dessus.
En cliquant, on inscrit les données de la ligne sélectionnée sur la feuille Arrivée, et du coup on recharge avec cette ligne en moins. Et ainsi de suite.
Du coup si on a 10 lignes au départ, après 4 clics on n'en a plus que 6, etc. (ou dit autrement, on ne peut pas inscrire 2 fois les mêmes données sur la feuille arrivée.)
Bonne journée.
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

L'idée est de est de la recharger après avoir cliqué dessus.
En cliquant, on inscrit les données de la ligne sélectionnée sur la feuille Arrivée, et du coup on recharge avec cette ligne en moins. Et ainsi de suite.
Est-ce que le transfert de la ListBox vers le tableau de la feuille "Arrivée" ne se fait pas lors du clic sur le bouton "Valider" plutôt que lors du clic sur un item de la ListBox ?
 

Calvus

XLDnaute Barbatruc
Bonjour @TooFatBoy ,

Oui, cela pourrait se faire. Mais l'utilisateur doit pouvoir transférer une nouvelle ligne sans avoir à quitter l'usf, ce qui ne change d'ailleurs rien au problème avec le mode de chargement actuel de la listbox.
 

TooFatBoy

XLDnaute Barbatruc
Oui pourquoi pas, mais comment gérer le nouveau tableau ?
Quel "nouveau tableau" ???





Une proposition en pièce jointe.

1- J'ai ajouté une colonne au TS de la feuille "Départ". Cette colonne sert à savoir si la ligne existe déjà dans le tableau de la feuille "Arrivée".
Il est bien sûr possible de masquer cette colonne.

2- J'ai créé une macro "RemplirListBox1" qui sert à remplir la ListBox1.

3- J'ai créé une macro "Transfert" qui sert à transférer une ligne de la ListBox1 vers le tableau de la feuille "Arrivée".

4- Le transfert se fait actuellement par un double-clic, mais tu peux facilement modifier ça en appelant la macro de transfert de l'endroit où tu veux.
 

Pièces jointes

  • Mise à jour Listbox.xlsm
    35.6 KB · Affichages: 5
Dernière édition:

Gégé-45550

XLDnaute Accro
Bonsoir Calvus, l'ami TooFatBoy
J'étais occupé tout l'après-midi.
Une proposition :
VB:
Private Sub ListBox1_Click()
Dim i%, j%, pos%, taille%
Dim DerligArrivee%
Dim Liste_Box()
Dim fDepart As Worksheet, fArrivee As Worksheet
Set fDepart = Sheets("Départ")
Set fArrivee = Sheets("Arrivée")
pos = 10000
DerligArrivee = fArrivee.Cells(Rows.Count, 1).End(xlUp).Row
DerligArrivee = DerligArrivee + 1

ReDim a(1 To 1, 1 To 6)
ReDim Liste_Box(ListBox1.ListCount - 1, 0 To 5)
For i = 0 To ListBox1.ListCount - 1
    For j = 0 To 5
        Liste_Box(i, j) = ListBox1.List(i, j)
    Next j
    If ListBox1.Selected(i) = True Then
        For j = 0 To 5
            a(1, j + 1) = ListBox1.List(i, j)
        Next j
        pos = i
    End If
Next i

If fArrivee.Range("A2") = "" Then
    fArrivee.Cells(DerligArrivee - 1, 1).Resize(1, 6) = a
Else
    fArrivee.Cells(DerligArrivee, 1).Resize(1, 6) = a
End If

If pos <> 10000 Then
    ListBox1.Clear
    taille = UBound(Liste_Box) - 1
    For i = pos To taille
        For j = 0 To 5
            Liste_Box(i, j) = Liste_Box(i + 1, j)
        Next j
    Next i
    For i = 0 To taille
        ListBox1.AddItem
        For j = 0 To 5
            ListBox1.List(i, j) = Liste_Box(i, j)
        Next j
    Next i
End If

End Sub
Cordialement,
 

TooFatBoy

XLDnaute Barbatruc
Initialiser la listbox fonctionnait très bien.
Si ton Initialize te convient, alors je te propose ceci :

VB:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'
Dim DerLig As Long, i As Long, Monchoix As Long

    ' Transfert des données de l'item sélectionné
    With Range("Tableau3")
        DerLig = IIf(.ListObject.DataBodyRange Is Nothing, 1, .Rows.Count + 1)
        .Cells(DerLig, 1) = CDate(ListBox1.List(ListBox1.ListIndex, 0))
        .Cells(DerLig, 2) = CDate(ListBox1.List(ListBox1.ListIndex, 1))
        For i = 3 To 6
            .Cells(DerLig, i) = ListBox1.List(ListBox1.ListIndex, i - 1)
        Next i
    End With

    ' Suppression de la ligne de l'item sélectionné
    With ListBox1
        Monchoix = .ListIndex
        .ListIndex = -1
        .RemoveItem (Monchoix)
    End With

End Sub
 

Pièces jointes

  • Mise à jour Listbox.xlsm
    39.2 KB · Affichages: 5
Dernière édition:

Discussions similaires

Réponses
16
Affichages
728
Réponses
21
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…