Microsoft 365 Listbox case à cocher transfert sur feuille

Scorpio

XLDnaute Impliqué
Bonjour à tous,
J'ai dans ce classeur un formulaire avec 2 listbox et un bouton de transfert sur feuille.
Je suis pas l'auteur des codes, hélas, mais cela m'intéresserais de l'utiliser.
Le soucis, c'est lors du transfert, dans la feuille "Regroupe", il n'y a rien ou presque rien.
Y aurais-t-il un membre sympas, pour me dépanner.
Je vous en remercie d'avance, et à ++++
Scorpio
 

Pièces jointes

  • GroupeOptionsMultiples.xlsm
    36.6 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Scorpio,
Un essai en PJ avec quelques modifications dans CommandButton1_Click :
- remplacez Clear par Clearcontents conserve les formats utilisés
- précisez dans quel userform on travaille, en l'occurrence ListBox1
- je ne comprends pas l'utilité de la mise en forme sur la colonne 7
En espérant ne pas être à coté de la plaque. :)
 

Pièces jointes

  • GroupeOptionsMultiples.xlsm
    29.9 KB · Affichages: 4

Scorpio

XLDnaute Impliqué
Re,
Dans la classeur du fil #4, le transfert est très rapide
J'ai copié le formulaire dans un autre classeur mais avec beaucoup plus de donnée, (données Perso, sensible)
Et là, c'est beaucoup plus lent, ca fonctionne mais au ralentis, pourquoi, ???
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Il peux y avoir beaucoup de raisons.
Testez cette PJ, il y a 5000 données dans la BD.
Si on transfère tout, sur mon PC, cela prend 2.3s. Ce qui me semble raisonnable pour une telle quantité de données.

20210407_145819.gif
 

Pièces jointes

  • GroupeOptionsMultiples (3).xlsm
    384.3 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour Scorpio, sylvanu,
J'ai copié le formulaire dans un autre classeur mais avec beaucoup plus de donnée, (données Perso, sensible)
Et là, c'est beaucoup plus lent, ca fonctionne mais au ralentis, pourquoi, ???
La macro de transfert est lente parce qu'elle remplit les cellules une par une :
VB:
            For i = 0 To ListBox1.ListCount - 1
                For j = 0 To ListBox1.ColumnCount - 2
                    .Cells(2 + i, j + 1) = ListBox1.List(i, j)    'boucle de transfert
                Next j
            Next i
Il faut bien sûr les remplir en passant par un tableau VBA, c'est classique.

Nota : 5000 données c'est peanuts...

A+
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Job,
Cette approche était dans la version initiale, donc inchangée pour le problème de ce fil qui ne concernait que "Listbox case à cocher transfert sur feuille"

En PJ une autre approche en passant par un array, on passe de 2.3s à 0.15s.
 

Pièces jointes

  • GroupeOptionsMultiples (4).xlsm
    365 KB · Affichages: 8

job75

XLDnaute Barbatruc
Je refais mon message.

En fait ListBox1.List est déjà un tableau VBA donc utilisez :
VB:
Private Sub CommandButton1_Click()
    Dim T0, n&
    T0 = Timer
    n = ListBox1.ListCount
    With Sheets("Regroupe").[A2]
        If n Then .Resize(n, 6) = ListBox1.List
        .Offset(n).Resize(Rows.Count - n - .Row + 1, 6).ClearContents 'RAZ en dessous
    End With
    TempsTransfert = "Temps de transfert : " & Round(1000 * (Timer - T0), 0) & "ms"
    MsgBox "Transfert terminé!", vbOKOnly + vbInformation, "TRANSFERT"
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
286 621
Messages
1 877 549
Membres
160 769
dernier inscrit
Yudlo
Haut Bas