Microsoft 365 Rafraichissement Listbox

  • Initiateur de la discussion Initiateur de la discussion Calvus
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
Bonsoir,
Ce ne serait pas mieux comme ça ?
Cordialement,
 

Pièces jointes

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.
 
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 ?
 
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

Dernière édition:
C'est vrai ! 😀
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,
 
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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
827
Réponses
21
Affichages
2 K
Retour