Contenu cellules et listbox méthode additem
Bonjour à tous,
J'ai fait quelques recherches sur l'utilisation des listbox et notamment les différentes manières de "remplir" ces listbox.
J'ai quand même des difficultés à faire tourner mon programme.
Situation:
J'ai créé plusieurs userform pour compléter, modifier et faire des recherches dans un tableur excel et après un traitement de filtrage je me retrouve avec un nouveau tableur qui résulte du premier.
Dans le nouveau tableur il y a des informations contenues dans 15 colonnes (A à O).
Ce que je souhaite faire, c'est alimenter ma listbox avec les colonnes A, E, F, G, H, J, K et L.
J'ai cherché comment fonctionne la méthode additem des list, de ce que j'ai compris:
- pour renseigner la première colonne d'une ligne de la listbox on utilise additem avec un argument
- pour renseigner les colonnes suivantes, de la même ligne, on utilise listbox.list() = la valeur que l'on veut.
Mon problème st que je n'arrive même pas à renseigner la première colonne.
Je procède comme suit:
Listbox1.additem nomdemafeuille.cells(macellule).value
Listbox1.list(ListBox1.ListCount - 1, 1) = nomdemafeuille.cells(macellule).value (deuxième colonne de la première ligne de ma listbox si je ne dis pas de bêtises)
etc pour les autres colonnes
Le tout inséré dans une boucle suivant le nombre de ligne de mon tableur.
RESULTAT: j'ai une erreur d'incompatibilité de type
Le but final étant de pouvoir sélectionner une ligne de ma listbox, d'en afficher les informations dans un userform et de l'imprimer.
Je continu mes recherches mais je pense que je lis bcp trop de sujets différents, et je n'arrive pas à filtrer les outils qui me permettrait d'arriver à ce que je veux.
Si besoin je peux fournir le fichier en quesiton.
D'avance merci,
Bonsoir,
Bonjour,
Merci pour le message de bienvenue.
Je mets le fichier en pj.
Mon problème se situe dans l'UF 6, CommandButton1_click().
Dans cet UF, je travaille à partir de l'onglet "Extraction" pour compléter ma listbox. Cet onglet sera caché de l'utilisateur.
Merci de l'intérêt que vous portez et de l'aide.
bonjour
Quand tu utilises Cells , tu ne dois pas mettre de lettre, mais un numéro cells(row, column) dans ton cas il faut remplacer toutes tes lettres par le numéro de colonnes correspondantes
ListBox1.AddItem Sheets("Extraction").Cells(1, j) 'col1 de la ligne ajoutée
ce qui donne
Private Sub CommandButton1_Click()
'recherche informations agent
Dim Ligne, Ligne1, Ligne2 As Long 'nombre de lignes dans les onglets intervenant et extraction
Dim i As Long
Dim j As Long
Set ws = Sheets("Interventions") 'Correspond au nom de l'onglet "Intervenants" dans le fichier Excel
ws.AutoFilterMode = False
ListBox1.ColumnCount = 8
'filtre des données selon les 3 critères de recherches contenus dans les combobox
With ws
.AutoFilterMode = False
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range("A1:O" & Ligne)
If Me.ComboBox1.ListIndex > -1 Then .AutoFilter field:=8, Criteria1:=Me.ComboBox1.Value
If Me.ComboBox2.ListIndex > -1 Then .AutoFilter field:=5, Criteria1:=Me.ComboBox2.Value
If Me.ComboBox3.ListIndex > -1 Then .AutoFilter field:=6, Criteria1:=Me.ComboBox3.Value
End With
'copie des données filtrées dans une nouvelles feuille
Sheets("Extraction").Range("A1:Z1000").Delete
Ligne1 = ws.Cells(.Rows.Count, 1).End(xlUp).Row
ws.Range("A1:O" & Ligne1).Copy Sheets("Extraction").Range("A1")
ListBox1.ColumnHeads = False
Ligne2 = Sheets("Extraction").Cells(.Rows.Count, 1).End(xlUp).Row
'remplissage de la listbox avec les données de la nouvelle feuille
'NB: à termes, la feuille où sont copiées les données ne sera pas accessible, ni même visible à l'utilisateur, d'où la copie
For j = 1 To Ligne2
ListBox1.AddItem Sheets("Extraction").Cells(1, j) 'col1 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets("Extraction").Cells(5, j) 'col2 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets("Extraction").Cells(6, j) 'col3 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 3) = Sheets("Extraction").Cells(7, j) 'col4 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 4) = Sheets("Extraction").Cells(8, j) 'col5 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 5) = Sheets("Extraction").Cells(10, j) 'col6 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets("Extraction").Cells(11, j) 'col7 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets("Extraction").Cells(12, j) 'col8 de la ligne ajoutée
Next j
Sheets("Extraction").Select
End With
ws.AutoFilterMode = False
End Sub
J'ai remarqué que tes identifiants dans ta feuille interventions ne correspondaient pas aux intervenants lister dans la feuille "intervenants" qui alimente ta combobox ce qui risque de te poser probleme
Bonjour,
Merci pour le retour !!
Effectivement c'est mieux quand on utilise les bons arguments dans le bons format ...
Ce qui est bizarre, ou pas d'ailleurs, c'est que la liste box s'affiche en "ligne" et non en "colonne".
Pour ta remarque sur les identifiants, je dois encore faire la mise à jour pour avoir la même chose que dans mon onglet intervenants.
A cause de ça (inversion colonne et ligne dans cells()
Private Sub CommandButton1_Click()
'recherche informations agent
Dim Ligne, Ligne1, Ligne2 As Long 'nombre de lignes dans les onglets intervenant et extraction
Dim i As Long
Dim j As Long
Set ws = Sheets("Interventions") 'Correspond au nom de l'onglet "Intervenants" dans le fichier Excel
ws.AutoFilterMode = False
ListBox1.ColumnCount = 8
'filtre des données selon les 3 critères de recherches contenus dans les combobox
With ws
.AutoFilterMode = False
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range("A1:O" & Ligne)
If Me.ComboBox1.ListIndex > -1 Then .AutoFilter field:=8, Criteria1:=Me.ComboBox1.Value
If Me.ComboBox2.ListIndex > -1 Then .AutoFilter field:=5, Criteria1:=Me.ComboBox2.Value
If Me.ComboBox3.ListIndex > -1 Then .AutoFilter field:=6, Criteria1:=Me.ComboBox3.Value
End With
'copie des données filtrées dans une nouvelles feuille
Sheets("Extraction").Range("A1:Z1000").Delete
Ligne1 = ws.Cells(.Rows.Count, 1).End(xlUp).Row
ws.Range("A1:O" & Ligne1).Copy Sheets("Extraction").Range("A1")
ListBox1.ColumnHeads = False
Ligne2 = Sheets("Extraction").Cells(.Rows.Count, 1).End(xlUp).Row
'remplissage de la listbox avec les données de la nouvelle feuille
'NB: à termes, la feuille où sont copiées les données ne sera pas accessible, ni même visible à l'utilisateur, d'où la copie
For j = 1 To Ligne2
ListBox1.AddItem Sheets("Extraction").Cells(j, 1) 'col1 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets("Extraction").Cells(j, 5) 'col2 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets("Extraction").Cells(j, 6) 'col3 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 3) = Sheets("Extraction").Cells(j, 7) 'col4 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 4) = Sheets("Extraction").Cells(j, 8) 'col5 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 5) = Sheets("Extraction").Cells(j, 10) 'col6 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets("Extraction").Cells(j, 11) 'col7 de la ligne ajoutée
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets("Extraction").Cells(j, 12) 'col8 de la ligne ajoutée
Next j
Sheets("Extraction").Select
End With
ws.AutoFilterMode = False
End Sub
Merci !!!!
Ça fonctionne bien
Comment marquer le sujet comme résolu ?