Le jour le plus long...

toc toc

XLDnaute Nouveau
Bonjour forum :)

Je dispose d'une macro permettant de chercher des données dans diverses cellules de plusieurs fichiers Excel et de les placer dans un fichier "fille", la voici :

Code:
Sub extraction() 
Dim nbre As Long, lig As Long, cptr As Long
Dim fichier As String

    nbre = Application.CountA(Range("B7:B1000")) 

    lig = ligdep
    Application.ScreenUpdating = False
    For cptr = 1 To nbre
        fichier = Cells(lig, 2)
        
        Cells(lig, 4) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R15C3") 
        Cells(lig + 1, 4) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R20C3") 
        Cells(lig + 2, 4) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R25C3") 
        Cells(lig + 3, 4) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R30C3") 
        Cells(lig + 4, 4) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R35C3") 
        Cells(lig, 5) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R15C5") 
        Cells(lig + 1, 5) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R20C5") 
        Cells(lig + 2, 5) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R25C5") 
        Cells(lig + 3, 5) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R30C5") 
        Cells(lig + 4, 5) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R35C5") 
        Cells(lig, 6) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R15C11") 
        Cells(lig + 1, 6) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R20C13") 
        Cells(lig + 2, 6) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R25C13") 
        Cells(lig + 3, 6) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R30C13") 
        Cells(lig + 4, 6) = ExecuteExcel4Macro("'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R35C13") 
lig = lig + 5
        
    Next
    
End Sub


Or dès que le nombre de fichiers à traiter dépasse la dizaine cela deviens trèèèèès long !

Par exemple pour vous faire une idée de la chose, extraire les données de 10 fichiers met environ 2min30, pour 20 fichiers ça met environ 8 à 9 minutes pour tout extraire ! J'imagine pas quand j'aurais une cinquantaine de fichier à traiter^^".

Connaitriez vous des moyens permettant d'améliorer celà ? Acheter un PC plus puissant ? :rolleyes:

Merci de votre aide !
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Le jour le plus long...

Bonjour toc toc, le forum,

Essayez d'entrer directement les formules des liaisons dans la feuille de calcul (donc sans les évaluer par ExecuteExcel4Macro).

Puis en fin de macro supprimez les formules dans la plage qui vous intéresse par une instruction du type :

plage = plage.Value

Dites-nous si on gagne du temps.

Edit : éventuellement, essayez en plus :

Application.Calculation = xlCalculationManual en début de macro, et

Application.Calculation = xlCalculationAutomatic en fin de macro.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Le jour le plus long...

Re,

Ah et puis aussi simplifiez les formules dans la boucle en utilisant une variable intermédiaire.

Au lieu d'écrire :

Code:
Cells(lig, 4).FormulaR1C1 = "'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R15C3" 
Cells(lig + 1, 4).FormulaR1C1 = "'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R20C3"
'--------------

écrire :


Code:
Dim txt As String 'en début de macro
'-------------- 
txt = "'" & Chemin & "\[" & fichier & "]Feuil1 (2)'!R"
Cells(lig, 4).FormulaR1C1 = txt & "15C3" 
Cells(lig + 1, 4).FormulaR1C1 = txt & "20C3"
'--------------


A+
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Le jour le plus long...

Bonjour tout le monde,

J'ai l'impression que travailles sur des classeurs fermés.
Les ouvrir pour copier tes 15 valeurs avant de les fermer te ferait peut-être gagner du temps.
Sinon il y a d'autres techniques plus rapides pour travailler sur les classeurs fermés mais là je laisse les pros répondre.
à voir

eric
 

toc toc

XLDnaute Nouveau
Re : Le jour le plus long...

Merci à vous 2

job75 --> Pour ta méthode consistant à faire les liaisons directement dans la feuille de calcul je ne vois pas comment faire ^^". (Le nombre de fichiers traités change continuellement du fait qu'ils puissent être supprimés ou que de nouveaux puissent êtres ajoutés).

Sinon j'ai utilisé ta méthode pour simplifier mes boucles mais au lieu de me retourner la valeur des cellules ça me retourne le lien du fichier dans toutes mes cellules.

eriiiiic --> Oui en effets les classeurs sont fermés. Et je pense que les ouvrir serait pas très pratique du fait qu'ils pourront atteindre la cinquantaine voir plus ça risque d'être répétitif ^^".
 

eriiic

XLDnaute Barbatruc
Re : Le jour le plus long...

re,

je pense que les ouvrir serait pas très pratique du fait qu'ils pourront atteindre la cinquantaine voir plus ça risque d'être répétitif ^^"
Je n'ai pas dit de les ouvrir manuellement, tu es en vba autant continuer...
Mais jette un oeil au lien que je t'ai fourni
eric
 

MJ13

XLDnaute Barbatruc
Re : Le jour le plus long...

Bonjour à tous

Je ne comprend pas bien le problème car je ne vois pas vraiment ce qu'il faut chercher.

Toc Toc: Le mieux serait de mettre 2 ou 3 fichiers avec des données non confidentielles.
Ce serait beaucoup plus simple pour donner une réelle alternative a ton problème.

eriiiiic --> Oui en effets les classeurs sont fermés. Et je pense que les ouvrir serait pas très pratique du fait qu'ils pourront atteindre la cinquantaine voir plus ça risque d'être répétitif ^^".

Un fichier pas trop gros n'a jamais été long a ouvrir!
 

job75

XLDnaute Barbatruc
Re : Le jour le plus long...

Re, salut eriiiic, MJ13,

Sinon j'ai utilisé ta méthode pour simplifier mes boucles mais au lieu de me retourner la valeur des cellules ça me retourne le lien du fichier dans toutes mes cellules.

Ben oui, c'est ce que je vous ai proposé de tester...

Et en fin de macro, supprimer les formules dans la plage qui vous intéresse avec une formule du genre (je me répète) :

plage = plage.Value

A+
 

toc toc

XLDnaute Nouveau
Re : Le jour le plus long...

MJ13 --> Bha j'ai pensé joindre mon dossier, j'ai une version "test" du truc ou tout ce qui est confidentiel est zappé...

Le problème c'est que dans cette version c'est plus rapide quand même... Pourtant j'ai fait en sorte que le document listant le contenu des fichiers fasse le même poids que l'original et pareil pour les fichiers test contenant les données.

Je met un lien. http://cjoint.com/?hjoTiL72Qz

job75 --> je vais essayer de tester ta méthode (si j'y arrive ^^).
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 779
Messages
2 092 046
Membres
105 168
dernier inscrit
makari69