Excel adaptation de code

Résolu
ced3c Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   -  
ced3c Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,
Dans un userform j'ai:
1 combobox nommé : CB_cherche_remise
1 listbox nommé : ListBox_remise
et j'utilise la feuille : Cheques

Le combobox est rempli avec les valeurs de la colonne "E" de la feuille "Cheques"
Lors de la sélection d'une valeur du combobox, le code fais une recherche de la valeur dans la colonne "E" et affiche les lignes concernées dans la listbox.

Pour ce faire j'ai adapté un code de Pijaku issu du forum
https://forums.commentcamarche.net/forum/affich-23779940-listbox-recherche

Voici l'adaptation:
Remplissage de la combobox
Private Sub UserForm_Initialize()
With Sheets("Cheques")
For j = 3 To .Range("B" & Rows.Count).End(xlUp).Row
CB_cherche_remise = .Range("E" & j)
'...et filtre les doublons
If CB_cherche_remise.ListIndex = -1 Then CB_cherche_remise.AddItem .Range("E" & j)
Next j
End With
End Sub


Affichage dans la listbox sur combobox_change
Private Sub CB_cherche_remise_Change()
Dim Col As Byte
Dim Lign As Long, DrLig As Long
If CB_cherche_remise = "" Then Exit Sub
ListBox_remise.Clear
With Sheets("Cheques")
DrLig = .Range("A" & Rows.Count).End(xlUp).Row
For Lign = 1 To DrLig
If .Cells(Lign, 5) = CB_cherche_remise Then
ListBox_remise.AddItem .Cells(Lign, 1)
For Col = 1 To 4
ListBox_remise.List(ListBox_remise.ListCount - 1, Col) = .Cells(Lign, Col + 1)
Next Col
End If
Next Lign
End With
ListBox_remise.ColumnCount = 5
ListBox_remise.ColumnWidths = "100;100;100;100;100"
'format euro sur colonne montant
For i = 0 To ListBox_remise.ListCount - 1
ListBox_remise.List(i, 2) = Format(ListBox_remise.List(i, 2), "0.00 €")
Next i
End Sub


Quand je fais ce code en affichant 5 colonnes tout va bien, mais quand je veux afficher 15 colonnes, il ne marche pas (For Col = 1 To 14)
Erreur d'exécution '380':
Impossible de définir la propriété List. Valeur de propriété non valide


Merci pour votre aide :)

A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Puisqu'il est question de moi...
1- pas de monsieur stp...
2- Tu as mal adapté!

Le nombre de colonnes de ta listbox doit être défini à l'initialisation de ton Userform. Donc dans la procédure UserForm_Initialize.

Tu dis vouloir 15 colonnes, mais tu n'en met que 5 (ça va marcher beaucoup moins bien ...) :
ListBox_remise.ColumnCount = 5
ListBox_remise.ColumnWidths = "100;100;100;100;100"


Alors :
Remplissage de la combobox

Private Sub UserForm_Initialize()
With Sheets("Cheques")
    For j = 3 To .Range("B" & Rows.Count).End(xlUp).Row
        CB_cherche_remise = .Range("E" & j)
        '...et filtre les doublons
        If CB_cherche_remise.ListIndex = -1 Then CB_cherche_remise.AddItem .Range("E" & j)
    Next j
End With
'HUM HUM !!! ICI
With ListBox_remise
    .ColumnCount = 15 '15 COLONNES!!!!
    .ColumnWidths = "40;40;40;40;40;40;40;40;40;40;40;40;40;40;40"
End With
End Sub




Affichage dans la listbox sur combobox_change

Private Sub CB_cherche_remise_Change()
Dim Col As Byte
Dim Lign As Long, DrLig As Long
If CB_cherche_remise = "" Then Exit Sub
ListBox_remise.Clear
With Sheets("Cheques")
    DrLig = .Range("A" & Rows.Count).End(xlUp).Row
    For Lign = 1 To DrLig
        If .Cells(Lign, 5) = CB_cherche_remise Then
            ListBox_remise.AddItem .Cells(Lign, 1)
            For Col = 1 To 14
            ListBox_remise.List(ListBox_remise.ListCount - 1, Col) = .Cells(Lign, Col + 1)
            Next Col
        End If
    Next Lign
End With
'format euro sur colonne montant
For i = 0 To ListBox_remise.ListCount - 1
    ListBox_remise.List(i, 2) = Format(ListBox_remise.List(i, 2), "0.00 €")
Next i
End Sub
0
ced3c Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   5
 
Oui en effet je me suis "légèrement" trompé ^^ (me tape sur la caboche)
Rectifications faites

Néanmoins l'erreur persiste et elle me colore la ligne lors du débogage
ListBox_remise.List(ListBox_remise.ListCount - 1, Col) = .Cells(Lign, Col + 1)

toujours avec le même message d'erreur
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Peux tu refaire passer ton fichier?
0
ced3c Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   5
 
Le voici

Le code est dans l'userform Usf_cherche_remise
par activation du userform via la feuille data, il faut passer par le bouton rechercher un numéro de remise dans l'onglet "remise de chèques".

https://www.cjoint.com/?0Jpndavy630

Merci encore une fois de m'aider
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bon il y avait deux problèmes :
- la listbox se modifiait à chaque changement de ligne de la combobox lors du chargement
=> résolu par l'ajout d'une variable booléenne

- on ne peut pas modifier plus de 10 colonnes par la propriété List d'une ListBox...
Du moins pas comme je te l'ai montré...

Il a fallut ruser, mais ceci semble fonctionner.

Code complet de ton UserForm :

Dim LaComboChange As Boolean

Private Sub CB_cherche_remise_Change()
'Dim Col As Byte
Dim mesDonnees(), k As Long, Liste '()
Dim Lign As Long, DrLig As Long, maLigne As Long
If CB_cherche_remise = "" Or LaComboChange = True Then Exit Sub
ListBox_remise.Clear
With Sheets("Cheques")
    DrLig = .Range("A" & Rows.Count).End(xlUp).Row
    For Lign = 1 To DrLig
        If .Cells(Lign, 5) = CB_cherche_remise Then
            k = k + 1
            maLigne = Lign
            ReDim Preserve mesDonnees(1 To 15, 1 To k)
            'ListBox_remise.AddItem .Cells(Lign, 1)
            For Col = 1 To 15
            'ListBox_remise.List(ListBox_remise.ListCount - 1, Col) = .Cells(Lign, Col + 1)
                mesDonnees(Col, k) = .Cells(Lign, Col)
            Next Col
        End If
    Next Lign
    If UBound(mesDonnees, 2) = 1 Then
        Liste = .Range("A" & maLigne & ":O" & maLigne)
        ListBox_remise.List = Liste
        ListBox_remise.List(0, 2) = Format(ListBox_remise.List(0, 2), "0.00 €")
    Else
        Liste = Application.Transpose(mesDonnees)
        ListBox_remise.List = Liste
        'format euro sur colonne montant
        For i = 0 To ListBox_remise.ListCount - 1
            ListBox_remise.List(i, 2) = Format(ListBox_remise.List(i, 2), "0.00 €")
        Next i
    End If
End With
End Sub

Private Sub UserForm_Initialize()
LaComboChange = True
With Sheets("Cheques")
    For j = 3 To .Range("B" & Rows.Count).End(xlUp).Row
        CB_cherche_remise = .Range("E" & j)
        '...et filtre les doublons
        If CB_cherche_remise.ListIndex = -1 Then CB_cherche_remise.AddItem .Range("E" & j)
    Next j
End With
LaComboChange = False
With ListBox_remise
    .ColumnCount = 15
    .ColumnWidths = "40;40;40;40;40;40;40;40;40;40;40;40;40;40;40"
End With
End Sub
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour a vous deux,

listbox: 10 colonnes maxi de 0 a 9

bye
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut,

Excuse moi je n'avais pas vu ta réponse...
En effet, 10 colonnes maxi de 0 a 9 !
J'ai du me gratter la tête et google pour trouver ça et une solution...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ced3c Messages postés 237 Date d'inscription   Statut Membre Dernière intervention   5
 
Encore un grand merci pijaku et f894009
Merci d'avoir prie le temps de m'aider pijaku, je n'aurai pas trouvé comment adapté de cette façon.
Tout marche a merveille :)
0