Exécution VBA-excel très très lente

Fermé
Stat.h - 11 mars 2013 à 14:51
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 12 mars 2013 à 09:14
Bonjour,
Je travaille sur une table excel de très grande taille (130000 lignes) et je dois exécuter une procédure sous vba pour effectuer un calcul du capital restant dû pour chaque client à une date précise ( chaque client a une échéance fixe par mois,une date de dernière échéance, une date de première échéance et le capital restant dû au 31/12/2012). j'ai fait la procédure suivante pour effectuer le calcul. Le problème que j'ai rencontré c'est que le calcul bloque si j'exécute pour plus de 300 clients ( lignes) sachant que pour chaque ligne on parcourt 1500 colonne (toutes les dates possibles de 01/01/2013 jusqu'à 31/12/2016) je pense que ce n'est pas pratique. L'objectif de ce travail est de d'offrir la possibilité de savoir le total du capital restant dû à une date donnée. Aviez des propositions pour faciliter la tache ?
Sub Calcul()
Dim I, J, H As Integer
Dim X As Variant
For I = 2 To 130000
For J = 8 To 1500
If Cells(I, 3).Value = Cells(1, J).Value And Cells(I, 4).Value < Cells(I, 5).Value Then
Cells(I, J).Value = Cells(I, 4).Value
Else
If Cells(I, 7).Value = "4 Semaine" Then
For T = 0 To 53
X = Cells(I, 4).Value
If Cells(1, J).Value = DateSerial(Year(Cells(I, 3).Value), Month(Cells(I, 3).Value), Day(Cells(I, 3).Value) - (T * 28)) And (X - (Cells(I, 6).Value - T) * Cells(I, 5).Value) > 0 And X > (X - (Cells(I, 6).Value - T) * Cells(I, 5).Value) Then

Cells(I, J).Value = X - (Cells(I, 6).Value - T) * Cells(I, 5).Value
End If
Next T
Else
If Cells(I, 7).Value = "Quinzaine" Then
For H = 0 To 53
X = Cells(I, 4).Value
If Cells(1, J).Value = DateSerial(Year(Cells(I, 3).Value), Month(Cells(I, 3).Value), Day(Cells(I, 3).Value) - (H * 14)) And (X - (Cells(I, 6).Value - H) * Cells(I, 5).Value) > 0 And X > (X - (Cells(I, 6).Value - T) * Cells(I, 5).Value) Then

Cells(I, J).Value = X - (Cells(I, 6).Value - H) * Cells(I, 5).Value
End If
Next H
End If
End If
End If
Next J
Next I

End Sub



A voir également:

2 réponses

michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
11 mars 2013 à 15:04
Bonjour,

Effectivement, ta procédure a tout ce qu'il faut pour durer très longtemps

Déjà en incluant cette ligne en début de macro, tu gagnerais du temps:
Application.screenupdating=False

on peut encore gagner beaucoup de temps mais il faut qu'on puisse travailler avec la structure réelle
pour cela:
mettre un extrait(env. 5000 lignes maxi) du classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse

Je dois m'absenter 1 à 2 heures, donc...
0
Merci infiniment pour votre réponse. Voici un extrait de la table comme vous l'avez demandé.
http://cjoint.com/13ma/CClpx4YkwuZ.htm
Merci d'avance.
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
Modifié par michel_m le 11/03/2013 à 16:57
Re,

Beaucoup de questions

1/ CRD est le K restant dû au 31/12 OK, les échéances sont sur 4 semaines OK pour le 1° reste 2 échéances au 1/1 et 480*2> 800? comprend pas le système de calcul des remboursements....

2/ tu travailles par semaines: pour réduire le tableau ne pourrait 'on pas envisager de travailler en jours.ouvrés :samedi et dimanche otés et es tu obligé de montrer 3 années ?

3 tu écris:
L'objectif de ce travail est de d'offrir la possibilité de savoir le total du capital restant dû à une date donnée
et si on écrit le tableau que jusqu'à la date voulue: on pourrait décaler d'une ou 2 lignes le tableau pour réserver une cellule pour écrire la date voulue ?

4: autre solution
avec un formulaire: on choisit l'identifiant, la date voulue d'inspection, et il est retourné le capital restant dû ?
0
si le capital est inférieur à l'échéance alors le client paie un montant égal au capital à cette date. pour la périodicité il y a deux cas 4 semaines et par quinzaine.
0
Les mensualités sont fixes le client paie le même montant chaque 4 semaines ou chaque quinzaine
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
11 mars 2013 à 16:59
Excuses- moi j'avais validé par erreur: il y a des questions supplémentaires !!!
0
au fait avant de créer le formulaire qui va permettre de calculer le total du capital restant du à une date on doit visualiser la courbe de l'évolution de ce capital restant dû par mois, on travaille sur 3 ans puisque la dernière échéance d'un client est en décembre 2016.
0