OVH Cloud OVH Cloud

Au secours ZOURY

4 réponses
Avatar
JCM
reBonjour Zoury

=E0 la suite de ma pr=E9c=E9dente question, j'ai un beug sur la=20
boucle des sous-type.

En fait je voudrais afficher les types et sous-types=20
(table access) dans un listview avec une arboescence comme=20
si c'=E9tait des fichiers, voici mon code (les lignes de=20
code pour l'affichage sont elles completes ?)

Call MyFonctions.InitConnection
'Nombre de type de d=E9penses dans la table
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002=20
where Mid(IDdepense,3,2)=3D'" & "00" & "'", ADOrst, ADOcnx)
nt =3D ADOrst.RecordCount

'remplissage du Listview
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002=20
where Mid(IDdepense,3,2)=3D'" & "00" & "'", ADOrst, ADOcnx)
=20
If ADOrst.RecordCount <> 0 Then
Do Until ADOrst.EOF
nbStype =3D 0
szKey =3D "%T%" & CStr(nt)
'=E9num=E8re le type de d=E9penses
Tpe =3D ADOrst("libelle")
IDtype =3D ADOrst("IDdepense")
Set nd =3D LVDepense.Nodes.Add(, , szKey, Tpe)
=20
'Nombre de sous-type dans le type
Call MyFonctions.ExecSQLplus("Select * from=20
depenseACFCI2002 where left(IDdepense,2)=3D'" & left(IDtype,=20
2) & "' and " & "Len(IDdepense)=3D4", ADOrstplus, ADOcnx)
nst =3D ADOrstplus.RecordCount
=20
'enumere le sous type de d=E9penses
Call MyFonctions.ExecSQLplus("Select * from=20
depenseACFCI2002 where left(IDdepense,2)=3D'" & left(IDtype,=20
2) & "' and " & "Len(IDdepense)=3D4", ADOrstplus, ADOcnx)
If ADOrstplus.RecordCount <> 0 Then
Do Until ADOrstplus.EOF
nbStype =3D nbStype + 1
szKey2 =3D szKey & "%ST%" & CStr(nst)
STpe =3D ADOrstplus("libelle")
Set nd =3D LVDepense.Nodes.Add(nd.Index, szKey2,=20
STpe)
ADOrstplus.MoveNext
Loop ' end Sous-type
ADOrst.MoveNext
Loop ' end Type
End If

Merci de ton aide

jean claude

4 réponses

Avatar
Zoury
Salut Jean-Claude! :O)

Peux-tu nous expliquer plus en détail ce que contienne les champs IDdepense
et IDtype ? tu sembles aller des parties de l'information de qu'elle
contienne ( avec Mid et Left ).. je veux dire, que signifie Left(IDdepense,
2) et Mid(IDdepense, 3, 2) par exemple ? J'ai l'impression que tu pourrais
remplir ton treeview en une seule boucle...


aussi juste une petite remarque :

'Nombre de type de dépenses dans la table
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002
where Mid(IDdepense,3,2)='" & "00" & "'", ADOrst, ADOcnx)
nt = ADOrst.RecordCount
'remplissage du Listview
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002
where Mid(IDdepense,3,2)='" & "00" & "'", ADOrst, ADOcnx)

If ADOrst.RecordCount <> 0 Then



pourquoi exécuter la même requête 2 fois de suite ? (tu le fais aussi pour
les sous-types) tu perds un temps précieux ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
JCM
Salut ZOURY

Ma table Access contient des enregistrements qui
correspondent à des types de dépenses, avec un code
IDdepenses qui peut etre AL00 ou AL01 ou AL01_01.
les deux premiéres lettre correspondent au type de depense
(AL00)et les deux chiffres suivants au sous-type (AL01 à
AL10) et les deux chiffres suivants le tiret bas le détail
du sous-type.

Je veux afficher dans la premiere colonne du listview le
type et dans la seconde les sous-types correspondant au
type et éventuellement le détail du sous-type dans une
troisième colonne.

Je voudrais un affichage avec une arborescence et des
cases à cocher sur chaque ligne pour pouvoir sélectionner
les dépenses qui m'interessent.

Comment coder le listview pour arriver à cela et comment
ensuite retrouver les dépenses sélectionnées.

Merci de ton aide
Cordialement
Jean Claude
-----Message d'origine-----
Salut Jean-Claude! :O)

Peux-tu nous expliquer plus en détail ce que contienne


les champs IDdepense
et IDtype ? tu sembles aller des parties de l'information


de qu'elle
contienne ( avec Mid et Left ).. je veux dire, que


signifie Left(IDdepense,
2) et Mid(IDdepense, 3, 2) par exemple ? J'ai


l'impression que tu pourrais
remplir ton treeview en une seule boucle...


aussi juste une petite remarque :

'Nombre de type de dépenses dans la table
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002
where Mid(IDdepense,3,2)='" & "00" & "'", ADOrst,




ADOcnx)
nt = ADOrst.RecordCount
'remplissage du Listview
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002
where Mid(IDdepense,3,2)='" & "00" & "'", ADOrst,




ADOcnx)

If ADOrst.RecordCount <> 0 Then



pourquoi exécuter la même requête 2 fois de suite ? (tu


le fais aussi pour
les sous-types) tu perds un temps précieux ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -


http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -


http://www.mztools.com/


.



Avatar
Zoury
Salut Jean-Claude! :O)

Regarde cet exemple ne pourrait pas t'inspirer... Je n'ai pas le listview
hierarchique ici alors j'ai un treeview car la logique est la même.
'***
' Form1
Option Explicit

Private Sub Form_Load()
Call FillTreeView(GetRecordSet())
End Sub

Private Function GetRecordSet() As ADODB.Recordset

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

' ajoute la colonne
Call rs.Fields.Append("IDdepense", adVarChar, 10)

' ouvre le recordset
Call rs.Open

' ajoût des données
' note : elles doivent être triées..
Call AddRecord(rs, "0101_01")
Call AddRecord(rs, "0102_01")
Call AddRecord(rs, "0102_02")
Call AddRecord(rs, "0103_01")
Call AddRecord(rs, "0103_02")
Call AddRecord(rs, "0201_01")
Call AddRecord(rs, "0202_01")
Call AddRecord(rs, "0202_02")

' on ramène le curseur au début
Call rs.MoveFirst

' renvoit le recordset
Set GetRecordSet = rs

End Function

Private Sub AddRecord(ByRef rs As ADODB.Recordset, ByRef sValue As String)
rs.AddNew
rs.Fields("IDdepense").Value = sValue
rs.Update
End Sub

Private Sub FillTreeView(ByRef rs As ADODB.Recordset)

Dim sValue As String
Dim sTypeValue As String
Dim sSousTypeValue As String
Dim sSousSousTypeValue As String
Dim sTypeKey As String
Dim sSousTypeKey As String
Dim sSousSousTypeKey As String
Dim sOldTypeValue As String
Dim sOldSousTypeValue As String

Do Until rs.EOF

sValue = rs.Fields("IDdepense").Value
sTypeValue = Left$(sValue, 2)
sSousTypeValue = Mid$(sValue, 3, 2)
sSousSousTypeValue = Right$(sValue, 2)

sTypeKey = "k" & sTypeValue
sSousTypeKey = "k" & Left$(sValue, 4)
sSousSousTypeKey = "k" & sValue

If (sTypeValue > sOldTypeValue) Then
Call TreeView1.Nodes.Add(, , sTypeKey, sTypeValue)
sOldSousTypeValue = ""
End If
If (sSousTypeValue > sOldSousTypeValue) Then
Call TreeView1.Nodes.Add(sTypeKey, tvwChild, sSousTypeKey,
sSousTypeValue)
End If
Call TreeView1.Nodes.Add(sSousTypeKey, tvwChild, sSousSousTypeKey,
sSousSousTypeValue)

sOldTypeValue = sTypeValue
sOldSousTypeValue = sSousTypeValue
Call rs.MoveNext

Loop

End Sub
'***

"JCM" a écrit dans le message de
news:2dc9a01c46a31$0aacb910$
Salut ZOURY

Ma table Access contient des enregistrements qui
correspondent à des types de dépenses, avec un code
IDdepenses qui peut etre AL00 ou AL01 ou AL01_01.
les deux premiéres lettre correspondent au type de depense
(AL00)et les deux chiffres suivants au sous-type (AL01 à
AL10) et les deux chiffres suivants le tiret bas le détail
du sous-type.

Je veux afficher dans la premiere colonne du listview le
type et dans la seconde les sous-types correspondant au
type et éventuellement le détail du sous-type dans une
troisième colonne.

Je voudrais un affichage avec une arborescence et des
cases à cocher sur chaque ligne pour pouvoir sélectionner
les dépenses qui m'interessent.

Comment coder le listview pour arriver à cela et comment
ensuite retrouver les dépenses sélectionnées.

Merci de ton aide
Cordialement
Jean Claude
-----Message d'origine-----
Salut Jean-Claude! :O)

Peux-tu nous expliquer plus en détail ce que contienne


les champs IDdepense
et IDtype ? tu sembles aller des parties de l'information


de qu'elle
contienne ( avec Mid et Left ).. je veux dire, que


signifie Left(IDdepense,
2) et Mid(IDdepense, 3, 2) par exemple ? J'ai


l'impression que tu pourrais
remplir ton treeview en une seule boucle...


aussi juste une petite remarque :

'Nombre de type de dépenses dans la table
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002
where Mid(IDdepense,3,2)='" & "00" & "'", ADOrst,




ADOcnx)
nt = ADOrst.RecordCount
'remplissage du Listview
Call MyFonctions.ExecSQL("Select * from depenseACFCI2002
where Mid(IDdepense,3,2)='" & "00" & "'", ADOrst,




ADOcnx)

If ADOrst.RecordCount <> 0 Then



pourquoi exécuter la même requête 2 fois de suite ? (tu


le fais aussi pour
les sous-types) tu perds un temps précieux ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -


http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -


http://www.mztools.com/


.



Avatar
Zoury
c'est parti un peu vite.. :OP

Le code nécessite la référence Microsoft ActiveX Data Object 2.X Library et
la composante Microsoft Common Controls 6.0 (SP6).
et tu dois ajouter un TreeView sur le formulaire

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/