Excel adaptation de code

Résolu/Fermé
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - Modifié par pijaku le 15/10/2014 à 10:50
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - 15 oct. 2014 à 15:06
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
15 oct. 2014 à 10:59
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 samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
15 oct. 2014 à 11:33
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
15 oct. 2014 à 12:32
Peux tu refaire passer ton fichier?
0
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
15 oct. 2014 à 13:00
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
15 oct. 2014 à 13:44
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 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
15 oct. 2014 à 13:27
Bonjour a vous deux,

listbox: 10 colonnes maxi de 0 a 9

bye
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
15 oct. 2014 à 13:50
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 samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
15 oct. 2014 à 15:06
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