Excel adaptation de code

Résolu
ced3c Messages postés 240 Statut Membre -  
ced3c Messages postés 240 Statut Membre -
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 :)

5 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. ced3c Messages postés 240 Statut Membre 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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Peux tu refaire passer ton fichier?
      0
  3. ced3c Messages postés 240 Statut Membre 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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour a vous deux,

    listbox: 10 colonnes maxi de 0 a 9

    bye
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ced3c Messages postés 240 Statut Membre 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