XL 2013 collage valeur avec bouton validation est trop lente

candido57

XLDnaute Occasionnel
Bonjour,
J'ai un fichier avec un userform et en cliquant sur "VALIDER", j'ai les informations du userform qui se collent sur les lignes au fur et à mesure. Le fichier fonctionne très bien, mais lorsque j'appuis sur VALIDER, les informations se collent très lentement.
Que peut on faire pour accélérer le collage valeur?

Et sur le même fichier, dans userform, j'ai une liste déroulante avec des articles et je voudrais savoir s'il est possible de faire des multi choix en sélectionnant les articles par exemple 3 articles et en appuyant sur VALIDER, les 3 produites se collent dans mon fichier ( Un en dessous de l'autre).
Est ce possible?

Merci d'avance pour votre aide
 

Pièces jointes

  • Produit complémentaire TEST.xls
    644 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
Je suis désolé, mais avec ton fichier, je n'arrive pas à charger un listbox tout simple...
j'ai essayé exactement la meme chose sur un autre fichier. et la.; aucun pb.
je pense que ton fichier a un pb de compatiblité Mac/PC ou est buggé quelque part...

normalement ces deux lignes de code suffisent
VB:
    With Sheets("Articles").ListObjects("t_Articles")
        Me.ListBox1.List = .ListColumns("Articles").DataBodyRange.Value
    End With
 

candido57

XLDnaute Occasionnel
Je suis désolé, mais avec ton fichier, je n'arrive pas à charger un listbox tout simple...
j'ai essayé exactement la meme chose sur un autre fichier. et la.; aucun pb.
je pense que ton fichier a un pb de compatiblité Mac/PC ou est buggé quelque part...

normalement ces deux lignes de code suffisent
VB:
    With Sheets("Articles").ListObjects("t_Articles")
        Me.ListBox1.List = .ListColumns("Articles").DataBodyRange.Value
    End With
Merci beaucoup, mais ça ne fonctionne pas
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je suis désolé, mais avec ton fichier, je n'arrive pas à charger un listbox tout simple...
normalement ces deux lignes de code suffisent
VB:
With Sheets("Articles").ListObjects("t_Articles")
Me.ListBox1.List = .ListColumns("Articles").DataBodyRange.Value
End With
Ce n'est pas "Articles" mais "ARTICLES ". C'est peut-être ça le pb ??? 🤔
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello
@TooFatBoy : non je ne crois pas que la syntaxe soit en cause ici, mais bien un pb de fichier "initialement MAC" qui traine un pb de compatiblité..??

en PJ, j'ai ajouté un autre Userform2 sur lequel j'ai mis un listbox et le MEME code

dans le USF1 ==> le listbox n'est pas rempli, et sa taille change étrangement toute seule..
d'ailleurs, dans l'éditeur VBA, si on change une des propriétés du listbox, il s'amuse à changer de taille tout seul aussi...

dans le USF2: le listbox est correctement rempli..

seule solution que je vois (faute de comprendre l'origine du pb), c'est de retracer un USF complet

Note: dans le code du module 2: je vois des fonctions excel redéfinies..??? c'est MAC qui fait ca ou c'est une volonté étrange de @candido57 ??
 

Pièces jointes

  • Produit complémentaire TEST.xlsm
    84.3 KB · Affichages: 0

vgendron

XLDnaute Barbatruc
Après; sur le fonctionnement meme du fichier. je ne comprend pas tout
quand on selectionne une carte (parmi celles listées dans la feuille Donnée) on charge les infos de la feuille Donnée==> OK
MAIS on va chercher le numéro de semaine dans la feuille Base?? à une ligne qui à priori n'a aucun rapport avec la carte selectionnée..???

après.. j'ai un message qui m'indique une référence circulaire.. je ne sais pas où elle est..
 

candido57

XLDnaute Occasionnel
Bonjour
ca veut dire quoi TRES LENT ??
parce que chez moi, c'est immédiat
Ben ce n'est pas instantané. Mais j'ai rajouter au début et à la fin ce code et ça fonctionne très bien.
Application.Calculation = False
Application.Calculation = xlCalculationAutomatic
Avant le collage des valeurs étaient environ 15s et maintenant c'est instantané.
J'ai vu ça dans un tuto, j'espère que c'est bon
 

candido57

XLDnaute Occasionnel
Ben ce n'est pas instantané. Mais j'ai rajouter au début et à la fin ce code et ça fonctionne très bien.
Application.Calculation = False
Application.Calculation = xlCalculationAutomatic
Avant le collage des valeurs étaient environ 15s et maintenant c'est instantané.
J'ai vu ça dans un tuto, j'espère que c'est bon
Bonjour,
Pour commencer, je te remercie pour tout car tu m'as beaucoup aider.
En tapant le N° de carte dans userform, il faudra aussi coller la valeur du N° de la carte dans la feuille "Articles" en cellule O2, je voudrais te demander si c'est possible de mettre en surbrillance par exemple en jaune les articles reçus ou inférieur à 0 dans ma listbox1 en allant chercher l'information dans la feuilles "Articles" ou mettre le texte de la listeBox en rouge et gras

Merci
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello

pour le numéro de carte en O2 (t'es sur que c'est pas M2 plutot??)
il suffit d'ajouter une ligne de code
VB:
Private Sub Cbn_Valider_Click()
Application.ScreenUpdating = False
    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) Then
            'MsgBox Me.ListBox1.List(i)
            With Sheets("Base").ListObjects("t_Base")
                .ListRows.Add 'on ajoute une ligne dans la table
                derligne = .ListRows.Count
                
                .DataBodyRange(derligne, 1).Value = CDbl(Me.TextBox_N°) 'N°
                .DataBodyRange(derligne, 2).Value = Me.TextBox_DateDuJ 'Date'
                .DataBodyRange(derligne, 3).Value = Me.ComboBox_Carte.Value 'N° de carte
                .DataBodyRange(derligne, 4).Value = Me.TextBox11.Value 'Nb de points
                .DataBodyRange(derligne, 5).Value = Me.TextBox10.Value 'Nom
                .DataBodyRange(derligne, 6).Value = Me.TextBox4.Value 'prénom
                .DataBodyRange(derligne, 7).Value = Me.ComboBox_Semaine 'N° Semaine
                .DataBodyRange(derligne, 8).Value = Me.ListBox1.List(i) 'Désignation
                .DataBodyRange(derligne, 9).Value = Me.TextBox7.Value 'Quantité prise
                .DataBodyRange(derligne, 10).Value = Me.TextBox8.Value 'Commentaires
            End With
            Sheets("Articles").Range("O2") = Me.ComboBox_Carte 'on inscrit le numéro de carte en O2
        End If
    Next i
    
    'Raz USF
    Me.ComboBox_Carte.ListIndex = -1
    Me.TextBox11.Value = ""
    Me.ComboBox_Semaine.ListIndex = -1
    Me.TextBox7.Value = ""
    Me.TextBox10.Value = ""
    Me.TextBox4.Value = ""
    Me.TextBox12.Value = ""
    Me.TextBox13.Value = ""
    For i = 0 To Me.ListBox1.ListCount - 1
        Me.ListBox1.Selected(i) = False
    Next i
    
    Me.TextBox_N° = Me.TextBox_N° + 1
Application.ScreenUpdating = True
End Sub

pour la couleur: c'est Impossible dans une Listbox
 

candido57

XLDnaute Occasionnel
Hello

pour le numéro de carte en O2 (t'es sur que c'est pas M2 plutot??)
il suffit d'ajouter une ligne de code
VB:
Private Sub Cbn_Valider_Click()
Application.ScreenUpdating = False
    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) Then
            'MsgBox Me.ListBox1.List(i)
            With Sheets("Base").ListObjects("t_Base")
                .ListRows.Add 'on ajoute une ligne dans la table
                derligne = .ListRows.Count
               
                .DataBodyRange(derligne, 1).Value = CDbl(Me.TextBox_N°) 'N°
                .DataBodyRange(derligne, 2).Value = Me.TextBox_DateDuJ 'Date'
                .DataBodyRange(derligne, 3).Value = Me.ComboBox_Carte.Value 'N° de carte
                .DataBodyRange(derligne, 4).Value = Me.TextBox11.Value 'Nb de points
                .DataBodyRange(derligne, 5).Value = Me.TextBox10.Value 'Nom
                .DataBodyRange(derligne, 6).Value = Me.TextBox4.Value 'prénom
                .DataBodyRange(derligne, 7).Value = Me.ComboBox_Semaine 'N° Semaine
                .DataBodyRange(derligne, 8).Value = Me.ListBox1.List(i) 'Désignation
                .DataBodyRange(derligne, 9).Value = Me.TextBox7.Value 'Quantité prise
                .DataBodyRange(derligne, 10).Value = Me.TextBox8.Value 'Commentaires
            End With
            Sheets("Articles").Range("O2") = Me.ComboBox_Carte 'on inscrit le numéro de carte en O2
        End If
    Next i
   
    'Raz USF
    Me.ComboBox_Carte.ListIndex = -1
    Me.TextBox11.Value = ""
    Me.ComboBox_Semaine.ListIndex = -1
    Me.TextBox7.Value = ""
    Me.TextBox10.Value = ""
    Me.TextBox4.Value = ""
    Me.TextBox12.Value = ""
    Me.TextBox13.Value = ""
    For i = 0 To Me.ListBox1.ListCount - 1
        Me.ListBox1.Selected(i) = False
    Next i
   
    Me.TextBox_N° = Me.TextBox_N° + 1
Application.ScreenUpdating = True
End Sub

pour la couleur: c'est Impossible dans une Listbox
Super et si je sélectionne dans ma listbox un article, j'aimerais coller cette article en S1 feuille articles
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 293
Membres
103 171
dernier inscrit
clemm