Boucles for imbriquées, macro trop lente
Painauchocolat
Messages postés
2
Statut
Membre
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai besoin de vos lumières!
J'ai réalisé un programme vba qui est beaucoup trop lent ! J'aimerais avoir vos conseils concernant de possibles évolutions !
Les données se présentent de la façon suivante : une colonne, représentant des objets, et une autre, donnant des dates de réalisation d'opérations liées à ces objets.
Il peut y avoir plusieurs opérations et donc plusieurs dates par objet.
Le but du programme est :
- Dans un 1er temps, de trouver pour chaque objet la date la plus ancienne;
- Dans un 2nd temps, de comparer ces dates et de donner la date la plus récente et son objet associé.
Le programme que j'ai réalisé fonctionne mais est très lent (seulement 100 à 200 lignes de données à traiter et plusieurs minutes d'exécution).
Si vous avez des pistes pour l'améliorer ou même une méthode différente (peut être avec des recherchev ?? je ne vois pas trop comment faire..), ce serait génial !
Merci d'avance et bonne soirée !
J'ai besoin de vos lumières!
J'ai réalisé un programme vba qui est beaucoup trop lent ! J'aimerais avoir vos conseils concernant de possibles évolutions !
Les données se présentent de la façon suivante : une colonne, représentant des objets, et une autre, donnant des dates de réalisation d'opérations liées à ces objets.
Il peut y avoir plusieurs opérations et donc plusieurs dates par objet.
Le but du programme est :
- Dans un 1er temps, de trouver pour chaque objet la date la plus ancienne;
- Dans un 2nd temps, de comparer ces dates et de donner la date la plus récente et son objet associé.
Le programme que j'ai réalisé fonctionne mais est très lent (seulement 100 à 200 lignes de données à traiter et plusieurs minutes d'exécution).
Sub D_DatesDebutMsn()
Application.ScreenUpdating = False
Worksheets("Feuil3").Range("A:B").ClearContents
Worksheets("data").Columns("D:G").NumberFormat = "General"
LastRow = Worksheets("data").Range("A60000").End(xlUp).Row
For i = 2 To LastRow
If Worksheets("data").Cells(i, 8).Value = "Oui" Then
first = Worksheets("data").Cells(i, 6).Value
vMsn = Worksheets("data").Cells(i, 2).Value
For j = 2 To LastRow
If j <> i Then
If Worksheets("data").Cells(j, 2).Value = Worksheets("data").Cells(i, 2).Value Then
If Worksheets("data").Cells(j, 6).Value < Worksheets("data").Cells(i, 6).Value Then
If Worksheets("data").Cells(j, 6).Value > 0 Then
first = Worksheets("data").Cells(j, 6).Value
vMsn = Worksheets("data").Cells(j, 2).Value
End If
End If
End If
End If
If first <> 0 Then
Worksheets("Feuil3").Cells(i, 1).Value = vMsn
Worksheets("Feuil3").Cells(i, 2).Value = first
End If
Next j
End If
Next i
Worksheets("data").Columns("D:G").NumberFormat = "m/d/yyyy"
Worksheets("Feuil3").Columns("B:B").NumberFormat = "m/d/yyyy"
Application.ScreenUpdating = True
End Sub
Si vous avez des pistes pour l'améliorer ou même une méthode différente (peut être avec des recherchev ?? je ne vois pas trop comment faire..), ce serait génial !
Merci d'avance et bonne soirée !
A voir également:
- Boucles for imbriquées, macro trop lente
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Pc trop lent - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
3 réponses
BOnjour
"Objet" a une signifiation technique bien précise en VBA: qu'entends tu par "objet"?
au besoin
mettre le classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
et explique très clairement et de manière exhaustive ton projet
Michel
"Objet" a une signifiation technique bien précise en VBA: qu'entends tu par "objet"?
au besoin
mettre le classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
et explique très clairement et de manière exhaustive ton projet
Michel
Bonjour,
J'entends par objet un article, et non pas un objet vu comme en programmation!
http://www.cijoint.fr/cjlink.php?file=cj201106/cijzIGLBx1.xlsm
Prenons l'exemple d'une voiture. La colonne de gauche représente le numéro du véhicule. Celle de droite les dates de début des opérations de fabrication sur ces véhicules (il peut y avoir plusieurs opérations par véhicule).
La colonne des "oui" permet de voir quels véhicules sont commencés (une seule opération peut avoir été lancée sur le total).
Le but est de voir quel véhicule a été commencé le dernier, et cela par le raisonnement expliquer dans mon 1er message!
Merci pour ta réponse
Antoine
J'entends par objet un article, et non pas un objet vu comme en programmation!
http://www.cijoint.fr/cjlink.php?file=cj201106/cijzIGLBx1.xlsm
Prenons l'exemple d'une voiture. La colonne de gauche représente le numéro du véhicule. Celle de droite les dates de début des opérations de fabrication sur ces véhicules (il peut y avoir plusieurs opérations par véhicule).
La colonne des "oui" permet de voir quels véhicules sont commencés (une seule opération peut avoir été lancée sur le total).
Le but est de voir quel véhicule a été commencé le dernier, et cela par le raisonnement expliquer dans mon 1er message!
Merci pour ta réponse
Antoine