Redim tableau à n dimension (2 ici) [Résolu]

Signaler
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
-
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
-
Salut la team, voila j'ai un petit (nan un gros) soucis !
j'ai posté ce soft :
http://www.vbfrance.com/codes/COMPTE_BANCAIRE-NET_50966.aspx

j'ai envie de bien le réécrire suite aux remarques de claudedetom.

Du coup je me lance dans un défi dépassant mes compétences, et du coup j'ai besoin de votre savoir.
Mon souci, je déclare un tableau à 2dim dans une classe (mon_compte), et lors de la lecture j'aimerais qu'il mette tout seul à jour les lignes qui sont "mensualisées" (x,7)=true
Mais voila le redim me jette car il ne peux redim que la dimension de droite -_- (c'est nul)
Donc j'imagine que je dois utiliser les collections. Mais voila aprés plein de lecture j'y pige pas grand chose.
Je vous post "ma bidouille tab_temp" qui revient en fait au même et qui biensur ne marche pas.
béwui lorsque je fais
 'balance le tableau lu dans tab_temp
        tab_temp = lecture.lignes
il redimmensionne ce que j'avais avant prévu (voir plus bas)
Si une bonne âme à une idée ou un exemple je prends.
amicalement @dn
' trouve le nombre de mise à jours à faire
        Dim NB_maj As Integer = 0
        ' trouve le nombre de ligne à traiter
        Dim NB_ligne As Integer = CInt((lecture.lignes.Length / 8) - 1)
        'calcule le nombre de ligne en divisant la longueur total par le nombre de colonne (-1 car on commence à 0)
        'utlise unbound pour voir ;)
        For ligne As Integer = 0 To NB_ligne
            ' ajoute le nombre de mise à jour à faire si la colonne 7 = true.
            If CBool(lecture.lignes(ligne, 7)) Then NB_maj += 1
        Next
        'dimensionne le tableaux en fonction du nombre de ligne.
        Dim tab_temp(NB_ligne + NB_maj, 8) As String
        'balance le tableau lu dans tab_temp
        tab_temp = lecture.lignes
        'pour chaque mise à jours à faire :
        For boucle As Integer = 0 To NB_maj
            'pour chaque ligne du compte
            For ligne As Integer = 0 To NB_ligne
                ' si c'est une ligne échéancier et que la date correspond au début du mois
                If Now.Day >= 1 AndAlso CBool(lecture.lignes(ligne, 7)) Then
                    ' et que ce mois n'est pas déja rempli (ou alors si c'est une nouvelle année) alors
                    If Now.Month > CDate(lecture.lignes(ligne, 0)).Month _
                    Or Now.Year > CDate(lecture.lignes(ligne, 0)).Year Then
                        'attribut la date d'aujourd'hui et le jour de l'opération mensuel
                        Dim maintenant As Date = CDate(CDate(lecture.lignes(ligne, 0)).Day & " " & Now.Month & " " & Now.Year)
                        ' retire à l'anciénne ligne le status de mensuel
                        lecture.lignes(ligne, 7) = "false"
                        ' ajouter cette nouvelle ligne !
                        'ajoute la nouvelle ligne  et active la mensualisation (encore une fois utilse unbound ! )
                        Dim index As Integer = CInt(tab_temp.Length / 8) - 1
                        tab_temp(index, 0) = maintenant.ToString("yyyy MM dd")
                        tab_temp(index, 1) = maintenant.ToString("dd MMMM yy")
                        tab_temp(index, 2) = lecture.lignes(ligne, 2)
                        tab_temp(index, 3) = lecture.lignes(ligne, 3)
                        tab_temp(index, 4) = lecture.lignes(ligne, 4)
                        tab_temp(index, 5) = lecture.lignes(ligne, 5)
                        tab_temp(index, 6) = "False"
                        tab_temp(index, 7) = "true"
                    End If
                End If
            Next ligne
        Next boucle
        ' attribut le tableaux à ME.
        Me.mdp = lecture.mdp
        Me.types = lecture.types
        Me.budgets = lecture.budgets
        Me.lignes = tab_temp


Tiens les balises ne sont pas reconnues ^_____^, zut alors.....

115 réponses

Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
euh sinon tant que je suis à bien écrire, que penses tu de cela ?
ais-je raison de détruire listitem ou pas, je pense que oui ,mais bon ?
       ' reste à écrire mon_compte.lignes dans le listview !
        ListView1.BeginUpdate()
        ' efface les anciennes lignes
        ListView1.Items.Clear()
        ' dim les nouvelles lignes
        Dim listItem As ListViewItem
        'pour chaque lignes (si lignes vides count=0, donc pour ne pas faire la boucle ajouter -1,
        ' mais pas au count à la variable de boucle ligne qui elle DOIT commencer à 1 et pas à 0 ! => PCPT)
        For ligne As Integer = 1 To mon_compte.lignes.Count
            listItem = New ListViewItem
            listItem.Text = (mon_compte.lignes.Item(ligne - 1).L_date.ToString("yyyy MM dd")) 'ne sert plus à rien à virer !!!!!!!!! 04/01/10
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_date.ToString("dd MMMM yy"))
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_type.ToString)
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_budget.ToString)
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_commentaire.ToString)
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_credit.ToString)
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_debit.ToString)
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_pointage.ToString)
            listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_mensuel.ToString)
            ListView1.Items.Add(listItem) ' ajoute les lignes
        Next ligne
        listItem = Nothing 'détruit les nouvelles lignes en mémoire
        ListView1.EndUpdate()


un with serais bien aussi non ?

bon je continu de réfléchir à ton idée, et en même temps je pense faire un control hérité de la listview pour ne plus avoir à gérer ces class cls_compte et cls_ligne, elle serait en surcharge de la listview avec add.colums et add.item, mais bon là c'st du réve pour l'instant, mais bon ... c'est cela qui fait avancer (les réves) ++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
bin....
j't'ai déjà donné une idée : une méthode depuis l'enregistrement lui-même. plus pratique en cas de modifs des propriétés, tout est centralisé

(pis tu fais pas ma de copier/coller, faut te relire... chaine.tostring, j'en vois pas trop l'intérêt)
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
oups bien vu ^^ En fait je code que par petite demi-heure, du coup c'est pas simple...
Faut que je le finalise et que je passe à un autre éxo plus propre.
++ M.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Tiens au fait, et ce pour finir de t'ennuyer avec ce code (tu as bien donner déja)
As tu remarqué que le trie par date que nous avons fait sur la list(of ligne) change la position des lignes si elles ont la même date et si elles sont pointé ou pas !
étrange non ? dans ma fonction je n'indique que la date et pourtant ça bouge !
le managé comme tu le dis n'a pas que des bon coté visiblement
Je te repost pour info les codes de trie :
Dans la form utilisateur :
mon_compte.trie()
Dans la class compte:
    '----------------------------------------------------------------------
    ' fonction qui trie le fichier sérialisé de class CLS_compte 
    ' par date croissante, via la class CLS_trie_lignes.vb
    '----------------------------------------------------------------------
    Public Sub trie()
        Dim MonTrie As New CLS_trie_lignes
        Me.lignes.Sort(MonTrie)
    End Sub

et enfin dasn la class CLS_trie_lignes :
Imports System
Imports System.Collections.Generic

Public Class CLS_trie_lignes
    Implements IComparer(Of CLS_lignes)

    Public Function CompareByDate(ByVal x As CLS_lignes, ByVal y As CLS_lignes) As Integer _
 Implements System.Collections.Generic.IComparer(Of CLS_lignes).Compare
        ' compare les dates et retourne un integer pour le manager de la fonction (transparent)
        If x.L_date > y.L_date Then
            Return -1
        ElseIf x.L_date = y.L_date Then
            Return 0
        Else
            Return 1
        End If
    End Function
End Class


Si tu trouve l'éxplication pour notre culture perso ^^ sinon spa grave hein
kenavo ! et @ bientôt pour de nouvelle aventure.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
J'oubliais le petit éxo sur la supp d'une ligne mensuel ^^
pas cachée mais c'est une propriété oui

Hummm je dirais une propriété .IsVisble qui devient false si la ligne et mensuel et que l'on tente de la supprimer de la collection ?
un peu dangereux car non visible mais potentiellement inclus dans les calculs des soldes pointées/rééls. Mais bon tu vois je cherche un peu ;)
++
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Bon j'ai encore tout faut
J'ai pas voulu t'écouter sur les ID et du coup je me retrouve dans la même mouise qu'avant !
J'explique je viens de tester cela :
For ligne As Integer = 1 To mon_compte.lignes.Count
            'affiche dans la listview que les lignes non pointé si l'option affiche ligne ok est à false
            If affiche_ligne_ok Or mon_compte.lignes(ligne - 1).L_pointage = False Then
                listItem = New ListViewItem
                listItem.Text = (mon_compte.lignes.Item(ligne - 1).L_date.ToString("yyyy MM dd")) 'ne sert plus à rien à virer !!!!!!!!! 04/01/10
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_date.ToString("dd MMMM yy"))
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_type)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_budget)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_commentaire)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_credit.ToString)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_debit.ToString)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_pointage.ToString)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_mensuel.ToString) 'pas besoin de cette ligne dans la list !
                ListView1.Items.Add(listItem) ' ajoute les lignes
            End If
        Next ligne
        listItem = Nothing 'détruit les nouvelles lignes en mémoire
        ListView1.EndUpdate()

tu le reconnais, c'est la miseAjour()
Cela marche bien !
Et bien sûr lorsque je selectionne une ligne de la listview l'item ne correspond plus à la ligne de la class ( oui je sais tu peux rire )
Donc aurais tu s'il te plait l'obligeance (faut y mettre les formes hein ) de me ré-expliquer ces fameux ID car là j'ai vraiment zappé cette partie (Il y a déja pas mal de bout de code 'utilisateur' sur ce topic, mais la base de la class alors là...)
Merci pour ta patience
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
ahhahahaha

voilà chose faite


donc l'ID te permet d'identifier une ligne, indépendamment de TOUT. çà veut dire quoi TOUT : beh tant de la LIST (de ta classe compte) que de la listview, PUISQU'EN EFFET en pointant une ligne de la listview tu dois retrouver sans erreur la ligne (position) mais aussi l'enregistrement correspondant

pour ma part j'avais donc généré un GUID pour ID, et une fonction dans ma classe compte, me retournant la position d'une ligne de la LIST depuis un ID existant, qui est retrouvé grâce à la lisview (première colonne cachée)

donc click => position listview, de côté
depuis position, GUID_STRING
méthode(guid) => position LIST

si je dois supprimer, j'ai mes 2 positions :
suppression de la LIST
suppression de la listview (pour éviter de tout réafficher, pas utile)

    Private Sub tsmDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsmDelete.Click
        Dim pos1 As Integer = ListView1.SelectedItems.Item(0).Index
        Dim pos2 As Integer = CurrentAccount.GetItemByGuid(ListView1.SelectedItems.Item(0).Text)
        If MessageBox.Show("Êtes-vous sûr de vouloir supprimer cet élément", "Suppression définitive!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) = Windows.Forms.DialogResult.Yes Then
            CurrentAccount.Items.RemoveAt(pos2)
            ListView1.Items.RemoveAt(pos1)
            CurrentAccount.Save()
        End If
    End Sub



pour le IsVisible c'est bien çà (enfin je pensais plus juste à un enabled, "visible" a une notion d'affichage qui n'est pas logique pour moi dans ce cas de figure)

et pas d'erreur possible non. exemples :
*tu vas calculer les crédits, méthode SumCredits => bouclage sur les enabled = true

*tu vas trier "perso", même si les enabled=false sont testés, non affichés donc pas d'erreur de tri/affichage



et pour ton CompareByDate, voici le mien :
    Private Shared Function ComparisonByDateOperationAsc(ByVal x As clsAccountItem, ByVal y As clsAccountItem) As Integer
        Return x.DateOperation.CompareTo(y.DateOperation)
    End Function
    Private Shared Function ComparisonByDateOperationDesc(ByVal x As clsAccountItem, ByVal y As clsAccountItem) As Integer
        Return y.DateOperation.CompareTo(x.DateOperation)
    End Function



appelées depuis la classe compte (clsAccount) :
    Public Sub SortItems(ByVal SortOrder As SortOrderConstants, ByVal SortField As SortFieldConstants)

        Select Case SortField
            Case SortFieldConstants.DateOperation
                If SortOrder = SortOrderConstants.ByASC Then
                    Me.Items.Sort(AddressOf ComparisonByDateOperationAsc)
                ElseIf SortOrder = SortOrderConstants.ByDESC Then
                    Me.Items.Sort(AddressOf ComparisonByDateOperationDesc)
                End If
' (..........)



de ton côté l'erreur vient surement du fait que tu n'as pas toujours le même format date :
des fois cdate(a & " " & b & " " & c)
des fois datetipicker...


++

[hr]
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
de ton côté l'erreur vient surement du fait que tu n'as pas toujours le même format date :
des fois cdate(a & " " & b & " " & c)
des fois datetipicker...

Bienvu, mais non le Cdate retourne une date tout aussi valide que date.now par exemple, les espace pourrait être des "/".
.L_date = CDate(mon_compte.lignes(ligne - 1).L_date.Day & " " & Now.Month & " " & Now.Year)

D'ailleur je ne fais cette manip que sur une ligne mensuel et je viens de vérifier cela le fait sur deux lignes généré par le datetimepicker.
Cela doit venir de ma méthode de comparaison, je vais essayer avec la tienne desuite.

Pour le GUID, aie j'ai commencé à lire, je pense que je vais dans un premier temps générer un simple numéro de ligne incrémenté à chaque add/copy.
Ensuite faire une moulinette dans la class pour qu'un index de listview me retourne l'index dans la classe mon_compte.
Il me faudrat aussi une propriété dans la class pour avoir le dernier N°ligne utilisé.
Ou alors je recommence à partir sur une piste à la con et je ferais mieux de creuser le GUID

Allez au boulot ^^
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Je viens de tester ta façon de trier (vachement plus simple que celle que j'ai trouvé sur le net)
Bon je pige pas comment cela marche, ni AdressOf, j'ai toujours eu du mal avec cette instruction.
Mais otujours est-il que le résultat est identique, voir pire d'autre lignes portant la même date bouge elle aussi lors d'un pointage sur une ligne différente, c'est un peu déroutant pour l'user final de voir ces lignes s'inverser constament :p
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Pour finir ce soir, j'abandonne la méthode Numéro de ligne généré par mon code car trop casse gueule !
Je me penche du coup sur le GUID !
Question comment être sur qu'un ID ne sera pas en doublon ?

je pensais pouvoir faire un hash de la date de l'opération comme ID car on ne peux pas avoir deux opération qui ont la même date (seconde par exemple)
mais voila il ne veut que des paramétres précis "b".....
Si tu as du temps, merci de m'éclairer.
ex de code dans la form ajout/copie/modif instancié :
    Private Sub Bp_ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bp_ok.Click
        ' vérifie que les champs crédit et débit sont valides avant  d'écrire ou modifier une ligne !
        If txt_credit.Text "0" And txt_debit.Text "0" Then
            MessageBox.Show("Opération invalide" & Environment.NewLine & "Crédit et Débit NULL" _
                            , "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_credit.Focus()
            Exit Sub
        Else ' sinon ajoute les nouvelles valeurs à l'enfant new_ligne et ferme
            Dim leGuid As Guid = Guid.NewGuid() 'déclare un nouvel ID
            With new_ligne
' leGuis ne peux avoir que quelque formatage voir ici : http://msdn.microsoft.com/fr-fr/library/97af8hh4(VS.95).aspx
                .L_Id = leGuid.ToString(calendrier.SelectionRange.Start.ToString) 'génére le nouvel ID
                .L_date = calendrier.SelectionRange.Start
                .L_type = Combo_type.Text
                .L_budget = Combo_budget.Text
                .L_commentaire = "pas encore fait"
                .L_credit = CDbl(txt_credit.Text) 'lecredit
                .L_debit = ledebit
                .L_pointage = Chk_pointage.Checked
                .L_mensuel = Chk_mensuel.Checked
            End With
            valide = True
            Me.Close()
            Me.Dispose()
        End If
    End Sub
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
http://tools.ietf.org/html/rfc4122

un GUID se veut unique, tu n'as pas besoin d'essayer de le caler à une "date"

ID = system.guid.newguid suffit

du coup : la classe (ligne) peut le faire comme une grande
(revoir mon code d'il y a 2 ou 3 pages en arrière)

++
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Et oui, encore une fois :
il me reste tant de chose à comprendre...
Bon je bosse dessus. ppfff si simple pour toi.
Tu as fais quoi comme formation ?
j'veux la même
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Bien voila mon travail Mr le correcteur

http://www.cijoint.fr/cjlink.php?file=cj201001/cijkcVJMgX.zip

il me reste une confusion au niveau des lignes listview et ligne de la list lorsque je clic sur la checkbox "caché les lignes pointées"

Il reste aussi un bug que je pige pas sur la coloration de la septiéme colonne de la listview (il refuse le vert, tout est grisé, pourtant...)

Enfin voila, les GUID sont apparant fonctionnel
(sauf que je recherche une string, plutôt qu'un GUID comme dans ton exemple) j'ai du louper un truc, pourtant j'ai tout relut depuis le début du topic et cela ma fait du bien !
amicalement @dn
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
dur à lire mais c'est déjà mieux qu'au début

certains choix m'échappent toujours néanmoins...

mais bon, on verra en V7 ou 8

pour le vert, le semble que c'est lié au subitem(0) dont la forecolor n'est pas défini

me semble! j'y jetterai un oeil peut-être ce soir


bonne continuation
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Encore trop dur à lire, zut bon je vais encore améliorer cela alors, pour les choix souvient toi que je n'ai pas la culture d'un analyste programmeur ;) Merci pour ta patience.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Bonsoir, pour la couleur de listview j'ai trouvé.
Je trouve cela tordu, mais cela marche :
        ' reste à écrire mon_compte.lignes dans le listview !
        ListView1.BeginUpdate()
        ' efface les anciennes lignes
        ListView1.Items.Clear()
        ' dim les nouvelles lignes
        Dim listItem As ListViewItem
        For ligne As Integer = 1 To mon_compte.lignes.Count 'donne le nombre de lignes de mon compte
            If (Chck_visu_pointage.Checked And Not mon_compte.lignes(ligne - 1).L_pointage) _
            Or Not Chck_visu_pointage.Checked Then
                listItem = New ListViewItem
                listItem.UseItemStyleForSubItems = False
                listItem.Text = (mon_compte.lignes.Item(ligne - 1).L_Id) 'index de ligne (GUID)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_date.ToString("dd MMMM yy"))
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_type)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_budget)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_commentaire)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_credit.ToString)
                listItem.SubItems.Add(mon_compte.lignes.Item(ligne - 1).L_debit.ToString)
                listItem.SubItems.Add("")
                ListView1.Items.Add(listItem) ' ajoute les lignes
            End If
        Next ligne
        listItem = Nothing 'détruit les nouvelles lignes en mémoire
        ListView1.EndUpdate()


je trouve cela tordu car le listItem.UseItemStyleForSubItems = False
permet d'avoir des couleurs différentes par colonne, mais d'un autre coté je suis obligé de faire une boucle pour colorier la ligne entiére

Bon bref, il me reste la merdouille de l'affichage des lignes pointées ou pas. L'index et pas bon, j'ai du me mélanger les pinceaux ici :
If mon_compte.lignes(ligne).L_pointage Then
                ListView1.Items(ligne).SubItems(7).Text = "X"
                ' le reste en grisé
                For i As Integer = 0 To 6
                    ListView1.Items(ligne).SubItems(i).ForeColor = Color.DarkGray
                Next i


allez retour au boulot @dn ^^
++
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
et voila le bug ! un oubli de codage ^^
    ' lors d'un double clic je pointe ou dépointe la ligne ou si PointerToolStripMenuItem.Click
    Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick ', PointerToolStripMenuItem.Click
        If ListView1.SelectedItems.Count <> 0 Then
            Dim index_ligne As Integer = mon_compte.TrouveLaLigne(ListView1.SelectedItems.Item(0).Text)    'récupére le n°ligne du compte via son GUID
            ' chercher dans ma classe compte la ligne nouvellement pointé
            If mon_compte.lignes.Item(index_ligne).L_pointage Then
                mon_compte.lignes.Item(index_ligne).L_pointage = False
            Else
                mon_compte.lignes.Item(index_ligne).L_pointage = True
            End If
            MiseAjour() ' reload la list view pour mise à jour en fonction de la class mon compte
        End If
    End Sub



Voila le code est fonctionnel, j'attends un peu tes remarques sur la lisibilité et aprés je passe à la refonte du code déja posté ici.
Te voila un peu de temps d'économisé pour corriger mes bétises, en fait je code bien la premiére demi-heure aprés le taff, aprés je dois décrocher (la fatique surrement )
++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
possible


    ' lors d'un double clic je pointe ou dépointe la ligne ou si PointerToolStripMenuItem.Click
    Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick ', PointerToolStripMenuItem.Click
        If ListView1.SelectedItems.Count <> 0 Then
            'récupére le n°ligne du compte via son GUID
            with mon_compte.lignes.Item(mon_compte.TrouveLaLigne(ListView1.SelectedItems.Item(0).Text))
                .L_pointage = not .L_pointage
            end with
            MiseAjour() ' reload la list view pour mise à jour en fonction de la class mon compte
        End If
    End Sub
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Whaou on peut faire ça !
with mon_compte.lignes.Item(mon_compte.TrouveLaLigne(ListView1.SelectedItems.Item(0).Text))
                .L_pointage = not .L_pointage
            end with


la vache ! je ne pensais pas ,bon ben j'le fais alors, car je comprend le code, mais je le pensais trop 'raccourci' ^^
mais reste encore une merdouille sur le trie (les lignes bougent et cela ne vient pas de moi, tu devrait avoir le même soucis !)
Ci-joint mon code de ce soir avec la gestion du solde réél/pointé dans la class, j'apprend, j'apprend ^^

http://www.cijoint.fr/cjlink.php?file=cj201001/cijspc1WCQ.zip

++ M. le prof
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
je n'ai pas le problème car je ne refresh pas toute la listview, je modifie juste la ligne

500 lignes qui vont se rafraichir pour une seule coche... sans façon

sans compter que 2 double-click "rapides" pourraient mettre une belle pagaille si le second arrivait avant la fin du 1er refresh...

je regarderai ton zip mercredi soir
++