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
Oups à encore pas vu ton dernier post avant de poster ^^
Qu'elle réactivité nous avons

Mais du coup j'ai pas besoin de l'ID, maintenant que c'est bien trié !
tu verras dans mon code (d'ailleur je vire la colonne caché, plus besoin ! il trie une date non formatée ;) ) et tout seul en plus

note que je garde ton code sous le coude car cela peu énormément servir s'il on ne trie pas ordre chronologique ! merci pour l'info ^^

l'ID est le début d'une BDD à une table
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
l'ID est le début d'une BDD à une table


bin mon_compte est la représentation d'une table COMPTE avec chaque champs (ligne), et la base c'est ton fichier CGB, puisque serialization... ^^

c'est une base de données depuis le début du projet
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
mouais mais pour moi je découvre ! moqueur va

En revanche tu avais 'encore' raison, mon code de mensualisation me retourne deux lignes (ou plutôt) modifie la premiére comme la premiére...
Bon tu vas pas trop piger le code sans un peu d'éxplication :
Si la ligne à la propriété mensuel est à true et que la date est un nouveau mois, alors dupliquer la ligne en désactivant la ligne enfant pour la propriété mensuel (sinon on s'en sort plus lol)
Voici le code :
Oui je fais rien comme toi, j'aime pas copier
    Public Function load(ByVal fichier As String) As Boolean

        Try

            Dim myFileStream As Stream = File.OpenRead(fichier)
            Dim deserializer As New BinaryFormatter()
            Dim lecture As New ClS_compte
            lecture = CType(deserializer.Deserialize(myFileStream), ClS_compte)
            myFileStream.Close()

            ' attribut la list des lignes à me
            Me.lignes = lecture.lignes
            ' attribut le resteà ME.
            Me.mdp = lecture.mdp
            Me.types = lecture.types
            Me.budgets = lecture.budgets

            'récupére le nombre de ligne initiale (avant mise à jour mensuel)
            'attention au code de pcpt c'est for i = 1 to count, puis i-1

            Dim NB_ligne As Integer = lecture.lignes.Count '- 1 'merci pcpt ^^

            ' recherche les mise à jour à faire (échéancier)
            For ligne As Integer = 1 To NB_ligne
                ' si c'est une ligne échéancier et que la date correspond au début du mois
                ' et que ce mois n'est pas déja rempli (ou alors si c'est une nouvelle année) alors
                If Now.Day >= 1 AndAlso lecture.lignes(ligne - 1).L_mensuel _
                AndAlso (Now.Month > lecture.lignes(ligne - 1).L_date.Month _
                    Or Now.Year > lecture.lignes(ligne - 1).L_date.Year) Then
                    ' retire à l'anciénne ligne le status de mensuel
                    lecture.lignes(ligne - 1).L_mensuel = False
                    'lecture.save(fichier) à voir si change kk chose
                    ' ajouter cette nouvelle ligne !
                    Dim new_ligne As CLS_lignes lecture.lignes(ligne - 1) 'pas besoin de new le instancie new_ligne (merci pcpt)
                    new_ligne.L_date = CDate(lecture.lignes(ligne - 1).L_date.Day & " " & Now.Month & " " & Now.Year)
                    new_ligne.L_pointage = False
                    new_ligne.L_mensuel = True
                    lecture.lignes.Add(new_ligne) 'pourquoi les deux lignes ont la même valeur de date ????
                    new_ligne = Nothing
                End If
            Next
            Return True

si tu as une idée, et je sais que tu en auras une
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
je t'ai dit de te faire une trace papier, tu l'as faite?

regarde, je reprends juste ta phrase (avec l'avantage d'avoir un projet propre en tête )


mon code de mensualisation me retourne deux lignes (ou plutôt) modifie la premiére comme la premiére

dupliquer la ligne en désactivant la ligne enfant pour la propriété mensuel


ISOLE TON BESOIN

tu veux 2 lignes? ou tu veux ALORS modifier la ligne existante (changer le statut de MENSUEL)


après plusieurs essais j'ai tout simplement supprimé ce code de création de lignes (j'en avais marre de fermer le fichier avec 8 lignes et de le ré-ouvrir avec 16, 32, 64, etc...)


c'est peut-être l'action elle-même qui n'est pas bonne (mensuel)
le fichier représente des actions à effectuer sur un compte? ou les actions effectuées sur un compte... ?

il y a peut-être un problème de conception si tu as un doute pour répondre

et ces réponses là, je ne les ai pas, je n'ai que codé en fonction de tes infos
(dit-il pour se déculpabiliser )

ps : et en lisant ton commentaire de test : je ne vois pas pourquoi "parce que l'année est passée" le statut MENSUEL devrait disparaitre..
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
tiens pour une raison intéressante qui te sera inconnue, je viens de regarder la consommation de ton (mon ^^) projet

peux tu me dire stp :

taille du projet (que le code)
taille de l'exe
consommation ram au lancement

pour ma part :
dev : -- -67 790 octets
exe : -- -47 616 octets
ram : 11 028 000 octets (exe SANS l'IDE !!)

11Mo juste pour une form avec une listview et 1 menu et 3 boutons!

j'ouvre le fichier contenant 6 lignes et pesant 1 526 octets
ram : 18 256 000 octets


quand j'ouvre la 2e form, la ram augmente de entre 4Ko et 1Mo, qui ne sont pas libérés à chaque fermeture
(non non çà ne vient pas de mon code )


ceci non pour lancer de débat bien sûr, une économie de code a un coût (mais pour qui?? ...), maintenant 20Mo pour 2 forms..., je ne dis pas "fontaine je ne boirai jamais de ton eau" mais pour le moment je reste campé sur mon vieux vb6... ^^

et ce post pour preuve : pas faute d'essayer

pour comparaison je reste néanmoins intéressé par tes chiffres si tu veux bien

bon courage

[hr]
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Alors, je te dois d'éclaircir cette maudite fonction.
Pour la trace sur papier, j'ai noté les choses à faire et les choses à améliorer, pour le soft en lui même cela ressemble plus à un gemma (déformation pro).
La mensualisation (booléen) est une option lors de la création d'une nouvelle opération. Cette option permet (à l'ouverture du compte) de remplir automatiquement les mêmes opérations à chaque début de mois. Ex le salaire est mensuel, donc en cochant cette option, le compte vérifira à chaque ouverture s'il doit remplir une nouvelle ligne salaire. Si la nouvelle ligne est rempli, la ligne source n'aura plus l'option mensuel, c'est la nouvelle qui l'a (comme une pile). le test pour savoir si je dois créer cette nouvelle ligne (qui fonctionne dans la version "tableau" de ma source compte.net) est donc :
Si ce jour est > début de mois et option mensuel active et (si le mois actuel est > à celui de l'opération OU ALORS c'est une nouvelle année)


Spagetti mon amour ,
bref pour le poid de l'exe, du code et de la ram je regarde cela ce soir, mais de toute façon ya pas photo, le .net est gourmand, tant en fichier de projet qu'en ressource vive, j'ai fait du delphi et du C et j'ai vu la différence. kenavo .
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
ok merci pour l'explication

alors sans t'ajouter d'autres contraintes comme... :
si on dépasse minuit un jour de changement, rien ne va se passer
si on réouvre le programme juste après un changement de solstice...
si on change manuellement l'heure system
oups, j'ai dis SANS

je ne vois pas pourquoi ta classe fait ce test

(mais qu'est-ce qu'il raconte encore?)


ok :
ton compte c'est quoi, une sorte de container d'opérations

prenons un bus (container de voyageurs)
il peut tester la quantité de liquide de frein, de gasoil, parfois même de pression des pneus, passer de la musique etc...
pas mal de méthodes
mais autant il peut signaler qu'il n'y a plus de jus, autant il ne peut pas sortir des petites mains et transformer les passagers en gasoil, qu'il s'auto-appliquerait

déjà les passagers ne seraient pas content (les pauvres) mais surtout ce n'est pas ce qu'on lui demande : ce n'est pas sa fonction

l'objet BUS doit juste être capable de se déplacer, ce avec 0 ou N passagers


strictement pareil
l'objet COMPTE ici doit juste être capable de contenir 0 ou N enregistrements, accessibles depuis l'extérieur, et capable d'enregistrer et relire ces enregistrements


donc pour moi : ton code doit être fait après le Load, ce soit depuis l'extérieur (form), soit par une méthode à appeler depuis l'extérieur, avec précaution

(le BUS roule bien sans radio, il a quand même la méthode .PlayInfoTraffic)


enfin, j'vois çà comme çà hein, après... à toi de voir


ps : mais si je supprime la nouvelle ligne mensuelle (salaire annulé, congé sans solde), le mois d'après il n'y en aura plus non plus, puisque (en cachette) l'enregistrement d'il y aura 2 mois a été démensualisé
ce n'est donc (sans doute) pas non plus le bonne manière de faire

++
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
En effet, je te suis .
bon ce soir je m'y re-re-re colle ^^
j'va faire un échéancier séparé à remplir à dans la form principal, et qui sera une nouvelle collection de ma class (bonne exo en plus)
++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
tu ne pourras pas (serialization)

mais çà doit être dans ce goût là
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
ben si je rajoute une propriété, comme le budget ou autre ? bon de toute façon je m'y attéle.
Pour ta demande :

taille du projet (que le code)
taille de l'exe
consommation ram au lancement

pour ma part :
tout le projet : -- -68 Ko
exe : -- -37 888 octets (realase)
ram : 10 736 Koctets (exe SANS l'IDE ?? je sais pas ce que cela veut dire )
puis en quelques secondes passe à 11 432Ko, et enfin avec ouverture et ajout d'une ligne 16 856Ko
Pour sûr c'est pas terrible ! mais mieux que Iexplorer qui bouf 78Mo à lui seul MDR

++
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Biens me voila pret , toutes les fonctions sont OK !
pour la double de la mensualisation j'ai du écrire ceci dans la form principal (donc aprés le oad) je suis parti du même code que dans la class, mais voila seul un whit à résolu l'affaire ,pour le count ben les deux méthode marche "apparament aussi bien, je te laisse juger, toi le pro :
 Sub échéancier()
        'récupére le nombre de ligne initiale (avant mise à jour mensuel)
        'attention au code de pcpt c'est for i = 1 to count, puis i-1
        'marche pareil que si count-1 et pas de -1 à chaque i, en fin ligne ^^
        ' mais bon je lui fait confiance ^^
        Dim NB_ligne As Integer = mon_compte.lignes.Count '- 1

        ' recherche les mise à jour à faire (échéancier)
        For ligne As Integer = 1 To NB_ligne
            ' si c'est une ligne échéancier et que la date correspond au début du mois
            ' et que ce mois n'est pas déja rempli (ou alors si c'est une nouvelle année) alors
            If Now.Day >= 1 AndAlso mon_compte.lignes(ligne - 1).L_mensuel _
            AndAlso (Now.Month > mon_compte.lignes(ligne - 1).L_date.Month _
                Or Now.Year > mon_compte.lignes(ligne - 1).L_date.Year) Then
                ' retire à l'anciénne ligne le status de mensuel
                mon_compte.lignes(ligne - 1).L_mensuel = False
                ' ajouter cette nouvelle ligne !
                Dim new_ligne As New CLS_lignes 'pas besoin du new car le = instancie new_ligne (merci pcpt)
'sauf que là ben je doit faire comme ça pour que cela marche ????
                With (new_ligne)
                    .L_mensuel = True
                    .L_pointage = False
                    .L_budget = mon_compte.lignes(ligne - 1).L_budget
                    .L_type = mon_compte.lignes(ligne - 1).L_type
                    .L_commentaire = mon_compte.lignes(ligne - 1).L_commentaire
                    .L_date = CDate(mon_compte.lignes(ligne - 1).L_date.Day & " " & Now.Month & " " & Now.Year)
                    .L_credit = mon_compte.lignes(ligne - 1).L_credit
                    .L_debit = mon_compte.lignes(ligne - 1).L_debit
                End With
                mon_compte.lignes.Add(new_ligne)
                MiseAjour()
                new_ligne = Nothing
            End If
        Next
    End Sub


enfiin bref tout marche bien donc je tente une réécriture compléte avec mes "vrai bouton" de l'ancien code posté ^^
@++ pour de nouvelles aventures
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
oups un peu pef, dsl, j'ai eu du monde ce soir à l'apéro, pas simple de bien programmer dans ces conditions !
je suis pas là demain, mais je te tiens au jus pour la suite.
Merci mille fois pour ton aide si précieuse. @dn (hips)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
en lisant ton code (pas testé au final)

*with sur newline? tu gagnerais en lisibilité en le mettant sur l'item en cours de lecture (boucle)

*tu détruis l'item en boucle (bien), mais dans ce cas ne le déclare pas dans la boucle : new dans la boucle mais déclaration avant, question de logique (même s'il n'y a pas d'erreur)

*now.day >=1, à quoi sert ce test, quand est-il à zéro? le 0 février des années trissextiles? peut-être

*propreté : ta LIGNE pourrait te renvoyer cette "réponse" par méthode

*pointage VA changer? à quoi sert-il alors

*çà ne change rien au fait que si l'utilisateur supprime la nouvelle ligne, il supprime aussi cette "récurrence pourtant choisie"

*et les commentaires c'est sensé aider le lecteur, donc toi et/ou ceux qui vont lire la source. là on sait pas trop... des mercis, des jokes, ce que tu veux qui fait sourire mais çà n'aide pas plus que çà
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Salut, pour les comms c'est juste pour ici que tu vois ma démarche et mes questions, aprés biensûr il seront dédié qu'a la compréhension du code

Donc avant de parler du code en lui même, voila la seul chose qui à changé entre celui qui balance deux lignes identiques et celui ci qui copie normalement la nouvelle mesualité.
Dim new_ligne as Cls_lignes = mon_compte(ligne)
en fait j'ai l'impression que ne pas mettre le new à créér une copie de la ligne, mais avc des Byref, ce qui fait qu'il modifie aussi mon_compte(ligne) si je modifie new_ligne. D'ou le passage en as new ligne.

*Si l'utilisateur supprime une ligne échéancier au lieu de la modifier (déplacer d'un mois ou copie avec solde à zéro), c'est tant pis pour lui Au pire il la récrée le mois prochain.

*now.day >=1, sert uniquement pour le futur ou je placerais les lignes échéancier deux jours avant leur date de valeur ;)
now.day >= mon_compte.ligne(ligne).L_date.day-2 dans l'idée
*propreté : ta LIGNE pourrait te renvoyer cette "réponse" par méthode , c'est pour cela que je l'avais commencé dans la class et non dans la form load. Je vais refaire cela.

*with sur newline? tu gagnerais en lisibilité en le mettant sur l'item en cours de lecture (boucle)

*tu détruis l'item en boucle (bien), mais dans ce cas ne le déclare pas dans la boucle : new dans la boucle mais déclaration avant, question de logique (même s'il n'y a pas d'erreur)

Là j'ai pas tout compris pour le with
Pour la déclaration je ferais
dim new_ligne as cls_ligne avant la boucle, puis dans la boucle
new_ligne = new cls_ligne ?
cela change beaucoup dans la logique ?
Allez zou je prends la route, demain soir je recode les modifs. @++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
salut,

en fait j'ai l'impression que ne pas mettre le new à créér une copie de la ligne, mais avc des Byref

ce n'est pas une impression oui ^^
d'où la notion de clone (cf commentaire à côté de ID l'autre jour)

dans l'idée, juste remanier ce code, çà donnerait :


    'dans Cls_Compte
    Public Sub echeancier() '<- que tu appelles depuis la form, après le load réussi
        'récupére le nombre de ligne initiale (avant mise à jour mensuel)
        'attention au code de pcpt c'est for i = 1 to count, puis i-1
        'marche pareil que si count-1 et pas de -1 à chaque i, en fin ligne ^^
        ' mais bon je lui fait confiance ^^
        Dim Count_ligne As Integer = mon_compte.lignes.Count
        Dim new_ligne As CLS_lignes

        ' recherche les mise à jour à faire (échéancier)
        For ligne As Integer = 1 To Count_ligne
            With mon_compte.lignes(ligne - 1)
                ' si c'est une ligne échéancier et que la date correspond au début du mois
                ' et que ce mois n'est pas déja rempli (ou alors si c'est une nouvelle année) alors

                If .IsMonthlyable(DateTime.Now) Then
                    ' retire à l'anciénne ligne le status de mensuel
                    .L_mensuel = False

                    ' ajouter cette nouvelle ligne !
                    new_ligne New CLS_lignes 'pas besoin du new car le instancie new_ligne (merci pcpt)
                    'sauf que là ben je doit faire comme ça pour que cela marche ????

                    'CLONE
                    new_ligne = .Clone
                    new_ligne.L_ID = NOUVEL_ID 'du type que tu veux... IMPORTANT !!
                    new_ligne.L_mensuel = True
                    new_ligne.L_pointage False 'ou .L_pointage pour garder l'ancien ??
                    .L_date = CDate(.L_date.Day & " " & Now.Month & " " & Now.Year)

                    Me.lignes.Add(new_ligne)
                    new_ligne = Nothing
                End If
            End With
        Next
    End Sub


    'dans Cls_Lignes
    Public Function IsMonthlyable(ByVal dDate As DateTime) As Boolean
        'vérifier le nom de la fonction, pas certain que "Monthlyable" se dise...
        Return (dDate.Day >= 1 AndAlso _mensuel _
                AndAlso (dDate.Month > _date.Month _
                    Or dDate.Year > _date.Year))
    End Function

    'dans Cls_Lignes
    Public Function Clone() As CLS_lignes
        Return New CLS_lignes with {.L_id _id, .L_date _date, .L_credit = _credit, ETC, TOUTES LES PROPRIETES}
    End Function


et tu appelles MiseAjour() après avoir appelé echeancier

++

[hr]
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
new_ligne.L_date = CDate(.L_date.Day & " " & Now.Month & " " & Now.Year)
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
bonsoir,
et ben dis moi toi tu aimes l'anglais et les fonctions dis donc ^^
j'ai un peude mal à lire tn code, je le comprends là, mais dans deux ans ??
Donc à mon petit niveau je garde ma méthode, avec tout de même tes corrections.
Maintenant il faut que je finalise le tout.
    Sub échéancier()
        'récupére le nombre de ligne initiale (avant mise à jour mensuel)
        Dim NB_ligne As Integer = mon_compte.lignes.Count '- 1
        ' défini une nouvelle ligne
        Dim new_ligne As CLS_lignes
        ' recherche les mise à jour à faire (échéancier)
        For ligne As Integer = 1 To NB_ligne
            With mon_compte.lignes(ligne - 1)
                ' si c'est une ligne échéancier 
                ' et que ce mois n'est pas déja rempli (ou alors si c'est une nouvelle année) alors
                If .L_mensuel AndAlso (Now.Month > .L_date.Month _
                Or Now.Year > .L_date.Year) Then
                    ' retire à l'anciénne ligne le status de mensuel
                    .L_mensuel = False
                    ' ajouter cette nouvelle ligne !
                    new_ligne = New CLS_lignes 'instancie new_ligne
                    With (new_ligne)
                        .L_mensuel = True
                        .L_pointage = False
                        .L_budget = mon_compte.lignes(ligne - 1).L_budget
                        .L_type = mon_compte.lignes(ligne - 1).L_type
                        .L_commentaire = mon_compte.lignes(ligne - 1).L_commentaire
                        .L_date = CDate(mon_compte.lignes(ligne - 1).L_date.Day & " " & Now.Month & " " & Now.Year)
                        .L_credit = mon_compte.lignes(ligne - 1).L_credit
                        .L_debit = mon_compte.lignes(ligne - 1).L_debit
                    End With
                    mon_compte.lignes.Add(new_ligne)
                    new_ligne = Nothing 'détruit new_ligne
                End If
            End With
        Next
    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
comme tu veux

ah eh j'ai repensé à la suppression d'un enregistrement sans supprimer sa mensualisation... pas essayé mais sur le principe c'est faisable (et en très peu de code)

++
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
ah ah

une piste ?

supp de la listview avec une nouvelle propriétée caché ?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
pas cachée mais c'est une propriété oui