[excel VBA] pb ListBox

od7373 -  
lermite222 Messages postés 9042 Statut Contributeur -
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. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  2. od7373
     
    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
  3. od7373
     
    Bonjour,
    Mes explications sont "incompréhensibles" ou personne ne peut m'aider.
    merci
    0
  4. laurent1030 Messages postés 7 Statut Membre 2
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. od7373
     
    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. laurent1030 Messages postés 7 Statut Membre 2
       
      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
  7. od7373
     
    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
  8. laurent1030 Messages postés 7 Statut Membre 2
     
    Bizarre. La liste est bien triée ? Est-ce qu'il y a des differences de majuscule/minuscule ? Ou des blancs ?
    0
  9. od7373
     
    je n'ai pas de lignes vierges entre et tous mes mots sont en majuscules!!
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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