Optimisation temps d execution Macro

Bonjour a tous,

Svp J aurais besoin d aide afin d améliorer le temps d execution de la macro en fichier joint. Il s agit d une macro qui a partir d une fiche que l utilisateur remplir et clique sur le bouton de la macro, permet de remplir automatiquement ma base de donnée.

La macro fonctionne bien, mais au fus et a mesure que la base de donnée est pleine, la macro devient de plus en plus lente.

Merci pour votre aide précieuse

Voici le code et voir fichier joint

Sub Lancement_Produit() 'recettes vers base

Dim Tbl, i As Long, j As Long, l As Long

Tbl = Feuil19.Range("C14").CurrentRegion 'fiche

With Feuil1 'base

l = .[A65000].End(xlUp).Row + 1

For i = 3 To UBound(Tbl, 1) 'lignes de recettes

.Range("A" & l) = Tbl(1, 1) 'n°recette

For j = 1 To UBound(Tbl, 2) 'colonnes C à G de recette

If Tbl(i, j) <> "" Then .Cells(l, j + 1) = Tbl(i, j)

Next j

l = l + 1

Next i

End With

With Feuil19 'vide fiche

.Range("C12") = ""

.Range("C14:H118") = ""

End With

End Sub

10macro-lente.xlsm (278.05 Ko)

Bonsoir,

Essaie ainsi :

Sub Lancement_Produit()    'recettes vers base
    Dim Tbl
    With Feuil19.Range("C14").CurrentRegion
        Tbl = .Offset(2).Resize(.Rows.Count - 2)
        .Offset(2).ClearContents
        .Resize(1).ClearContents
    End With
    With [Tableau3]    'base
        .Cells(.Rows.Count + 1, 1).Resize(UBound(Tbl, 1), UBound(Tbl, 2)).Value = Tbl
    End With
End Sub

Naturellement, ta Base, le tableau Excel (Tableau3) ne doit pas comporter de lignes vides. (Les lignes ajoutées à la suite du tableau y sont automatiquement incorporées.)

Cordialement.

Merci beaucoup MFerrand

Il ya juste un petit oublie que tu n a pas pris en compte. La premiere ligne du tableau (Il s agit du titre du produit) doit se remplir aussi dans la base de donnée.

Voir le fichier joint. Je l ai mentionnée.

Merci une fois de plus et a bientôt.

6macro-lente.xlsm (277.96 Ko)

J'avais bien trouvé une ligne un peu bizarre... ! Puis j'ai oublié et mis ça sur le compte du l (on n'utilise en général pas le L minuscule car confusion avec le 1 dans la police de l'éditeur). On réadapte donc :

Sub Lancement_Produit()    'recettes vers base
    Dim Tbl, tit$
    With Feuil19
        tit = .Range("C12")
        With .Range("C14").CurrentRegion
            Tbl = .Offset(2).Resize(.Rows.Count - 2)
            .Offset(2).ClearContents
        End With
        .Range("C12").MergeArea.ClearContents
    End With
    With [Tableau3]    'base
        With .Cells(.Rows.Count + 1, 1).Resize(UBound(Tbl, 1))
            .Value = tit
            .Offset(, 1).Resize(, UBound(Tbl, 2)).Value = Tbl
        End With
    End With
End Sub

Cordialement.

Je ne saurais comment te remercier MFerrand.

ça marche parfaitement et le temps est énormément réduis. Merci mille fois.

Merci du retour.

Analyse le raisonnement : si les opérations élémentaires ont des temps d'exécution divers, en procédant par blocs (l'intérêt des tableaux) on en réduit le nombre global, avec de bonnes chances de réduire le temps global... En pratique, tenter et tester pour voir le résultat...

Bonne continuation.

Rechercher des sujets similaires à "optimisation temps execution macro"