UserformVBA

kennedy

XLDnaute Junior
Bonjour,

Je souhaiterais lier des données qui se trouvent dans une colonne d'un fichier source avec une listbox qui se trouve dans un Cadre de mon formulaire. Le but étant de récupérer dans cette listbox les différentes catégories de produits qui se trouvent dans ma colonne du fichier source.

Dans cette colonne de mon tableau du fichier source, il apparait plusieurs fois les mêmes catégories de produits. Je souhaiterais que juste les différents type de catégorie apparaissent 1 unique fois dans ma listbox.

Et je souhaiterais que cela se réalise quand je clique sur le bouton "ouvrir".

Je ne sais pas du tout comment m'y prendre...si quelqu'un pourrait m'éclairée svp?

Voilà ce que j'ai commencer à faire:


Private Sub Ouvrir1_Click()

Dim Fichier As String
Fichier = Application.GetOpenFilename
Workbooks.Open Fichier
Sheets("GCE_Globale_cible").Activate
CheminSo.Caption = Fichier


End Sub
Merci :)
 
Dernière édition:

robyostar

XLDnaute Nouveau
Re : UserformVBA

voici ce que je peux te proposer. c'est ecrit rapidement donc pas forcement optimisé et a toi d'adaptre. mon idée: tu ouvre ton fichier soucre; tu met les element de la colonne désire dans une collection en vérifiant qu'ils ne sont pas deja présent; tu ferme ton fichier source ; tu recopie ta colletion dans ta listbox/combobox. voila voila

Code:
Private Sub Ouvrir_Click()

Dim categorie As New Collection
Dim x As Variant


Application.Visible = False
Workbooks.Open "ton fichier soucre"
Dim colone As Integer ' numero de ta colonne dans le fichier source
Dim i As Integer
colone = 1 ' ici tu met le chiffre que tu vx pour la colonne
i = 1 ' pour commencer à la 1ere ligne

Cells(i, colone).Select
While ActiveCell.Text <> ""
    If Not IsInCol(categorie, ActiveCell.Text) Then
        categorie.Add ActiveCell.Text
    End If
    i = i + 1
    Cells(i, colone).Select
Wend

ActiveWorkbook.Close

Application.Visible = True
For Each x In categorie
    ComboBox1.AddItem x
Next

Set categorie = Nothing
End Sub

' function qui permet de vérifier qu'un element est present dans une collection
Function IsInCol(ByRef oCollection As Collection, stName As String) As Boolean
 
    Dim x As Variant
    
    For Each x In oCollection
    
        If x = stName Then
            IsInCol = True
            Exit Function
        End If
     
    Next
    IsInCol = False
End Function
 

robyostar

XLDnaute Nouveau
Re : UserformVBA

@mister jean marcel: très belle manière de faire. mais petite question : tu ne devrais pas pluto faire .Range("A1:A" & .Range("A65536").End(xlUp).Row)

et aussi : dans ta collection tu rajoute des range mais la listebox prend du texte . t'aurais pas un type dismatch ??? et si l'element est dèja present dans la collection ?
 

kennedy

XLDnaute Junior
Re : UserformVBA

Rebonjour,

Voilà je rencontre un problème. En fait j'ai plusieurs listboxs dans mon formulaire. et du coup je souahaiterais forcer chaque colonne à se retrouver dans une listbox. J'ai essayer d'adapter votre code, mais je ne parviens qu'à mettre toutes les données de toutes mes colonnes dans les listbox... Comment faire. j'ai essayer:
Private Sub Ouvrir1_Click()

Dim Fichier As String
Dim Collec As New Collection
Dim Cell As Range, Itm As Long
Fichier = Application.GetOpenFilename
Workbooks.Open Fichier
CheminSo.Caption = Fichier
With Sheets("GCE_Globale_cible")
For Each Cell In .Range("A3:A" & .Range("A65536").End(xlUp).Row)
On Error Resume Next
Collec.Add Cell, CStr(Cell)
On Error GoTo 0
Next

For Each Cell In .Range("B3:B" & .Range("B65536").End(xlUp).Row)
On Error Resume Next
Collec.Add Cell, CStr(Cell)
On Error GoTo 0
Next

For Each Cell In .Range("C3:C" & .Range("C65536").End(xlUp).Row)
On Error Resume Next
Collec.Add Cell, CStr(Cell)
On Error GoTo 0
Next

For Each Cell In .Range("D3:D" & .Range("D65536").End(xlUp).Row)
On Error Resume Next
Collec.Add Cell, CStr(Cell)
On Error GoTo 0
Next


End With
For Itm = 1 To Collec.Count
Me.ListBox3.AddItem Collec.Item(Itm)
Next

For Itm = 1 To Collec.Count
Me.ListBox7.AddItem Collec.Item(Itm)
Next

For Itm = 1 To Collec.Count
Me.ListBox5.AddItem Collec.Item(Itm)
Next

For Itm = 1 To Collec.Count
Me.ListBox9.AddItem Collec.Item(Itm)
Next

For Itm = 1 To Collec.Count
Me.ListBox1.AddItem Collec.Item(Itm)
Next




End Sub
 

robyostar

XLDnaute Nouveau
Re : UserformVBA

ca marche. mais j'ai voulu tester et quand je vx rajouter dans ma listebox j'ai un type dismatch. les donnée dans la collection sont des variant\range\object....


sinon pour kennedy:
ca pourrait marcher si tu reorganise ton code ton code. actuellement ske tu fais c ke tu rempli ta collection avec les donnée de la colonne a puis tu rajoute dessus ceux de B

idée: rempli avk la colonne A puis tu rempli ta première listebox puis tu fais un set collec= noting pour vider la collection et tu recommence sur la colonne B ... ainsi de suite
 

kennedy

XLDnaute Junior
Re : UserformVBA

Dsl, j'étais partie manger. je ne peux pas joindre de doc ou quoi que ce soit, je suis sur un proxy qui me bloque.

J'ai en effet des colonnes A B C D dans la source par exemple

et je voudrais dans ma listbox1 avoir les données non doublonnées de la colonne A, dans ma listbox2 avoir les données non doublonnées de la colonne B etc.

Ben en fait je suis débutant :x.
et l'objectif de mon formulaire est d'avoir en regard 2 listbox, 1 des listbox qui récupère les données du fichier source, et une autre listbox correspondant à un autre fichier tiré d'une BDD Access. Le but étant par la suite à l'aide d'un bouton de lié le tableau source avec la BDD et généré un tableau uniquement rempli par des codes. Ce bouton serait la pour valider les 2 libellés.
 

Discussions similaires

Réponses
4
Affichages
200

Statistiques des forums

Discussions
312 332
Messages
2 087 365
Membres
103 528
dernier inscrit
maro