Enregistrer les données d'une listView

Résolu
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010 - 21 déc. 2009 à 14:07
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010 - 22 déc. 2009 à 16:36
Hello,

je voudrais enregistrer toutes les données entrées ou modifiés d'une listView. Pour cela, j'ai écris ce code qui émet une erreur au niveau du CInt (erreur: variable incompatible):

Citation:

Private Sub Enregistrer()

Dim i%, j%, k%, T$
i% = Sheets("rex_data").UsedRange.Rows.Count + 1

For i% = 1 To ListView2.ListItems.Count
For j% = 0 To ListView2.ColumnHeaders.Count - 1
If j% = 0 Then
T = ListView2.ListItems(i).Key
If Len(T) > 0 Then T = Right(T, Len(T) - 1)
k% = CInt(T)
Sheets("rex_data").Cells(k%, j% + 1).Value = ListView2.ListItems(i%).Text
Else
Sheets("rex_data").Cells(k%, j% + 1).Value = ListView2.ListItems(i%).ListSubItems(j%).Text
End If
Next j%
Next i%


End Sub


J'ai bien l'impression que la conversion ne se fait pas mais jne sais pas pourquoi!!!

Help me please

Merci

Lil_monie

34 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2009 à 17:07
Et ça te surprend, hein .....!
Regarde deux parties de con code... regarde-les bien ;
Ton 1er message :

i% = Sheets("rex_data").UsedRange.Rows.Count + 1  ' (dont se demande d'ailleurs à quoi ça sert puisque tu débutes de toutes manières à 1 ensuite !!!)

For i% = 1 To ListView2.ListItems.Count 
For j% = 0 To ListView2.ColumnHeaders.Count - 1 
If j% = 0 Then 
T = ListView2.ListItems(i).Key 
If Len(T) > 0 Then T = Right(T, Len(T) - 1) 
k% = CInt(T) 

et voilà que maintenant :


For i% = 2 To Nb 
  ListView2.ListItems(i% - 1).Key = "L" & CStr(i%) 
Next i 


Et rien ne te chiffonne, bien sûr !
Allez ! repose-toi 15 minutes, puis reviens vers ta machine et exécute ceci, qui devrait te bpermettre de te réveiller un peu :


For i% = 1 To ListView2.ListItems.Count 
  msgbox listview2.listitems(i).key
next


Moi, à ce niveau, j'ai décidé d'aller me reposer également ...
Bonne chance


________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2009 à 14:16
c'est pas du .NET, mauvaise section....

quand tu as ton erreur, presse le bouton debogage.

que vaut T quand l'erreur se produit ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 14:20
Pour la section, dsl!!

T="" quand je fais un débogage!!

Merci

Lil_monie
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2009 à 14:22
tu as donc ta réponse...

"" n'est pas une donnée numérique.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0

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

Posez votre question
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 14:31
Normal puisque je l'ai déclaré en string. Mais ce que je ne comprends pas c pourquoi la conversion en Int ne marche pas puisque j'ai écrit le même code pour un autre UserForm et ça a marché!!


Merci

Lil_monie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2009 à 14:34
parce que la chaîne "2" peut être traduite en numérique, pas pas la chaîne "" ou "b", tout simplement et que Cint ne peut transformer en integer que ce qui représente un numérique. Voilà pourquoi !

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 14:43
Dans ce cas là, quel solution me proposerais tu?

Merci

Lil_monie
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2009 à 14:53
ben tout dépend de ce que tu souhaites faire...

tu demande a récupérer un nombre de la donnée exemple "#"

que veux tu faire, de la divination ?


soit tu utilises Val, qui renverra 0 dans de tels cas
soit tu t'arranges pour ne pas avoir de Key vides

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 15:07
Oki je vois!!

Vais voir ça!

Merci

Lil_monie
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 15:25
Sorry mais jy arrive pas!!


Merci

Lil_monie
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 15:26
Je me demande si c pas parce que ma listeView n'a pas été rempli manuellement. Au fait, cette listView n'est qu'un copier collé d'une autre listView.


Merci

Lil_monie
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2009 à 15:28
c'est une question ?

je veux dire, nous ignorons tout du contenu de ta listview


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 15:52
Ok, i see.
Donc voili:

Private Sub UserForm_Initialize()
Dim i%, j%, T$, k%, Nb%

With ListView2
With .ColumnHeaders
.Clear 'Supprime les anciens entêtes
'Ajout des colonnes
.Add , , "N°", 20
.Add , , "N° Affaire", 45, lvwColumnCenter
.Add , , "Designation", 55, lvwColumnCenter
.Add , , "Client", 45, lvwColumnCenter
.Add , , "MOE", 35, lvwColumnCenter
.Add , , "BE", 35, lvwColumnCenter
.Add , , "Montant Commande", 85, lvwColumnRight
.Add , , "Date", 60, lvwColumnCenter
.Add , , "Secteur d'activité du clien final", 89, lvwColumnCenter
.Add , , "Activité exercée par INEO", 80, lvwColumnCenter
.Add , , "Codification des métiers", 80, lvwColumnCenter
.Add , , "Heures chantier", 68, lvwColumnCenter
End With

Nb% = Sheets("rex_data").Range("A65536").End(xlUp).Row

With .ListItems

.Clear
If Nb > 1 Then
T$ = ""
For i% = 2 To Nb
If T$ <> Sheets("rex_data").Cells(i%, 1).Value Then
T$ = Sheets("rex_data").Cells(i%, 1).Value
.Add , , T$
Else
.Add , , T$ '"" A suivre
End If
Next i%
End If
End With


If Nb > 1 Then
For i% = 2 To Nb
For j% = 2 To 12
.ListItems(i% - 1).ListSubItems.Add , , Sheets("rex_data").Cells(i%, j%).Value
Next j%
Next i%
End If

.View = lvwReport 'affichage en mode Rapport
.Gridlines = True 'affichage d'un quadrillage
.FullRowSelect = True 'Sélection des lignes complètes
.HideSelection = False


With UserForm17.ListView1

For i = 1 To UserForm17.ListView1.ListItems.Count

For j = 1 To 10 ' pour les colonnes

ListView2.ListItems(ListView2.ListItems.Count).ListSubItems.Add = .ListItems(i).ListSubItems(j).Text

Next j
Next i
End With
End With
End Sub





Merci

Lil_monie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2009 à 16:01
Tu me praias fort naviguer un peu au hasard ....
Je ne sais pas si la première ListView était dotée de Keys, mais ce qui me parait évident, c'est que (dans tous les cas de figure) ta seconde listview n'en a pas (ou alors : dis-nous où tu penses les avoir définies) !



____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 16:11
Je ne les ai pas defini dans ma listView2.


Merci

Lil_monie
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 16:14
Mais, sauf erreur de ma part, on n'est pas obligé de défnir les clés à part si on veut les utiliser non?!



Merci

Lil_monie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2009 à 16:15
Cà, nous le voyons bien !
Mais apparemment pas toi, puisque tu les invoques ! (en plus avec Cint, alors qu'elles sont vides !)

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2009 à 16:16
"a part si on veux les utiliser"

oui, mais c'est bien ce que tu souhaites faire dans le premier code, avec le CInt....

tu cherches a exploiter le code.

maintenant, plutot que de chercher a corriger un code bancal, explique nous plutot les tenant et le abouttissants.....



que souhaites tu faire, au final ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
21 déc. 2009 à 16:21
Puis je attribuer les clés comme ceci:
For i% = 2 To Nb
ListView2.ListItems(i% - 1).Key = "L" & CStr(i%)
Next i


Merci

Lil_monie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2009 à 16:43
Essaye (ça ne mange jamais de pain, d'essayer) !



____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Rejoignez-nous