Temps d'exécution trop long

Résolu/Fermé
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - 27 juin 2016 à 08:02
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 28 juin 2016 à 08:04
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 :

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.

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
27 juin 2016 à 08:41
bonjour

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 ?




0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
Modifié par gbinforme le 27/06/2016 à 09:43
Bonjour,

@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
0
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
27 juin 2016 à 09:51
Bonjour et merci pour vos réponses rapide.

Merci beaucoup gbinforme c'est super, mon code s'exécute en quelques secondes seulement !
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684 > siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019
28 juin 2016 à 08:04
Merci du retour.
L'utilisation de tables mémoire est infiniment plus rapide que l'adressage feuille.
0