Temps d'exécution trop long
Résolu
siamens_duj
Messages postés
212
Statut
Membre
-
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai créé un code qui fonctionne. Seul problème, il met presque 2H00 à s'exécuter !
Ce qui est beaucoup trop long.
J'ai un classeur. Dans ce classeur j'ai plusieurs feuilles mais ici seulement deux
nous intéresse.
Dans ces feuille, j'ai des colonnes, dont une dans la feuille "TXT" en F qui est une
colonne de concaténation et une autre dans la feuille "BASE" en Z qui est aussi
une colonne de concaténation.
Si les 2 colonnes de concaténations correspondent, la cellule en E de "TXT" se copie dans la
cellule en F de "BASE".
Il se peut qu'une valeur de concaténation de "TXT" correspondent à 2 valeurs de concaténation de la
feuille "BASE".
La feuille "TXT" comporte environ 20 000 lignes, mais cela peut changer ..
Voici mon code :
Merci d'avance pour votre aide.
J'ai créé un code qui fonctionne. Seul problème, il met presque 2H00 à s'exécuter !
Ce qui est beaucoup trop long.
J'ai un classeur. Dans ce classeur j'ai plusieurs feuilles mais ici seulement deux
nous intéresse.
Dans ces feuille, j'ai des colonnes, dont une dans la feuille "TXT" en F qui est une
colonne de concaténation et une autre dans la feuille "BASE" en Z qui est aussi
une colonne de concaténation.
Si les 2 colonnes de concaténations correspondent, la cellule en E de "TXT" se copie dans la
cellule en F de "BASE".
Il se peut qu'une valeur de concaténation de "TXT" correspondent à 2 valeurs de concaténation de la
feuille "BASE".
La feuille "TXT" comporte environ 20 000 lignes, mais cela peut changer ..
Voici mon code :
Sub copie()
Application.ScreenUpdating = False
Dim u as long
Dim j as long
u = 2
j = 2
Do While Sheets("BASE").Cells(u, 1).Value <> ""
If Sheets("BASE").Cells(u, 26).Value = Sheets("TXT").Cells(j, 6).Value Then
Sheets("BASE").Cells(u, 6).Value = Sheets("TXT").Cells(j, 5).Value
u = u + 1
j = 2
Else: j = j + 1
End If
If Sheets("TXT").Cells(j, 1).Value = "" Then
j = 2
u = u + 1
End If
Loop
Merci d'avance pour votre aide.
A voir également:
- Temps d'exécution trop long
- Pc long a demarrer - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Temps pour soi iphone - Guide
- Family link le temps ne correspondent pas - Forum Contrôle parental
- Sablier snap temps - Forum Snapchat
2 réponses
bonjour
effectivement....
Dans l’attente
Il se peut qu'une valeur de concaténation de "TXT" correspondent à 2 valeurs de concaténation de la
feuille "BASE".
on conserve les doublons ou non ?
effectivement....
Mettrun extrait du classeur -2000 à 3000 lignes- sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci par un clic droit sur le lien proposé dans le message de réponse
Dans l’attente
Il se peut qu'une valeur de concaténation de "TXT" correspondent à 2 valeurs de concaténation de la
feuille "BASE".
on conserve les doublons ou non ?
Bonjour,
@michel_m : un grand coucou à toi
@siamens_duj : Je te propose de modifier ainsi ta macro
Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
@michel_m : un grand coucou à toi
@siamens_duj : Je te propose de modifier ainsi ta macro
Sub copie()
Dim u As Long
Dim j As Long
Dim tbb, tbt
Application.ScreenUpdating = False
With Sheets("BASE")
tbb = .Cells(1, 26).Resize(.Cells(Rows.Count, 26).End(xlUp).Row, 1).Value
End With
With Sheets("TXT")
tbt = .Cells(1, 5).Resize(.Cells(Rows.Count, 6).End(xlUp).Row, 2).Value
End With
For u = 2 To UBound(tbb)
For j = 2 To UBound(tbt)
If tbb(u, 1) = tbt(j, 2) Then
Sheets("BASE").Cells(u, 6).Value = tbt(j, 1)
Exit For
End If
Next j
Next u
Application.ScreenUpdating = True
End Sub
Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry