[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
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
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:
- [excel VBA] pb ListBox
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si et excel - Guide
- Déplacer une colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
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
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
Mais à la lecture sous VBA les cellules serront distinguées, il faudrait faire alors une comparaison avec la ligne précédante.
A+
louis
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???)
(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???)
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
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.
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
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
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
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
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
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??
Aurais tu une autre solution??
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
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 ?
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
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
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