Double boucle for optimisation

Bonjour à tous,

Je joins à ce message un fichier d'études.

16testdoubletri.xlsm (18.84 Ko)

J'ai une base de données qui en réalité fait plusieurs dizaines de milliers de lignes. J'ai une autre base de données de travail qui devrait faire dans les 400 lignes environ.

L'objectif est que si le numéro de la ligne dans la bdd travail est égal à une ligne de la bdd, alors je copie cette ligne dans la bdd. En clair, que toutes les modifications de l'espace travail aillent dans la base de données.

Avec un for dans un for ou un loop, c'est faisable, ça fonctionne, mais ça prend énormément de temps.

J'aimerais donc passer par une méthode array. Dans mes souvenirs, il y avait une méthode avec du tri très efficace pour cela mais je ne la retrouve plus.Merci d'avance pour votre aide et n'hésitez pas si vous avez des questions.

Simon

bonjour,

un proposition... tu devrais aussi jeter un oeil à powerquery

Option Explicit
Sub test()

    Dim bdd As Worksheet, taf As Worksheet, i As Long, j As Long
    Dim tabbdd, tabtaf
    Set bdd = Worksheets("BDD")
    Set taf = ThisWorkbook.Worksheets("Travail")
    With bdd
        .UsedRange.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
    End With
    With taf
        .UsedRange.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
    End With
    tabbdd = bdd.UsedRange
    tabtaf = taf.UsedRange

    'fusion des 2 tableaux
    i = 1
    j = 1
    Do
        If tabbdd(i, 1) = tabtaf(j, 1) Then
            tabbdd(i, 2) = tabtaf(j, 2)
            tabbdd(i, 3) = tabtaf(j, 3)
            i = i + 1
            j = j + 1
        ElseIf tabbdd(i, 1) < tabtaf(j, 1) Then
            i = i + 1
        Else
            j = j + 1
        End If
    Loop Until tabbdd(i, 1) = "" Or tabtaf(j, 1) = ""

    'copie du tableau dans feuille bdd
    bdd.Range("A1").Resize(UBound(tabbdd, 1), UBound(tabbdd, 2)) = tabbdd
End Sub

Bonjour

Ci joint une autre proposition...

13testdoubletri.xlsm (19.70 Ko)

Fred

Une petite amélioration en voyant le code de H2SO4... en supposant que les numéros sont triés par ordre croissants... dans les colonnes A... car je ne le fait pas avant..

10testdoubletri.xlsm (19.92 Ko)

Fred

Bonjour h2so4 et fred2406,

h2, je teste cela dans la soirée sur mon fichier réel mais tout semble bien fonctionné.

Fred, ta solution semble copier la bdd dans la feuille travail alors que je souhaite l'inverse...

Merci à vous deux, je vous tiens au courant !

Simon

Re

j'ai compris de travers alors....

je vais revoir ma copie

Fred

Donc ci joint une nouvelle proposition

Fred

Rechercher des sujets similaires à "double boucle optimisation"