Le mystère de la listview

Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005 - 23 mars 2005 à 16:50
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005 - 25 mars 2005 à 17:49
Bonjour tout le monde,

je vous propose de m'aider à résoudre ce mystère.
J'ai une listview dans laquelle je souhaite afficher un historique d'actions.
Cet historique est stocké dans un fichier Excel.
Pendant l'utilisation, l'utilisateur commence par séléctionner une ville dans une combo, VB va alors chercher le fichier Excel qui correspond à cette ville et le charge dans la listview en respectant les lignes et collones, le tout en classant de facon chronologique(jusque là tout va bien).
Ensuite, l'utilisateur décide de passer à une autre ville qu'il sélectionne dans la combo précédemment citée, VB s'éxécute et charge à nouveau correctement l'historique spécifique à cette ville dans la listview.
Lorsque l'utilisateur choisi de supprimer une ligne dans la listview, il la sélectionne et par un clic droit la supprime, l'utilisateur clic alors sur un commandbutton pour mettre à jour le fichier excel (en l'ecrasant puis en copiant l'ensemble des infos contenu dans la listview après suppression). là encore tout va bien. en sélectionnant une autre ville après cette action de mise à jour, le fichier excel correspondant à cette ville et également bien chargé dans la listview.
A présent, l'utilisateur souhaite ajouter une entrée dans la listview (et donc dans le fichier excel), il remplit les champs nécessaires, clic sur le bouton mettre à jour, ce qui met correctement à jour la listview et le fichier excel correspondant (comme pour la suppression).L'utilisateur choisi une nouvelle ville dans la combobox et là mystère...
le chargement du fichier dans la listview à pour effet de n'afficher que la première ligne du fichier excel de manière complète, puis de ne remplir que la première colonne des lignes suivantes.

J'ai inséré des msgbox pour contrôler que chaque cellules du fichier excel était correctement récupérer et dans l'odre, c'est le cas. mais rien ne s'affiche pour autant.
J'ai constaté que lorsque je clic 2 fois sur le bouton "Mettre à jour", il ni a pas de problème.
Mais pour rentre l'utilisation moins ch...te, je ne voudrais avoir besoin de cliquer qu'une seule fois.

Si vous pouviez m'aider à résoudre ce mystère s'il vous plaît. j'espère avoir été assez clair et détaillé dans mon explication (au K ou n'hésitez pas à demander) je pe fournir le code également mais je préviens d'avance il y a très peu de commentaire mais comme la programmation est très basic...

Merci d'avance à toutes celles et ceux qui liront et répondront à ce message de détresse d'un débutant bientôt chauve.

11 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
23 mars 2005 à 20:29
Salut, un bout de code (celui du remplissage qui ne fonctionne pas) aurait été plus parlant car là je ne vois pas, peut-être un problème d'index ou de boucle ? ou .... ?

Loup Gris
0
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005
24 mars 2005 à 08:48
Private Sub ComboSite_Click()


Dim rst As ADODB.Recordset
Dim cnx As ADODB.Connection
Dim exc As Excel.Application
Dim excline As Integer
Dim exccol As Integer
Dim excend As Integer
Dim contenu As String
Dim Fich As String
Dim i As Integer
Dim Moncritère As String


Combo1.Clear
Combo2.Clear
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
ListView1.ListItems.Clear


excline = 2
Fich = "[file://\\Serveur\ut \\Serveur\ut] serveur\PROPOSITIONS\PROSPECTION\SUIVI" + ComboSite.Text + "\UT-Historique-" + ComboSite.Text + ".xls"


Moncritère = "'"
Moncritère = Moncritère + ComboSite.Text
Moncritère = Moncritère + "'"


Set rst = New ADODB.Recordset
Set cnx = New ADODB.Connection
cnx.Provider = "Microsoft.Jet.Oledb.4.0"
cnx.ConnectionString = "[file://\\Serveur\ut \\Serveur\ut] serveur\PROPOSITIONS\PROSPECTION\SUIVI\MyDataBase.mdb"

cnx.Open
rst.Open "SELECT * FROM table1 WHERE NomSite =" + Moncritère, cnx
Do While Not rst.EOF
If (rst.Fields("NomContact").Value = "") Then
Combo2.Text = "N.C."
Else
Combo2.AddItem (rst.Fields("NomContact").Value)
Combo2.Text = Combo2.List(0)
End If

rst.MoveNext
Loop

Set exc = Excel.Application

' Chargement du fichier excel dans ListView1
On Error GoTo fin
exc.Workbooks.Open (Fich)


excend = 1
contenu = Cells(1, 1)
While (contenu <> "")
excend = excend + 1
contenu = Cells(excend, 1)

Wend
i = 1
While (excline < excend)
ListView1.ListItems.Add = exc.Cells(excline, 1)
ListView1.ListItems.Item(i).SubItems(1) = exc.Cells(excline, 2)
ListView1.ListItems.Item(i).SubItems(2) = exc.Cells(excline, 3)
ListView1.ListItems.Item(i).SubItems(3) = exc.Cells(excline, 4)
ListView1.ListItems.Item(i).SubItems(4) = exc.Cells(excline, 5)
excline = excline + 1
i = i + 1
Wend
exc.Workbooks.Close
Exit Sub
fin:
exc.Workbooks.Close
End Sub
0
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005
24 mars 2005 à 08:49
voici le bout de code qui coince
0
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
24 mars 2005 à 15:27
J'ai eu le meme probleme, y'a quelque temps de ca
et malheureusement, faute de temsp, je n'ai jamais pu le resoudre.

Ma solution (beurk) à été de rappeller bouton_click() à la fin de bouton_click (pense a mettre un boolean d'arret, pour pas boucler indefiniment.

en esperant que ca puisse t'aider...

++

BasicInstinct
0

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

Posez votre question
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005
24 mars 2005 à 15:53
Merci pour cette solution, cependant j'aimerais éviter cela car comme tu le dis ci bien, c BEURK
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
24 mars 2005 à 18:58
Si c'est en vb6, pour remplir une listview, j'utilise :

While (excline < excend)
With ListView1
.ListItems.Add , , exc.Cells(excline, 1)
.ListItems(.ListItems.Count).ListSubItems.Add , , exc.Cells(excline, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , exc.Cells(excline, 3)
.ListItems(.ListItems.Count).ListSubItems.Add , , exc.Cells(excline, 4)
.ListItems(.ListItems.Count).ListSubItems.Add , , exc.Cells(excline, 5)
End Width
excline = excline + 1
Wend

Je n'utilise ta méthode
ListView1.ListItems.Item(i).SubItems(j) ...
que pour récupérer ou modifier la valeur d'une des cellules déjà remplies.

Mais si ça marche comme ça ailleurs, .... ?

Visiblement, tu utilises des dropdown combo (type par défaut). Perso, je préfère le type dropdown list s'il n'y a pas besoin que l'utilisateur rajoute manuellement un item.
Les utilisations sont différentes, il faut voir. Les propriétés (comme text) et les évènements (comme change) ne sont pas utilisés de la même façon.

A part ça, comme je n'ai pas eu le temps de simuler ton code, je n'ai pas la solution miracle pour l'instant.

Loup Gris
0
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005
24 mars 2005 à 21:13
OK, je vais essayer ta méthode pour voir alors.

Je suis débutant alors en lisant ta possibilité, je ne sais pas si
chaque colonne sera correctement rempli mais on ne sait jamais et j'en
suis à un point ou toutes les solutions sont bonnes à essayer en tout K
merci beaucoup de t'interesser à mon problème.
0
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005
25 mars 2005 à 10:12
Eh bien cette solution ne fonctionne pas mieux Loup Gris.

Toujours ce problème trop chelou
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
25 mars 2005 à 16:21
Alors là, je sèche.

ComboSite_Click c'est ton bouton "Mettre à jour" ?

Loup Gris
0
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005
25 mars 2005 à 17:45
oui,



en fait quand je supprime une ligne je clic sur "Mettre à jour" ça affiche nickel

quand j'ajoute une ligne, je clic sur "Mettre à jour". Donc dans les deux cas je passe par le même code Command1_Click.



Donc je vois pas pourquoi ça marcherait dans un cas et pas dans l'autre.
0
Cube76 Messages postés 11 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 mars 2005
25 mars 2005 à 17:49
oups non Combo_Site click c'est la combo qui permet à l'utilisateur de
se ballader entre les different site en fait désolé pour le message du
dessus.



le bouton mettre a jour et Command1_Click. dont le code est le suivant:

Private Sub Command1_Click()



Dim exc As New Excel.Application

Dim Fich As String

Dim Ligne As String

Dim LigneExcel As Integer

Dim ColExcel As Integer

Dim compt As Integer

Dim comptcol As Integer

Dim ruse As String

Dim y As String

Dim m As String

Dim d As String

Dim i As Integer

ListView1.Sorted = False



i = ListView1.ListItems.Count

i = i + 1



'On enlève tous les / dans la date

longueur = Len(Text7.Text)

For j = 1 To longueur

If Mid$(Text7.Text, j, 1) = "/" Then



If j = 1 Then

Text7.Text = Mid$(Text7.Text, 2, longueur - 1)

End If



If j > 1 Then

Text7.Text = Mid$(Text7.Text, 1, j - 1) & Mid$(Text7.Text, j + 1, longueur - j)

j = 1

End If

End If



Next j

ruse = Text7.Text



d = Mid(ruse, 1, 2)

m = Mid(ruse, 3, 2)

y = Mid(ruse, 5, 4)

ruse = y + m + d



If ((Text6.Text <> "")) Then

ListView1.ListItems.Add = Text6.Text

ListView1.ListItems.Item(i).SubItems(1) = Combo2.Text

ListView1.ListItems.Item(i).SubItems(2) = Combo3.Text

ListView1.ListItems.Item(i).SubItems(3) = Text1.Text

ListView1.ListItems.Item(i).SubItems(4) = ruse

ListView1.SortKey = 4

ListView1.Sorted = True

End If



If (ComboSite.Text <> "") Then

MsgBox ("mise à jour")

'Créer un nouveau classeur EXCEL initialisé à la ligne 1

exc.Workbooks.Add.Activate

DoEvents

LigneExcel = 1

ColExcel = 1



' Affecter les données de la listbox dans les cellules de la feuille

With exc.ActiveWorkbook.Worksheets("Feuil1")





'Insere le nom des entetes de colonnes

For comptcol = 0 To 5 - 1

.Cells(LigneExcel, ColExcel) = ListView1.ColumnHeaders(comptcol + 1)

ColExcel = ColExcel + 1

Next comptcol



ColExcel = 1

LigneExcel = LigneExcel + 1



'Inscrire le contenu d'une listview dans la feuille 1 d'un classeur EXCEL

For compt = 0 To ListView1.ListItems.Count - 1



'On boucle sur les colonnes

For comptcol = 0 To 5 - 1

If comptcol = 0 Then


.Cells(LigneExcel, ColExcel) = ListView1.ListItems.Item(LigneExcel - 1)

Else


.Cells(LigneExcel, ColExcel) = ListView1.ListItems.Item(LigneExcel -
1).ListSubItems(comptcol)

End If

ColExcel = ColExcel + 1

Next comptcol





ColExcel = 1

LigneExcel = LigneExcel + 1

Next compt



End With



'Pour mettre l'entête des colonnes en gras

exc.ActiveWorkbook.Worksheets("Feuil1").Range("A1:" & Chr(65 + 5 - 1) & "1").Font.Bold = True

'Pour ajuster les colonnes

exc.ActiveWorkbook.Worksheets("Feuil1").Range("A:" & Chr(65 + 5 - 1)).Columns.AutoFit



Fich = "C:\UT-Historique-" + ComboSite.Text + ".xls"

exc.ActiveWorkbook.SaveAs (Fich)

exc.ActiveWorkbook.Close

exc.Visible = False

End If

exc.Quit

Set exc = Nothing
0
Rejoignez-nous