Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 utilisation de tableaux pour améliorer le temps d'exécution

Citronflexe

XLDnaute Junior
Bonjour le forum !

A travers plusieurs post de ce forum, j'ai cru comprendre que l'utilisation de tableaux (Array ? )pouvait grandement améliorer le temps d'exécution d'une macro.
Le problème c'est que je n'en ai jamais vraiment utilisé, je ne sais pas du tout comment m'y prendre.

J'aimerais savoir s'il était possible d'améliorer le temps d'exécution de ma macro dans le fichier ci-joint "test_extrac_suivi.xlsm", en utilisant des tableaux.


En gros, la macro va chercher pour chaque ligne du fichier si le nombre en colonne A existe dans le fichier "2017_SUIVI LOTS_.....", colonne D, et fait la somme des nombres en colonne M.
Cela fonctionne bien, mais la macro dure à peu près 25sec chez moi...


Merci de votre aide précieuse !
 

Pièces jointes

  • test_extrac_suivi.xlsm
    43.9 KB · Affichages: 23
  • 2017_SUIVI LOTS - PROD & SC_factice.xlsm
    223.9 KB · Affichages: 18

Citronflexe

XLDnaute Junior
Bonjour @M12 ,

Merci de ta réponse !

C'est en effet plus rapide, mais par contre, ça ne fait plus la somme des nombres en colonne M dans le cas des doublons.
Mais je vais essayer de fouiner dans tes codes et formules pour voir...

Merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Dans votre cas vous pourriez l'écrire comme ça :
VB:
Option Explicit
Sub RechercheSuivi()
   Dim TNum(), TQté(), TRés(17001 To 18999, 1 To 2), L As Long, N As Long, Suivi As Worksheet, RngLig As Range
   Set Suivi = Workbooks("2017_SUIVI LOTS - PROD & SC_factice.xlsm").Worksheets("EXPE CLIENTS BAGS-MECA")
   Set RngLig = Suivi.Rows(3).Resize(Suivi.Cells(Suivi.Rows.Count, "D").End(xlUp).Row - 2)
   TNum = RngLig.Columns("D").Value
   TQté = RngLig.Columns("M").Value
   For N = LBound(TRés, 1) To UBound(TRés, 1): TRés(N, 1) = N: Next N
   On Error Resume Next
   For L = 1 To UBound(TNum, 1)
      N = TNum(L, 1)
      TRés(N, 2) = TRés(N, 2) + TQté(L, 1)
      Next L
   Feuil1.[A1:B1999].Value = TRés
   End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…