Microsoft 365 Listbox case à cocher transfert sur feuille

  • Initiateur de la discussion Initiateur de la discussion Scorpio
  • 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 !

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

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

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

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+
 
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
 
- 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
7
Affichages
1 K
  • Question Question
Microsoft 365 Filtre Listbox
Réponses
15
Affichages
2 K
Réponses
1
Affichages
701
Compte Supprimé 979
C
Retour