Rafraichir une variable VBA

Re à tous :-)

en fait ça lit la plage en une fois dans un tableau, et avec .List tu peux charger ta listbox avec ce tableau.
C'est beaucoup plus rapide que de lire des cellules individuelles
eric

PS : Si tu n'y arrives pas, Dan a adapté mon exemple à ton cas au post précédent

D'accord, merci bien pour cette précision, j'ai essayé de faire le même type d'affichage dans un autre Userbox(FRM_ADD_PRD) mais je ne comprend pas pourquoi il me fait une erreur objet requis ?

ci-joint le fichier

7test.xlsm (36.31 Ko)

Votre macro d'ouverture userform

Private Sub UserForm_Initialize()
Dim cel As Range
For Each cel In Feuil2.Range("A1:N1")
    CBB_ADD_PRD.AddItem Cells(1, cel.Column).Value
Next cel
End Sub

ou plus simple comme ceci

Private Sub UserForm_Initialize()
CBB_ADD_PRD.List = Application.Transpose(Feuil2.Range("A1:N1").Resize(1))
End Sub

ensuite en fonction de ce que vous mettez dans votre textbox1, il faut faire un code adapté pour afficher les données dans la listbox.
Pour cela, il faut savoir quelles sont les colonnes que vous voulez voir dans la listbox

En faite j'essaye de faire un onglet permettant à des Users de naviguer au sein de mes produits:

- ma Listbox LST_ADD_PRD servirait à afficher les lignes produits qui serait récapituler en feuille 2 à l'ouverture de l'Userform ( un produit étant une ligne complète dans la feuille2)

- L'onglet recherche permettrait de taper un mot clé "YY" dans la Textbox1, en ayant sélectionné une catégorie "XX" dans la combobox CBB_ADD_PRD, j'afficherai juste ensuite dans ma listbox LST_ADD_PRD les lignes produits étant "YY" dans la catégorie "XX"

Cela me semble encore lointain vu que je n'arrive même pas à afficher le tableau dans la Listbox mais bon on peut toujours rêver.

Vous ne répondez pas à ma question dans mon dernier post ?

Sinon en fonction de votre post, à l'ouverture de l'userform vous voulez voir tous les produits en feuille 2 ?

Pardon dans la listbox j'aimerais afficher toute les colonnes de la feuille 2 effectivement, un produit étant à mon sens une ligne complète d'information dans la feuille2

L'idéal serait que oui tout les produits soit afficher en feuille 2, mais lorsque je fais une recherche seulement ceux qui corresponde reste dans la Listbox

Bonjour,

Un exemple avec le fichier joint

- En ouvrant l'USF depuis le bouton sur feuil1, la combobox reprend les infos de la ligne 1 et la listbox reprend toutes les données de la feuil2
- Choisissez dans la combo une rubrique pour la recherche.
- Entrez une info (lettre, mot ou chiffre par exemple) dans la textbox, la listbox charge les données trouvées selon l'info entrée dans la textbox
- Pour réafficher la liste complète, vous devez vider la combobox
- La textbox est toujours vidée sur base du choix effectué dans la combo
- Pour chercher une autre donnée en gardant le choix dans la combo, changer uniquement dans la textbox

Le bouton Rechercher peut être supprimé

5test-2.xlsm (41.78 Ko)

Bonsoir Dan,

Tout d'abord un très grand merci à toi, tu ne peux pas savoir à quel point tu égayes ma journée.

J'ai pas encore compris pourquoi faut-il mettre le chargement de la listbox dans un init :

Sub Init()
LST_ADD_PRD.List = Feuil2.Range("A2:N" & Feuil2.UsedRange.Rows.Count).Value
End Sub

Plutôt que dans le Userform_Initialize ?

Cordialement.

Bonjour,

J'ai pas encore compris pourquoi faut-il mettre le chargement de la listbox dans un init :

Si vous regardez les lignes dans la macro Private Sub CBB_ADD_PRD_Change(), vous verrez qu'elle fait aussi appel à la sub INIT.
L'intérêt ne pas la mettre dans la Userform_Initialize est que vous l'appeler de depuis deux macros différentes. Une fois avec la combo et une fois à l'ouverture de l'userform

Vous comprenez ?

Bonjour Dan,

Je comprend mieux, j'ai un peu avancé de mon côté, en ajoutant les boutons supprimer et ajouter produit (pas de soucis pour eux, ils fonctionnent plutôt comme je veux).

Cependant lors de l'affichage des données dans mon tableau produit, je me retrouve avec trop de décimal dans la colonne poids théorique et différence poids théorique (le screen ci-dessous)

image

J'ai essayé de passer les valeurs en .Texte plutôt que en .Value dans mon .List cependant cela ne marche pas.

Faut-il que j'utilise la méthode Application.WorksheetFunction.Round de cette façon :

LST_ADD_PRD.List = Application.WorksheetFunction.Round(Feuil2.Range("A2:N" & Feuil8.UsedRange.Rows.Count).Value , 2)

Au plaisir de lire ta réponse,

Cordialement.

Bonjour,

Faut-il que j'utilise la méthode Application.WorksheetFunction.Round de cette façon :

Non là vous traiter toutes les colonnes alors que c'est la colonne M qui fait défaut
Dans la macro Private Sub TextBox1_Change(), vous changez cette ligne

Me.LST_ADD_PRD.List(i, 12) = Format(.Range("M" & c.Row).Value, "0.00")

Lorsque vous allez chercher une info les données seront comme vous le voulez

Bonjour,

Merci pour cette réponse rapide, je n'avais pas connaissance de Format, cependant cela à engendrer deux autres problèmes :

  • Lors de mon affichage initial les valeurs ont toujours le mauvais nombre de décimal, il faut que je modifie l'init de la même façon que dans Textbox1_change ? je vais essayer cela tout à l'heure.
  • je me retrouve avec un dépassement des capacités du coup quand j'utilise la fonction recherche (ma base de données ""produit" est avec 800 lignes), je ne vois pas trop comment essayer de résoudre cela, est-ce que je demande trop de chose d'un coup à Excel ?
image

Ci-joint mon fichier anonymé et modifié le plus récent.

Cordialement.

4test.zip (352.83 Ko)

Lors de mon affichage initial les valeurs ont toujours le mauvais nombre de décimal, il faut que je modifie l'init de la même façon que dans Textbox1_change ? je vais essayer cela tout à l'heure.

Vous parlez bien du chargement de l'usf à l'ouverture ?

je me retrouve avec un dépassement des capacités du coup quand j'utilise la fonction recherche (ma base de données ""produit" est avec 800 lignes), je ne vois pas trop comment essayer de résoudre cela, est-ce que je demande trop de chose d'un coup à Excel ?

Dans la macro textbox1 Change, modifiez la définition de variable. Dans la déclaration de variable DIM i AS BYTE, remplacez le mot BYTE par INTEGER

NB : Attention votre fichier contient plein de liaisons

Vous parlez bien du chargement de l'usf à l'ouverture ?

Oui, lors de l'ouverture de l'Userform FRM_ADD_PRD la listbox est en donnée "brut", donc pas à un format très agréable.

Dans la macro textbox1 Change, modifiez la définition de variable. Dans la déclaration de variable DIM i AS BYTE, remplacez le mot BYTE par INTEGER

J'ai fais le changement, suite à cela je me suis rendu compte que les temps de chargement de la listbox était un peu long du fait que si on cherche un mot en particulier la listbox s'actualise à chaque nouveau caractère, accentuant le temps d'attente. J'ai donc ajouter un bouton Recherche et modifier légèrement le Textbox1_change en le remplacant par un Cmd_Button_Click

Oui, lors de l'ouverture de l'Userform FRM_ADD_PRD la listbox est en donnée "brut", donc pas à un format très agréable.

Il faut adapter le code de chargement de l'USF à l'ouverture. Remplacez le code INIT par celui ci-dessous

Sub Init()
Dim i As Integer, nblig As Integer
Dim Tablo() As Variant

With Feuil8
    nblig = .UsedRange.Rows.Count - 2
    ReDim Tablo(nblig, 13) As Variant

    For i = 0 To nblig
        Tablo(i, 0) = .Range("A" & i + 2).Value
        Tablo(i, 1) = .Range("B" & i + 2).Value
        Tablo(i, 2) = .Range("C" & i + 2).Value
        Tablo(i, 3) = .Range("D" & i + 2).Value
        Tablo(i, 4) = .Range("E" & i + 2).Value
        Tablo(i, 5) = .Range("F" & i + 2).Value
        Tablo(i, 6) = .Range("G" & i + 2).Value
        Tablo(i, 7) = .Range("H" & i + 2).Value
        Tablo(i, 8) = .Range("I" & i + 2).Value
        Tablo(i, 9) = .Range("J" & i + 2).Value
        Tablo(i, 10) = Format(.Range("K" & i + 2).Value, "0.00")
        Tablo(i, 11) = Format(.Range("L" & i + 2).Value, "0.00")
        Tablo(i, 12) = Format(.Range("M" & i + 2).Value, "0.00")
        Tablo(i, 13) = .Range("N" & i + 2).Value
    Next i
End With

'on charge les valeurs en une fois dans le contrôle ListBox1
With LST_ADD_PRD
    .ColumnWidths = "50;210;70;50;50;90;90;80;75;75;75;50;75;50"
    .List = Tablo
End With
End Sub

Pour votre temps plus long, regardez du coté du gestionnaire de noms dans Formule, dans le fichier que vous avez posté il y a plein de liaisons à un serveur H\:projet..... Vous devez enlever tout cela si non nécessaire

Bonjour Dan, et tous les autres,

Merci pour ton/votre suivi sur ce projet, je vous suis fortement reconnaissant pour votre patiences et votre aide. C'était mon premier projet en VBA et j'espère pouvoir en faire d'autre en votre compagnie..

je suis entrain d'essayer de faire une petite macro me permettant d'extraire les données d'un excel vers un autre (j'ai vu pas mal de sujet similaire sur le site). Je sais que si j'ai un problème je pourrais trouvé de l'aide rapidement et de qualité en créant un nouveau post.

En espérant vous croiser de nouveau sur le site,

Cordialement.

Rechercher des sujets similaires à "rafraichir variable vba"