Remplissage ListView et moi sommes pas copains

Résolu
GuyFALESSE Messages postés 61 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 18 novembre 2012 - 20 févr. 2005 à 20:17
GuyFALESSE Messages postés 61 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 18 novembre 2012 - 21 févr. 2005 à 16:15
Bonjour à tous,

J'avais développé une petit programme en Accès et il fonctionne très
bien...sauf qu'il faut ouvrir Access.
J'ai donc décidé de me mettre à Visual Basic.
Tout allait bien jusqu'à...ça foire :-(
J'ai un formulaire qui contient 2 contrôles un ListBox et un contrôle texte,
le contrôle texte sert à filtrer les données de ma base Access et le ListBox
contient ces données.
Le problèmes est que je n'ai pas droit à 2 colonnes, je veux dire que je ne
sais pas mettre 2 champs côte à côte, apparemment ce contrôle ne l'accepte
pas..
Voici donc ce code qui fonctionne:
Private Sub txtProposition_Change()
Dim monSQL As String, Critère As String, rst As Recordset, leNbre As
Integer
Dim maBD As Database, strConnection As String
strConnection = "c:\BaseAccess\CodesPostaux_97.mdb"
Critère = txtProposition.Text
monSQL = "SELECT tblCodes.code, tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "*'" _
& "ORDER BY tblCodes.Localité;"
Set maBD = OpenDatabase(strConnection)
Set rst = maBD.OpenRecordset(monSQL)
lstCodes.Clear
If rst.RecordCount Then
rst.MoveFirst
Do While Not rst.EOF
'==============================
lstCodes.AddItem rst.Fields("Code").Value
lstCodes.AddItem rst.Fields("Localité").Value
'==============================
rst.MoveNext
Loop
End If
Set rst = Nothing
Set maBD = Nothing
End Sub

J'ai donc voulu utiliser un ListViex, après avoir lu et relu tout un tas de
message sur différents forums, j'ai donc tenté ceci:

Private Sub txtEntrerLettres_Change()
Dim monSQL As String, Critère As String, rst As Recordset, leNbre As
Integer
Dim maBD As Database, strConnection As String
Dim ObjListe As ListItem, I As Integer
strConnection = "c:\BaseAccess\CodesPostaux_97.mdb"
Critère = txtEntrerLettres.Text
monSQL = "SELECT tblCodes.code, tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "*'" _
& "ORDER BY tblCodes.Localité;"
Set maBD = OpenDatabase(strConnection)
Set rst = maBD.OpenRecordset(monSQL)
lstViewCodes.ListItems.Clear
Set ObjListe = lstViewCodes.ListItems.Add(, , "Code")
lstViewCodes.ColumnHeaders(0).Add , , "Codes", lstViewCodes.Width / 5
lstViewCodes.ColumnHeaders(1).Add , , "Localité", lstViewCodes.Width / 8
If rst.RecordCount > 0 Then
I = 0
rst.MoveFirst
Do While Not rst.EOF
'==============================
ObjListe.SubItems(1).Add , "Localité",
rst.Fields("Localité") ------> ici, je butte: erreur de compilation,
méthode ou membre introuvable.
' ObjListe.ListSubItems.Add , "Localité", rst.Fields("Localité")
'==============================
rst.MoveNext
Loop
End If
Set rst = Nothing
Set maBD = Nothing
End Sub

Si une âme charitable pouvait m'aider, il en serait fortement remercié.
@+

Guy FALESSE
A voir également:

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 févr. 2005 à 20:40
Salut
Ton problème vient du fait que tu n'as pas pigé que ObjListe ne représente qu'une seule ligne, celle que tu es en train d'ajouter (et le fait de vouloir faire deux fois un Add.SubItem(1), il aime pas)
Donc le ObjListe ne peut servir qu'une fois.
Pour chaque ligne de ton recordset, il te faut recréer un nouvel ObjListe :
Si j'ai bien compris, tu as deux colonnes Code et Localité
Dans ta boucle Do-While :

Set ObjListe = Nothing
ObjListe = lstViewCodes.ListItems.Add(, , rst!code) ' 1ere colonne

ObjListe.SubItems(1) = rst!localité ' 2eme colonne

Vala
Jack
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
GuyFALESSE Messages postés 61 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 18 novembre 2012
20 févr. 2005 à 21:04
Salut Jack,
Merci pour ta réponse.
Je viens d'Access et c'est ma 1ère grande journée en VBA.
Mais..maintenant, j'ai la même erreur qui se produit à la ligne:(erreur de compilation, méthode ou membre introuvable.

à: lstViewCodes.ColumnHeaders(0).Add , , "Codes", lstViewCodes.Width / 5

Si je mets une apostrophe devant cette ligne, j'ai cette erreur à ce que tu m'as fait corriger.
Désolé
@+
Guy FALESSE
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 févr. 2005 à 23:19
re
Je n'ai plus la syntaxe en tête, mais je ne pense pas qu'il faille indiquer l'index de la colonne à ajouter, avec Add, il ajoute une colonne, point barre. C'est l'ordre de création qui détermine leur index. Donc, à la création (Add), pas d'index.
Par contre, ensuite, pour faire des modifs, il te faudra préciser l'index, oui

Vala
Jack
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
3
GuyFALESSE Messages postés 61 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 18 novembre 2012
21 févr. 2005 à 15:10
Salut Jack,

On avance, il n'y a plus de message d'erreur mais l'affichage est bizarre.
D'abord, j'ai 3 fois les mêmes titres sur la même ligne (Codes, localité)
J'ai code qui a une largeur de ± 2 cm de large, tandis que localité n'a que ± 0.2 cm, bien sûr, on sait manipuler la largeur, mais ce n'est pas normal.
De plus, les en-têtes ajoutés, ici, <les codes> et <les localités> se situent en dessous du titre code.
Je te remets les codes corrigés ci-dessous.
Private Sub txtEntrerLettres_Change()
Dim monSQL As String, Critère As String, rst As Recordset, leNbre As Integer
Dim maBD As Database, strConnection As String
Dim ObjListe As ListItem, I As Integer
strConnection = "c:\BaseAccess\CodesPostaux_97.mdb"
Critère = txtEntrerLettres.Text
monSQL = "SELECT tblCodes.code, tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "*'" _
& "ORDER BY tblCodes.Localité;"
Set maBD = OpenDatabase(strConnection)
Set rst = maBD.OpenRecordset(monSQL)
lstViewCodes.ListItems.Clear
lstViewCodes.View = lvwReport
Set ObjListe = lstViewCodes.ListItems.Add(, , "Les Codes")
Set ObjListe = lstViewCodes.ListItems.Add(, , "les Localités")
lstViewCodes.ColumnHeaders.Add , , "Codes", lstViewCodes.Width / 5
lstViewCodes.ColumnHeaders.Add , , "Localité", lstViewCodes.Width / 18
If rst.RecordCount > 0 Then
rst.MoveFirst
Do While Not rst.EOF 'Set ObjListe Nothing
Set ObjListe = lstViewCodes.ListItems.Add(, , "Code")
ObjListe = lstViewCodes.ListItems.Add(, , rst!code) ' 1ere colonne
ObjListe.SubItems(1) = rst!localité ' 2eme colonne
'==============================
rst.MoveNext
Loop
End If
Set rst = Nothing
Set maBD = Nothing
End Sub

Guy FALESSE
3

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

Posez votre question
GuyFALESSE Messages postés 61 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 18 novembre 2012
21 févr. 2005 à 16:15
Re-Salut,

Désolé de polluer, mais voici les derniers codes qui fonctionnent pour ce que je voulais faire momentanément:
Encore merci pour ton aide et merci aussi au forum qui m'a permis de m'aventurer dans ce langage.

Private Sub txtEntrerLettres_Change()
Dim monSQL As String, Critère As String, rst As Recordset, leNbre As Integer
Dim maBD As Database, strConnection As String
Dim ObjListe As ListItem, I As Integer
strConnection = "c:\BaseAccess\CodesPostaux_97.mdb"
Critère = txtEntrerLettres.Text
monSQL = "SELECT tblCodes.code, tblCodes.localité FROM tblCodes " _
& "WHERE tblCodes.Localité Like '" & Critère & "*'" _
& "ORDER BY tblCodes.Localité;"
Set maBD = OpenDatabase(strConnection)
Set rst = maBD.OpenRecordset(monSQL)
lstViewCodes.ListItems.Clear
lstViewCodes.ColumnHeaders.Clear
'Ajoute les titres
lstViewCodes.ColumnHeaders.Add , , "Codes", lstViewCodes.Width / 5
lstViewCodes.ColumnHeaders.Add , , "Localité", lstViewCodes.Width / 1.3
Set ObjListe = lstViewCodes.ListItems.Add(, , rst!code) ' 1ere colonne
ObjListe.SubItems(1) = rst!localité ' 2eme colonne
lstViewCodes.View = lvwReport
If rst.RecordCount > 0 Then
rst.MoveFirst
Do While Not rst.EOF 'Set ObjListe Nothing
Set ObjListe = lstViewCodes.ListItems.Add(, , rst!code) ' 1ere colonne
ObjListe.SubItems(1) = rst!localité ' 2eme colonne
'==============================
rst.MoveNext
Loop
End If
Set rst = Nothing
Set maBD = Nothing
End Sub

Guy FALESSE
3
GuyFALESSE Messages postés 61 Date d'inscription samedi 19 février 2005 Statut Membre Dernière intervention 18 novembre 2012
21 févr. 2005 à 06:34
Salut Jack,

OK, merci, je verrai cela cet après midi, maintenant, il est temps que je me préparae à partir.
@+

Guy FALESSE
0
Rejoignez-nous