[excel VBA] pb ListBox

Fermé
od7373 - 10 mai 2007 à 14:32
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 22 mai 2007 à 13:02
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
A voir également:

9 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
10 mai 2007 à 14:39
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
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
Bonjour,
Mes explications sont "incompréhensibles" ou personne ne peut m'aider.
merci
0
laurent1030 Messages postés 7 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 21 mai 2007 2
15 mai 2007 à 11:56
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

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

Posez votre question
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
laurent1030 Messages postés 7 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 21 mai 2007 2
21 mai 2007 à 14:51
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
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
laurent1030 Messages postés 7 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 21 mai 2007 2
21 mai 2007 à 18:39
Bizarre. La liste est bien triée ? Est-ce qu'il y a des differences de majuscule/minuscule ? Ou des blancs ?
0
je n'ai pas de lignes vierges entre et tous mes mots sont en majuscules!!
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
22 mai 2007 à 13:02
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