• Initiateur de la discussion Initiateur de la discussion dran_200
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dran_200

XLDnaute Occasionnel
Bonjour à tous,
J'ai un problème avec un userform. Au lancement de mon fichier, un userform s'ouvre. Je valide :
mon 1er choix sur la collonne A de ma feuille "BD"
mon 2ème choix sur la colonne C de ma feuille "BD"
et la je voudrais que :
Dans la listbox 3 : s'affiche la valeur de la colonne B
Dans la listbox 4 : s'affiche la valeur de la colonne E,I,M,Q et U (sur 1 ligne)
Dans la listbox 5 : s'affiche la valeur de la colonne F,J,N,R et V (sur 1 ligne)
Dans la listbox 6 : s'affiche la valeur de la colonne G,K,O,S et W (sur 1 ligne)
Dans la listbox 7 : s'affiche la valeur de la colonne H,L,P,T et X (sur 1 ligne)
Le problème est que dans les Listbox ça affiche plusieurs lignes, et que le trie ne se fait en fonction de mes 2 choix.
J'espere avoir été clair !!!!
je vous joint un fichier exemple.
Merci pour votre aide
 

Pièces jointes

Re : Userform et listbox

Bonjour,

Remplacez le code de votre Userform par le code suivant

Code:
Dim var

Private Sub ListBox1_Click()
Dim Valeur As String
Dim Tableau()
Dim x As Long
Dim i&
ListBox2.Clear
ListBox3.Clear
ListBox4.Clear
ListBox5.Clear
ListBox6.Clear
ListBox7.Clear
If ListBox1 = -1 Then Exit Sub
var = Sheets(MA_BD).[a1].CurrentRegion
Valeur = ListBox1.Value
For i& = 2 To UBound(var, 1)
  If var(i&, 1) = Valeur Then
    ReDim Preserve Tableau(0, x)
    Tableau(0, x) = var(i&, 3)
    x = x + 1
  End If
Next i&
ListBox2.List = Application.WorksheetFunction.Transpose(Tableau)
End Sub

Private Sub ListBox2_Click()
Dim myTab(1 To 4) As structMyTab
Dim NumLig&
Dim i&
Dim cpt&
ListBox3.Clear
ListBox4.Clear
ListBox5.Clear
ListBox6.Clear
ListBox7.Clear
If ListBox2 = -1 Then Exit Sub
For i& = 2 To UBound(var, 1)
  If var(i&, 1) = ListBox1 And var(i&, 3) = ListBox2 Then
    NumLig& = i&
    Exit For
  End If
Next i&
ListBox3.AddItem (var(NumLig&, 2))
For i& = 5 To UBound(var, 2) Step 4
  cpt& = cpt& + 1
  myTab(1).Tbl(1, cpt&) = var(NumLig&, i&)
  myTab(2).Tbl(1, cpt&) = var(NumLig&, i& + 1)
  myTab(3).Tbl(1, cpt&) = var(NumLig&, i& + 2)
  myTab(4).Tbl(1, cpt&) = var(NumLig&, i& + 3)
Next i&
ListBox4.List() = myTab(1).Tbl
ListBox5.List() = myTab(2).Tbl
ListBox6.List() = myTab(3).Tbl
ListBox7.List() = myTab(4).Tbl
End Sub

Private Sub UserForm_Activate()
Dim Cell As Range
Dim Unique As New Collection
Dim Valeur As Range
Dim i As Long
i = Feuil3.Range("b65536").End(xlUp).Row
On Error Resume Next
For Each Cell In Feuil3.Range("a2:a" & i)
  If Cell <> "" Then
    Unique.Add Cell, CStr(Cell)
  End If
Next Cell
On Error GoTo 0
For Each Valeur In Unique
  UserForm3.ListBox1.AddItem Valeur
Next Valeur

ListBox2.ColumnCount = 1
ListBox2.ColumnWidths = "100"

ListBox3.ColumnCount = 1
ListBox3.ColumnWidths = "100"

ListBox4.ColumnCount = 5
ListBox4.ColumnWidths = "100;100;100;100;100"

ListBox5.ColumnCount = 5
ListBox5.ColumnWidths = "100;100;100;100;100"

ListBox6.ColumnCount = 5
ListBox6.ColumnWidths = "100;100;100;100;100"

ListBox7.ColumnCount = 5
ListBox7.ColumnWidths = "100;100;100;100;100"
End Sub

Dans un module standard, copiez le code suivant

Code:
Public Const MA_BD As String = "BD"  'à adapter

Public Type structMyTab
  Tbl(1 To 1, 1 To 5)
End Type

Cordialement.

PMO
 
Re : Userform et listbox

Je trouvais que c'était un bel excercice pour l'orienté Objet

Fait selon tes demandes en #1

Il y a beaucoup de codes. Par contre, ca rend l'application extrêmement dynamique.
Tu n'as qu'a nommé des colonnes et les valeurs se mettent automatiquement en fonction des colonnes.
 

Pièces jointes

Dernière édition:
Re : Userform et listbox

bonjour
Merci pour ton aide.
Encore une question, comment je fais pour mettre une photo dans mon userform ? Mes photos sont dans un dossier "photo\Divers" et elle doivent s'afficher quand on clique sur l'userform 2 en fonction de la collonne D ?
merci
 

Pièces jointes

Re : Userform et listbox

Re bonjour
j'ai un petit soucis sur le fichier. Ca fonction sauf, j'ai des cellules qui sont vides (pas de codes à afficher) et d'autres avec 2 codes (333 - 5454) et la ça bug sur la ligne :
l.ListItems.add , , m.SubItems(it).GetValueField(l.ColumnHeaders(1).Text)
et toujours mon pb de photos
encore merci pour votre aide
 
Re : Userform et listbox

Envoie un fichier avec les exemples.

Je vais voir où ca plante.

Pour les photos

Ajoute un objet imageList

click droite sur ta boite outils
Contrôles supplémentaires.
Tu coche : Microsoft ImageList Control 6.0
Tu ajoute cette objet sur ton userform et insérer toutes tes images à l'intérieur du controle.

Ensuite tu mets un objet image.

Dans initialize de ton userform
Image1.Picture = ImageList1.ListImages(IndiceEnFontionDeColD).Picture
 
Re : Userform et listbox

Bonjour
Merci pour ton aide. Je joint un fichier exemple de mon probleme. ça plante quand il y a des cellules vides, ou "-", ou avec 2 codes "33323 + 21524". Pour les photos je vais voir, elles sont dans un dossier photos et en relation avec la colonne D numéroté de 1 à .......
Merci
 

Pièces jointes

Re : Userform et listbox

Regarde le code plus bas
Pour la listview4
Il change le "width" des colonnes
Tu devras l'adapter pour les 4 listview

Code:
Function UpdateListeView4(modele, finibloc, reference, it)
    ListView4.ListItems.Clear
    ListView4.ColumnHeaders.Clear
    ListView4.View = lvwReport
    ListView4.FullRowSelect = True
    ListView4.LabelEdit = lvwManual
    
    'H,L,P,T,X comme tu demande
    With ListView4.ColumnHeaders
      .add , , Feuil3.Range("H1"): .item(.Count).Width = [COLOR="Red"]10[/COLOR]
      .add , , Feuil3.Range("L1"): .item(.Count).Width = [COLOR="Red"]50[/COLOR]
      .add , , Feuil3.Range("P1"): .item(.Count).Width = [COLOR="Red"]80[/COLOR]
      .add , , Feuil3.Range("T1"): .item(.Count).Width = [COLOR="Red"]50[/COLOR]
      .add , , Feuil3.Range("X1"): .item(.Count).Width = [COLOR="Red"]20[/COLOR]
    End With
    
    RemplirListe ListView4, it
       
End Function
 
Re : Userform et listbox

Bonjour
Merci encore pour ton aide. J'ai encore une question, j'ai mis un control image dans mon userform. Je voudrais lorsque que je clique sur la le 2ème choix que la photo s'affiche. Elles sont dans un dossier numéroté de 1 à ..... en relation avec la colonne "D" de ma base de données, et s'il n'y a pas d'image, mettre une image par défaut. Je joint un exemple.
Merci
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2019 User Form
Réponses
9
Affichages
319
  • Question Question
XL pour MAC fonction si
Réponses
5
Affichages
229
Retour