[excel VBA] pb ListBox

Bonjour,

Je suis en train de créer une base de donnée de fabricants avec leurs différents produits :
..sous excel, une ligne correspond à un produit d'un fabricant.
..sous VBA, j'ai une liste Listbox qui recopie tous les noms de fabricants sous Excel.

Mon problème est le suivant : je voudrai avoir dans ma Listbox le nom de tous mes fabricants en "un seul exemplaire". (j'ai essayé de fusionner les cellules d'un même fabricant, mais ceci ne fonctionne pas!!)

Merci d'avance
Configuration: Windows XP
Internet Explorer 6.0

9 réponses

  1. Contributeur
    bonjour, pour fusionner des cellules sous excel il faudrait que tes fabricant soit sur des lignes contigues, alors ça fonctionne.
    Mais à la lecture sous VBA les cellules serront distinguées, il faudrait faire alors une comparaison avec la ligne précédante.
    A+
    louis
    0
    1. comment fait-on une comparaison sous VBA??

      (mes noms de fabricants sont rangés par colonnes sous Excel et je pense qu'il faut faire une comparaison avec la ligne du dessus???)
      0
      1. Bonjour,
        Mes explications sont "incompréhensibles" ou personne ne peut m'aider.
        merci
        0
        1. Le plus simple serait que tu postes l'extrait pertinent de ton code VBA sur le forum afin que quelqu'un puisse rapidement t'indiquer ce qui est nécessaire.
          0
          1. voici mes lignes de codes:

            Private Sub CommandButton1_Click()

            Range("a1").Value = ListBox1.Value
            Range("k7").Select
            Call lancer

            End Sub

            Private Sub CommandButton2_Click()

            Call calculnombrefiches

            Unload UserForm5

            End Sub

            Private Sub CommandButton3_Click()

            Dim Ligne
            Dim réponse

            réponse = MsgBox(" Etes vous sur de vouloir supprimer cette fiche ? ", vbYesNo + vbQuestion, "Validation")
            If réponse = vbNo Then Exit Sub

            Ligne = ListBox1.ListIndex + 8

            Range("A" & Ligne).EntireRow.Select
            selection.Delete Shift:=xlUp
            'ActiveWorkbook.Save

            Range("A8").Resize(rowsize:=Range("F1").Value, columnsize:=1).Select
            UserForm5.ListBox1.List = selection.Value

            End Sub

            Private Sub ListBox1_Click()

            End Sub

            Private Sub UserForm_Click()

            End Sub

            merci
            0
            1. Salut,

              Voici une solution rapide. Je ne l'ai pas testée, il faudra peut-être l'adapter ou la corriger.

              A la place de
              ---
              Range("A8").Resize(rowsize:=Range("F1").Value, columnsize:=1).Select
              UserForm5.ListBox1.List = selection.Value
              ---
              Tu mets ceci

              ---
              Dim intNombreLignes As Integer
              Dim i As Integer
              Dim varOldValue As Variant
              Dim varNewValue As Variant

              UserForm5.ListBox1.Clear ' Vider la listbox

              varOldValue = ""
              intNombreLignes = Range("F1").Value ' Nombre de lignes defini dans la cellule F1
              For i = 1 To intNombreLignes ' On boucle sur les lignes
              varNewValue = Cells(8 + i - 1, 1).Value ' Nouvelle valeur
              If varNewValue <> varOldValue Then ' Comparaison avec la valeur precedente
              UserForm5.ListBox1.AddItem varNewValue ' Ajout dans la liste
              varOldValue = varNewValue
              End If
              Next i
              ---

              L'idée est de parcourir la liste des valeurs une par une avec une boulce (For), et de comparer la valeur lue (varNewValue) avec la valeur précédente (varOldValue), ce qui est fait avec le IF.

              Si les deux valeurs sont différentes, on ajoute la nouvelle valeur dans la liste (AddItem). Sinon, on ne fait rien.

              UserForm5.ListBox1.Clear est nécessaire pour vider la listbox.

              Evidemment, ça ne marche que si la liste est triée.

              Si ce n'est pas le cas, c'est un peu plus compliqué.

              Laurent
              0
          2. Dsl, mais le résultat est le même...j'ai toujours des noms de fabricants qui apparaisent en double exemplaire dans ma list box
            Aurais tu une autre solution??
            0
            1. Bizarre. La liste est bien triée ? Est-ce qu'il y a des differences de majuscule/minuscule ? Ou des blancs ?
              0
              1. je n'ai pas de lignes vierges entre et tous mes mots sont en majuscules!!
                0
                1. Contributeur
                  bonjour,
                  colle le code suivant
                  Dim Fabric() As String
                  'supposons que les fabricants sont en A
                  Sub ListeFabric()
                  Dim a As Integer, i As Integer, e As Integer
                  Dim b$
                  ReDim Fabric(0)
                  Worksheets("Feuil1").Select
                  a = Range("A65536").End(xlUp).Row
                  For i = 1 To a
                  b$ = Trim(Range("A" & i).Text) 'éviter les espaces
                  b$ = LCase(b$) 'éviter les différenec Maju/minu
                  If b$ <> "" Then
                  For e = 0 To UBound(Fabric)
                  If Fabric(e) = "" Then
                  Fabric(e) = b$
                  ReDim Preserve Fabric(e + 1)
                  ElseIf Fabric(e) = b$ Then
                  GoTo passeSuivant
                  End If
                  Next e
                  End If
                  passeSuivant:
                  Next i
                  end sub
                  Les fabricants sont dans le tableaux, il n'y a plus qu'a les mettre dans la listeBox
                  Attention NB fabricant=UBound(Fabric)-1
                  A+
                  louis
                  0