ListView explication....

Résolu
Signaler
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
-
Messages postés
1
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
13 juin 2006
-
Bonjour...

J'ai besoin d'explication a propos du ListView...

J'utilise ACCESS, ADO et VB6


Voici mon code...


While Not BD2005.EOF
With ListView1.ListItems.Add(, , IsN(BD2005!Dossier)) ' Colonne 1
.Tag = AdoRst!IdClient

.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE]) ' Colonne '2
.SubItems(2) = IsN(BD2005![NATURE DU TRAVAIL]) ' Colonne 3
.SubItems(3) = IsN(BD2005!LOTS) ' Colonne 4
.SubItems(4) = IsN(BD2005!CADASTRE) ' Colonne 5
.SubItems(5) = IsN(BD2005!CLIENTS) ' Colonne 6
.SubItems(6) = IsN(BD2005!TELEPHONE) ' Colonne 7
.SubItems(7) = IsN(BD2005!ADRESSE) ' Colonne 8
.SubItems(8) = IsN(BD2005![DATE DE LIVRAISON]) ' Colonne 9
.SubItems(9) = IsN(BD2005!TERMINE) ' Colonne 10
.SubItems(9) = IsN(BD2005!REMARQUES) ' Colonne 11
End With
BD2005.MoveNext
Wend
BD2005.Close
Set ListView1.SelectedItem = Nothing


Cette ligne plante dans mon programme et elle n'est pas bien codé....

With ListView1.ListItems.Add(, , IsN(BD2005!Dossier)) ' Colonne 1
.Tag = AdoRst!IdClient

J'aimerais savoir comment la changer pour que ca fonctionne avec mon code...

Le nom de ma ListView = ListView1
Recordset = BD2005
Ficchier ACCESS = Dossier_Actif.mdb
Nom de la Table = [Travaux en cours 2005]

J'aimerais sasoir qu'est ce que le IsN dans la ligen de code précédente et à quoi sert le TAG ??? Bon dans mon code je n'ai pas de IdClient. À vrai dire cette ligne (.Tag = AdoRst!IdClient) n'a pas été modifier avec mon code je l'ai laisse comme l'exemple que j'ai recu.

Je me demande que veux dire le IsN mais je crois que c'est une variable mais je veux savoir quelle est cette variable. Je veux la modifier mais je ne sais pas avec quelle variable (si c'est une varaible) la changer pour que ca fonctionne avec mon code..

Meric d'avance..

13 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
enlève les parenthèses



ListView1.ListItems.Add, , IsN(BD2005!Dossier)


Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
sans le With/End With il fallait pas les
parenthèses, mais tu pouvais pas faire la 2ème ligne puisqu'il n'y a
plus de référence !!!!



ListView1.ListItems.Add , , IsN(BD2005!Dossier)

<strike>.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE])

</strike>


avec le With/End With il faut les parenthèses, et là tu peux mettre tes .subitems



With ListView1.ListItems.Add ( , , IsN(BD2005!Dossier))

.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE])

End With





pour remplacer le With/End With, il y a une autre solution, en espérant que ça va pas trop te perturber:



Dim Ligne As ListItem

Set Ligne = ListView1.ListItems.Add

Ligne.Text = IsN(BD2005!Dossier)

Ligne.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE])




Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Salut,

Heu, si c'est TON code, comme tu le dis comment se fait-il que tu ne saches pas ce que tu écris ?

Bon, voilà ce que je pense de TON code.

1 - je suppose que la mise en forme de la listview est faite avant, par ex :
ListView1.View = lvwReport
ListView1.ColumnHeaders.Add ...
ListView1.ColumnHeaders.Add ...
etc ...
Sinon, ça ne marchera pas.

2 - IsN doit être une fonction astucieuse pour éviter les plantages quand le champs est null et en même temps pour éviter d'alourdir le code avec d'innombrables tests, quelque chose comme :

Function IsN(Valeur as string) as string
if isnull(Valeur) then
IsN = ""
else
IsN = Valeur
end if
end function

3 - le Tag, dans le cas présent sert à mémoriser l'id de l'enreg que tu affiches. A quoi ça sert ? tout simplement à retrouver le bon enreg dans le recordset pour le modifier ou le supprimer ou ..., par ex :

AdoRst.Findfirst "IdClient = " & listview1.SelectedItem.Tag
ou
"select * from latable where IdClient = " & listview1.SelectedItem.Tag

4 - Peut-être un tit cafouillis entre les recordset BD2005 et AdoRst ? Dans TON code, le contenu du Tag sera le même pour toutes les lignes. M'enfin, puisque c'est TON code, tu dois savoir ce que fais.



-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Rectification....

J'entendais pas mon code... mon programme

J'ai spécifié que le code à propos du listview était un exemple donné par quelqu'un du site (mais j'ai oublié le nom de la personne qui me l'a donné)...


héhéhéhéhé

Donc MON code, jusqu'à présent je le comprend mais je ne saisi pas le code du ListView (Code qui m'a été donné par quelqu'un du site)


Donc... j'espere avoir été plus clair... Bref... passons à autre chose... héhéhéhéhé

J'essairai d'être plus clair dans mes prochain messages....


Ok alors j'ai changer LE code et j'ai enlever le TAG et ca fonctionne à moitier...

C'est à dire que ca affiche les informations des 6 premières colonnes et randu à la septième colone ca me dit comme Erreur
Utilisation non autorisé de Null

Ce que je ne sais pas c'est que dans l'Exemple que je prends pour faire le test tout les champs ont du texte donc j'ai aucunne valeur Null dans mon exemple. De plus j'ai été dans le fichier ACCESS j'ai mit à Chaîne Vide autorisé à Oui et ca plante pareil...

Je te remte le code que j'ai "modifié"

BD2005.Open "SELECT * FROM [TRAVAUX EN COURS 2005] WHERE [DOSSIER] like '%" & txtRechercheNormale.Text & "%'", Connection, adOpenKeyset, adLockBatchOptimistic

While Not BD2005.EOF
With ListView1.ListItems.Add(, , IsN(BD2005!Dossier)) ' Colonne 1
'.Tag = AdoRst!IdClient

.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE]) ' Colonne '2
.SubItems(2) = IsN(BD2005![NATURE DU TRAVAIL]) ' Colonne 3
.SubItems(3) = IsN(BD2005!LOTS) ' Colonne 4
.SubItems(4) = IsN(BD2005!CADASTRE) ' Colonne 5
.SubItems(5) = IsN(BD2005!CLIENTS) ' Colonne 6
.SubItems(6) = IsN(BD2005!TELEPHONE) ' Colonne 7
.SubItems(7) = IsN(BD2005!ADRESSE) ' Colonne 8
.SubItems(8) = IsN(BD2005![DATE DE LIVRAISON]) ' Colonne 9
.SubItems(9) = IsN(BD2005!TERMINE) ' Colonne 10
.SubItems(9) = IsN(BD2005!REMARQUES) ' Colonne 11
End With
BD2005.MoveNext
Wend
BD2005.Close
Set ListView1.SelectedItem = Nothing


et j'ai utilisé ton code pour le IsN

Function IsN(Valeur As String) As String

If IsNull(Valeur) Then
IsN = ""
Else
IsN = Valeur
End If

End Function

L'erreur peut provenir de où....

merci d'avance
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Et l'autre prob que j ene sais pas c'est que je ne veux (enfin de compte) pas faire de boucle car je veux faire une recherche du dossier et que voir l'information de ce dossier....

Mais c'est toujours la première ligne qui m'embête

QU'EST CE QUE JE METS ICI
.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE]) ' Colonne '2
.SubItems(2) = IsN(BD2005![NATURE DU TRAVAIL]) ' Colonne 3
ETC...

À quoi ressemble le code pour lui dire de mettre le .ADD afin de voir les résult

J'ai essayé ça...

ListView1.ListItems.Add = IsN(BD2005!Dossier) ' Colonne 1
.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE]) ' Colonne 2
.SubItems(2) = IsN(BD2005![NATURE DU TRAVAIL]) ' Colonne 3
.SubItems(3) = IsN(BD2005!LOTS) ' Colonne 4
.SubItems(4) = IsN(BD2005!CADASTRE) ' Colonne 5
.SubItems(5) = IsN(BD2005!CLIENTS) ' Colonne 6
.SubItems(6) = IsN(BD2005!TELEPHONE) ' Colonne 7
.SubItems(7) = IsN(BD2005!ADRESSE) ' Colonne 8
.SubItems(8) = IsN(BD2005![DATE DE LIVRAISON]) ' Colonne 9
.SubItems(9) = IsN(BD2005!TERMINE) ' Colonne 10
.SubItems(9) = IsN(BD2005!REMARQUES) ' Colonne 11

Mais évidemment ca plante et ca me dit
Référence incorrecte ou non qualifié

Bref je suis perdu :(...

J'attends de ton aide...

merci d'avance
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Pour la function isn une tite modif, comme je n'aime pas le type variant et qu'en vb.net ça n'existe plus, j'ai tendance à oublier donc, remplacer :

Function IsN(Valeur As String) As String
par
Function IsN(Valeur As Variant) As String

ça évitera le msg d''erreur d'utilisation de null.

Pour le ciblage sur un dossier particulier, faut voir au niveau de la requête qui constitue ton bd2005 sans doute rajouter une clause where.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Peut-être enlever les '%' si txtRechercheNormale.text contient un n° de dossier correct et complet.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Salut non mon erreur ne vient pas de ma requête

BD2005.Open "SELECT * FROM [TRAVAUX EN COURS 2005] WHERE [DOSSIER] like '%" & txtRechercheNormale.Text & "%'", Connection, adOpenKeyset, adLockBatchOptimistic


MAis elle arrive lorsqu'elle arrive à la prmiere ligne

ListView1.ListItems.Add = IsN(BD2005!Dossier) ' Colonne 1

À mois que j'ai bien écrit le code...

Bref j'aimerais savoir si j'ai bien écrit le code....

ListView1.ListItems.Add = IsN(BD2005!Dossier) ' Colonne 1 ?????????????


Si oui je vais essayer d'enlever le % mais j'avais l'impression que ma requête était bonne... enfin je l'utilise a un autre place avec un recordset différent et ca fonctionne tres biens...


Enfin de compte je veux seulement savoir s'il faut écrire

ListView1.subitems(0) = IsN (BD2005!DOSSIER) Pour la première ligne
et pour les autre ligne j'Écris
.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE])
etc..

??????????????????


J'attends de tes nouvelles...

merci encore
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Pourquoi veux tu remplacer
ListView1.ListItems.Add(, , IsN(BD2005!Dossier)) ' Colonne 1
par
ListView1.ListItems.Add = IsN(BD2005!Dossier) ' Colonne 1

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Et bien si j'écris ca...

ListView1.ListItems.Add(, , IsN(BD2005!Dossier))

ca me dit qu'il y a une erreur de compilation Attendu: =

Ca me sort ca comme erreur....

J'attends de tes nouvelles...
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
9
Pour pas te prendre la tête, jte conseil de rajouter une colonne

De rien mettre dans la première et de tout décaler.

Et au cas, ou une de tes valeurs serait null, vaut mieux la tester avant de l'affecter.



If not isnull(BD2005!Dossier) then .SubItems(1) = IsN(BD2005![Dossier])
TBBUIM
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
Rebonjour... je crois que j'aurai toujours des problèmes...

et bien voici maintenant le code que j'tuilise et ca plante toujours...

BD2005.Open "SELECT * FROM [TRAVAUX EN COURS 2005] WHERE [DOSSIER] like '%" & txtRechercheNormale.Text & "%'", Connection, adOpenKeyset, adLockBatchOptimistic

ListView1.ListItems.Add , , IsN(BD2005!Dossier)
.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE]) ' Colonne '2
.SubItems(2) = IsN(BD2005![NATURE DU TRAVAIL]) ' Colonne 3
.SubItems(3) = IsN(BD2005!LOTS) ' Colonne 4
.SubItems(4) = IsN(BD2005!CADASTRE) ' Colonne 5
.SubItems(5) = IsN(BD2005!CLIENTS) ' Colonne 6
.SubItems(6) = IsN(BD2005!TELEPHONE) ' Colonne 7
.SubItems(7) = IsN(BD2005!ADRESSE) ' Colonne 8
.SubItems(8) = IsN(BD2005![DATE DE LIVRAISON]) ' Colonne 9
.SubItems(9) = IsN(BD2005!TERMINE) ' Colonne 10
.SubItems(9) = IsN(BD2005!REMARQUES) ' Colonne 11

BD2005.Close
Set ListView1.SelectedItem = Nothing

Pour ce qui est de ma requête je crois qu'elle fonctionne bien étant donné que j'en utilise une semblable dans mon programme...

et lorsque je fais une recherche ca plante à la colonne 2
soit à ce code:

.SubItems(1) = IsN(BD2005![DATE D'OUVERTURE]) ' Colonne '2

Ca me sort comme erreur

Erreur de compilation
Référence incorrecte ou non qualifié


Ce que je ne saisi pas c'est que lorsque je faisais une boucle pour voir la totalité de la BD ca ne plantais pas à cet endroit... et j'ai enlever la boucle car je veux seulement voir l'information que je recherche et ca plante...


Si quelqu'un peut m'aider ENCORE...


Merci d'avance...


P.S. ca marche sans les parenthèse :)
Et le Isn dans mon code règle le prob des valeurs nul...

voici le code...

Function IsN(Valeur As Variant) As String

If IsNull(Valeur) Then
IsN = ""
Else
IsN = Valeur
End If

End Function


Merci d'avance
Messages postés
1
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
13 juin 2006

Salut

Oui bon je sais ... 1 an après lol mais bon ca peut servir pour d'autres hehehe

Pour régler le problème voici la solution :

Tu peux aussi aller dans -> option onglet général et vérifier que l' Arret sur toutes les erreurs ne soit pas coché mais bien le Arret dans le module de classe.

J'ai eu la même blague et maintenant ca marche :)

Salutations :)