[RESOLU] Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Prisca

XLDnaute Nouveau
Bonjour à tous.

Je suis sur une macro Userform avec Listbox et ComboBox; je m'arrache les cheveux, je ne trouve pas à resoudre 3 petits points. Je me permets donc d'envoyer une bouteille à la mer. Help Help.

Voici mon cas:
J'ai un fichier excel avec deux onglets.
Un 1er onglet "LISTE TARIF" qui contient la base de données (code Article Fournisseurs en colonne A, Code Article client en colonne B, Designation Article en colonne C, Prix en D).
2eme onglet "CALCUL DEVIS" avec un tableau vide pour copier le resultat de ma macro (les 3 premieres colonnes).

L'objectif de la macro est de filtrer par 3 comboBox (Code fournisseur, code client et Designation) et selectionner la ligne sur la listbox pour qu'elle se copie dans le tableau. Le client peut soit filtrer soit taper du texte (type smart search, donc pas forcement la 1ere lettre).

Mes problèmatiques:

1 - Ca bugge quand on tape du texte dans la ComboBox (pas toujours mais trés souvent). Le debogage me met en jaune cette ligne de script " Me.ListBox1.list = Application.Transpose(a())"

2 - Quand on tape du texte, il faut mettre un * pour voir l'ensemble des propositions dans la listbox, sinon il fait une proposition aléatoire (par exemple : je voudrais taper "abla" en désignation et avoir tous les mots contenant "abla" dans ma listbox"),

3 - La ligne selectionnée dans la listbox se copie sur la cellule sur laquelle j'ai cliqué (ActiveCell). Si je clique sur C2, j'aurai le code article et les 2 autres mots seront decalés sur la droite.
J'ai besoin que le Code article Fournisseur soit toujours en colonne A, code article client en B et Designation Article en C.

J'espere que mes explications sont pas trop confuses.
Je vous joins le fichier.

Merci par avance.
 

Pièces jointes

  • USERFORM TEST.xlsm
    105.8 KB · Affichages: 68
  • USERFORM TEST.xlsm
    105.8 KB · Affichages: 70
  • USERFORM TEST.xlsm
    105.8 KB · Affichages: 79
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Bonjour

a priori :

1) dans Sub filtre() remplacer les lignes de code après End If par
Code:
  If ligne >= 0 Then Me.ListBox1.List = Application.Transpose(a())

2) modifier dans Sub filtre() et Sub ListeCol(noCol)
Code:
If Not tarif.Cells(i, n) Like Me("comboBox" & n) Then ok = False
en
Code:
If Not tarif.Cells(i, n) Like "*" & Me("comboBox" & n) & "*" Then ok = False

3) Modifier Private Sub ListBox1_Click()
Code:
Private Sub ListBox1_Click()
With Worksheets("CALCUL DEVIS")
    LigneLibre = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Cells(LigneLibre, 1) = Me.ListBox1
    .Cells(LigneLibre, 2) = Me.ListBox1.Column(1)
    .Cells(LigneLibre, 3) = Me.ListBox1.Column(2)
End With
End Sub

A+
 

Prisca

XLDnaute Nouveau
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Merci beaucoup d'avoir pris le temps de regarder mon problème.
Malheureusement les deux premiers points ne fonctionnent pas.

1- En copiant cette phrase "If ligne >= 0 Then Me.ListBox1.List = Application.Transpose(a())", ca bug encore sur Me.ListBox1.List = Application.Transpose(a())

2 -Quand on tape du texte, ca s'affiche toujours entierement. J'avais aussi pensé aussi à cette option, mais marche pô

3 - Genial pour l'emplacement dans les colonnes. Juste un point, je ne veux pas du changement de ligne automatique; Sinon un clic maladroit et on ne peut plus revenir dessus. Je prefere que le changement de ligne se fasse manuellement. J'ai essayé de changer ce parametre mais je n'y arrive pas.

Merci encore
 

Paf

XLDnaute Barbatruc
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Re,

1) les lignes existantes après End If sont-elles effectivement supprimées ? le code final est le suivant
Code:
   Next i
   If ligne >= 0 Then Me.ListBox1.List = Application.Transpose(a())   
End Sub


2) dans Sub filtre() juste après la ligne Dim .... rajouter : Me.ListBox1.Clear

3) dans Private Sub ListBox1_Click()
remplacer
Code:
LigneLibre = .Range("A" & Rows.Count).End(xlUp).Row + 1
par
Code:
LigneLibre = ActiveCell.row

Bonne suite
 

Prisca

XLDnaute Nouveau
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Paf

Le 3, nickel, exactement ce que je cherchais.

Par contre le 1 et le 2 .... :(

1 - Le Application.Transpose d'abord, c'est le plus genant.
Ca continue de bugger. En fait si je tape la ref 08M ca fonctionne parce qu'il le retrouve bien dans la liste, mais si je tape 08m il m'envoit un "Erreur d'execution '5' - Argument ou appel de procédure incorrect".

Actuellement apres Next i, j'ai cette phrase "If ligne = 1 Then ReDim Preserve a(1 To 4, 1 To 2)".
En la supprimant, ca bugge tout pareil mais en plus je perds mes colonnes dans la listbox (les trois infos sont dans la colonne 1).

2 - Me.ListBox1.Clear ne hange rien.
J'ai remarqué par contre qu'en laissant le * devant, ca filtre sur le texte tapé comme je veux, c'est étrange no00n ?

Merci encore pour le temps passé
 

Paf

XLDnaute Barbatruc
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

re

très étrange que les réactions ne soient pas les mêmes. Nous n'avons pas les mêmes versions d'excel, avons nous le même code ?

1) dans le code original, si les choix ne ramènent rien, If ligne = 1 Then ReDim Preserve a(1 To 4, 1 To 2) est inutile puisque ligne sera à 0 et le tableau a() est vide! Et le fait de laisser exécuter Me.ListBox1.list = Application.Transpose(a()) quelque soit le nombre de ligne expose à une erreur (erreur d'execution 5 ...) si ligne=0 puisque a() est vide.

D'où la proposition de code, que je maintiens, après modification

If ligne > 0 Then Me.ListBox1.List = Application.Transpose(a())

s'il n'y a qu'une ligne à afficher, les 3 éléments se mettent effectivement dans la première colonne. Ce n'est pas le fait de la sub Sub filtre() mais a priori de la sub Sub Tri(a, gauc, droi), mais là, je ne touche pas.


2) si le code des deux sub est modifié comme proposé au post # 2, pas de soucis!

3) enfin un point qui fonctionne !

Bonne suite

edit : pour le point 1), Sub Tri(a, gauc, droi) n'est pas en cause
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

re

Pour le point 1, il faut après le end if, même si je ne comprend pas pourquoi:

If ligne = 1 Then ReDim Preserve a(1 To 4, 1 To 2)
If ligne > 0 Then Me.ListBox1.List = Application.Transpose(a())


pour pouvoir saisir des minuscules dans les combobox, dans les deux sub concernées:

If Not tarif.Cells(i, n) Like UCase("*" & Me("comboBox" & n) & "*") Then ok = False

ça devrait être bon!
 

Prisca

XLDnaute Nouveau
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Paf, je te remercie beaucoup pour ton aide et ta patience.

Effectivement en supprimant cette fameuse ligne, ca ne bug plus (youpi).
Il me reste encore le smart search. Ca fonctionne si on met les * à la mano, ca pourrait passer, mais idealement, sans ca serait genial.

Pis faut que j'arrive à regler le probleme de la ligne unique qui se met en une seule colonne.

Je mets le fichier avec les modifications faite, pour plus de clareté.

Merci
 

Pièces jointes

  • USERFORM TEST.xlsm
    107.9 KB · Affichages: 111
  • USERFORM TEST.xlsm
    107.9 KB · Affichages: 98
  • USERFORM TEST.xlsm
    107.9 KB · Affichages: 115

Paf

XLDnaute Barbatruc
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Re

et fin (?)

à tester

Dans la Userform modifier les propriétés des 3 combobox:
Value mettre à vide (donc sans valeur !)
MatchEntry mettre 2 - fmMatchEntryNone

et remplacer la Sub filtre() par celle ci

Code:
Sub filtre()
   Dim a(), Comb1, Comb2, Comb3
   Comb1 = "*" & ComboBox1 & "*"
   Comb2 = "*" & ComboBox2 & "*"
   Comb3 = "*" & ComboBox3 & "*"
   ListBox1.Clear
   For i = 1 To tarif.Rows.Count
       If tarif.Cells(i, 1) Like Comb1 And tarif.Cells(i, 2) Like Comb2 And tarif.Cells(i, 3) Like Comb3 Then
            ligne = ligne + 1
            ReDim Preserve a(1 To 4, 1 To ligne)
            For k = 1 To tarif.Columns.Count: a(k, ligne) = tarif.Cells(i, k): Next k
        End If
   Next i
   If ligne = 1 Then ReDim Preserve a(1 To 4, 1 To 2)
   If ligne > 0 Then Me.ListBox1.List = Application.Transpose(a())  
End Sub


A+
 

Paf

XLDnaute Barbatruc
Re : Userform avec Listbox et ComboBox. Probleme avec Application.Transpose ?

Encore mieux avec cette version

Code:
Sub filtre()
   Dim a(), Comb1, Comb2, Comb3
   Comb1 = UCase("*" & ComboBox1 & "*")
   Comb2 = UCase("*" & ComboBox2 & "*")
   Comb3 = UCase("*" & ComboBox3 & "*")
   ListBox1.Clear
   For i = 1 To tarif.Rows.Count
   
       If UCase(tarif.Cells(i, 1)) Like Comb1 And UCase(tarif.Cells(i, 2)) Like Comb2 And UCase(tarif.Cells(i, 3)) Like Comb3 Then
            ligne = ligne + 1
            ReDim Preserve a(1 To 4, 1 To ligne)
            For k = 1 To tarif.Columns.Count: a(k, ligne) = tarif.Cells(i, k): Next k
        End If
   Next i
   If ligne = 1 Then ReDim Preserve a(1 To 4, 1 To 2)
   If ligne > 0 Then Me.ListBox1.List = Application.Transpose(a())
   
End Sub
 

Discussions similaires

Réponses
9
Affichages
613