Optimisation code récupération données classeur fermé

Bonjour à tous,

J'ai un code qui me permet de récupérer des valeurs de cellules de classeurs fermés. En voici un extrait :

Private Sub readingTotal(ByVal startline As Integer, ByRef columnTotal As String, ByRef path As String, ByRef sheetSourceFile As String, ByRef sourceFile As String, ByRef lastColumnTotal As Byte, ByRef nameNewSheet As String, ByVal counterCycle As Byte, ByVal offsetFile As Integer)
Dim i As Integer
Dim j As Integer
Dim valid As String
Dim rangeSource As String
Dim rangeTarget As String
Dim lastLine As Byte

lastLine = Settings.Range("C100").End(xlUp).Row - 1

j = 1
    i = startline
    Do

        rangeSource = "A" & i
        rangeTarget = "A1"
        With Worksheets("Temp").Range(rangeTarget)
          .FormulaArray = "='" & path & "\[" & sourceFile & "]" & sheetSourceFile & "'!" & rangeSource
          .Value = .Value
          valid = .Value
        End With

        If valid = Worksheets(nameNewSheet).Cells(2, j + 1).Value Then

            rangeSource = columnTotal & i

            With Worksheets(nameNewSheet).Cells(counterCycle + offsetFile, j + 1)
              .FormulaArray = "='" & path & "\[" & sourceFile & "]" & sheetSourceFile & "'!" & rangeSource
              .Value = .Value
            End With
            j = j + 1
            i = startline
        End If
        i = i + 1
    Loop While j <= lastLine

End Sub

Tout fonctionne comme je le souhaite. Le seul inconvénient est le temps de cycle. En effet, pour 3000 cellules, je mets 3 minutes 30 à exécuter mon code.

Je pense que je perds du temps à faire une première fois ceci :

rangeSource = "A" & i
        rangeTarget = "A1"
        With Worksheets("Temp").Range(rangeTarget)
          .FormulaArray = "='" & path & "\[" & sourceFile & "]" & sheetSourceFile & "'!" & rangeSource
          .Value = .Value
          valid = .Value
        End With

Afin de valider la ligne de l'information que je veux extraire. N'y a t'il pas un moyen de convertir la formule directement en valeur en restant dans une variable interne au code sans la rentrer dans une feuille temporaire ?

Ou peut-être autre chose à laquelle je n'aurais pas pensé ?

Merci en tout cas de votre attention

Sam

Salut Sam,

J'ai déjà vu ta demande hier et je constate que - tout comme moi - personne n'a l'envie de se lancer à chercher une solution à ton problème, probablement car tu n'as pas fourni de fichier(s) modèle(s).

Si tes fichiers sont absolument confidentiels, remplace les données délicates par des données anonymes (un exemple : dans ta colonne CLIENTS, tu inscrits Client 1 à la place du nom du premier client puis tu incrémentes vers le bas).

Amicalement.

Bonjour Yvouille,

Merci pour ta réponse,

Voici les fichiers en question.

Il faut qu'ils soient dans le même dossier, tu ouvres le fichier "Resultat extraction Quartzy.xlsm" et tu as juste à appuyer sur le bouton "Générer". La page "Settings" permet de configurer les colonnes et les fichiers à extraire.

Merci à bientôt j'espère,

Sam

29extraction.zip (93.41 Ko)

Salut,

Alors, déjà, ta macro dure chez moi environ 9 secondes avec les fichiers que tu m'as envoyés. Je présume que ce temps extrêmement long que tu indiques vient de tes ordinateurs qui sont éventuellement très lents.

Puis j'ai voulu aller voir un peu tes codes et je dois dire que je suis peu chaud d'aller tenter de corriger quoi que ce soit. Selon un coup d'oeil très rapide, il me semble qu'il y a tellement de choses qui paraissent améliorables, que je n'ose pas démarrer.

Selon moi, tu ferais mieux d'indiquer ce que tu souhaites obtenir comme résultat sur la base de ces deux fichiers - on voit bien le résultat final sur la feuille qui se crée par ta macro, mais on ne sait pas comment tu y arrives et il faudrait trop de temps afin de décortiquer tes codes assez alambiqués afin de le comprendre - et que l'on te propose un nouveau code. Il n'est cependant pas dit que je pourrais trouver un code qui descendrait au-dessous de 9 secondes chez moi. Peut-être un autre membre du Forum ??

A te relire.

Alors je t'ai fourni qu'un seul fichier, les temps indiqués sont réalisés avec 10 fichiers comme celui-ci que tu indiques dans la colonne A de la feuille settings. Pour essayer, tu dupliques le fichier FicheVE01 jusqu'à obtenir FicheVE10 et dans la feuilles settings tu fais développer le titre en colonne A, FicheVE01 jusqu'à avoir FicheVE10. Après je suis d'accord, le PC joue beaucoup.

Ensuite, ces "FichesVE" peuvent être modifiées au niveau des lignes, alors je teste plusieurs fois certaines choses qui peuvent paraître inutile afin d'anticiper les modifications des FicheVE sur lesquelles je n'ai aucun pouvoir, d'où le fait que tu puisses certainement voir des trucs ahurissants...

Après, il y a de fortes chances que j'ai fait des conneries aussi, si tu peux me donner un exemple ?

Mais pour moi le souci des temps de cycle vient du problème que j'ai remonté au tout premier message.

Dans tous les cas, je te remercie de ta franchise et du temps que tu as passé sur mon sujet.

A plus,

Sam

Salut Sam,

Après, il y a de fortes chances que j'ai fait des conneries aussi, si tu peux me donner un exemple ?

Non pas vraiment, ce n'est qu'une impression, par exemple en voyant dans un rapide premier coup d'œil que le code repasse souvent par les mêmes instructions, en voyant ces codes enregistrés non nettoyés, etc. Mais afin d'en avoir le cœur net, il faudrait se plonger à fond dans tes codes, ce que je t'ai dit ne pas avoir vraiment l'envie.

Cependant, en indiquant ce que tu souhaites, à condition que j'arrive à le réaliser, sinon un autre participant au Forum, tu pourrais voir un code probablement épuré dont tu pourrais t'inspirer pour le futur. C'est en tout cas ainsi que j'ai principalement appris les macros.

Mais pour moi le souci des temps de cycle vient du problème que j'ai remonté au tout premier message.

Peut-être, peut-être pas

Amicalement.

Bonjour Yvouille,

Cependant, en indiquant ce que tu souhaites, à condition que j'arrive à le réaliser, sinon un autre participant au Forum, tu pourrais voir un code probablement épuré dont tu pourrais t'inspirer pour le futur. C'est en tout cas ainsi que j'ai principalement appris les macros.

Je vais alors t'expliquer ce que je souhaite obtenir :

Dans la page "Settings", je définis en colonne A les noms des fichiers (FicheVEx) dont il faut extraire les informations (classeur fermé ou ouvert) et qui doivent se trouver dans le même dossier que ce fichier d'extraction. Une fois le premier fichier terminé, le second s’enchaîne automatiquement jusqu'à ce que tous les fichiers indiqués en colonne A de Settings soient balayés.

En colonne C, je définis les lignes de chaque affaire à extraire pour les "montants" qui seront en colonne dans la feuille générée. Par exemple, le premier, "Transfert PRT devis", tu vas le retrouver dans ta fiche VE en ligne dans chaque affaire (en A71 pour la première affaire). Avec le nom de colonne inscrit dans la feuille Settings en D2, tu sais quelle valeur récupérer. Tel que c'est configuré, pour la première affaire tu vas récupérer la valeur en I71 soit 0 dans ce fichier. C'est exactement le même principe pour les "heures" configurées en colonne F de la page Settings.

Dans tes fiches VE, tu as toujours la dénomination de tes affaires qui commencent en A11. Il peut y en avoir de 1 à 20. Ensuite tu as la structure des affaires avec les données à extraire qui se répète.

Donc comme tu peux le voir avec la feuille générée du fichier que je t'ai envoyé, tu récupères tous les noms d'affaire que tu mets bout à bout en colonne A. En face de chaque affaire, tu remplis les cellule en fonction du nom de la colonne que tu as configurée dans Settings. Bien sûr, la mise en forme est automatisée.

J'espère que je suis assez clair, demande moi si tu as besoin de plus de détails

Merci,

Sam

Salut,

Tu as dis que ta macro dure 3 minutes 30 chez toi et elle dure environ 90 à 100 secondes chez moi, soit environ la moitié.

Je te propose le fichier ci-joint qui devrait correspondre à ton attente. Afin de traiter 10 fichiers, ça dure environ 3 secondes chez moi. J'espère donc que ça dure moins de 10 secondes chez toi.

Probablement que l'une ou l'autre chose pourrait être améliorée dans le code (pour la beauté du geste), mais ce soir je n'ai plus le courage et je suis impatient de te montrer le résultat

Cordialement.

Et ben chapeau Yvouille ! Je vais essayer d'analyser ton code et en apprendre le plus possible ! Sur mon PC, la macro met 21s exactement pour s'exécuter ! Mais cela reste 10 fois plus rapide (anciennement 210s) tout de même ce qui me convient parfaitement !

Encore merci et bravo !

A bientôt,

Sam

Salut,

J'ai fait des essais ce matin au travail et – bizarrement, alors que je pensais que cet ordinateur était plus puissant que le mien privé – la macro mouline durant 13 à 15 secondes pour traiter 10 fichiers !! Mais bon, comme tu le dis, c'est mieux qu'avant.

Il y a une chose que j'ai oublié de te dire : Je suis parti du principe que tous les fichiers visités avaient une liste d'affaires à traiter qui commence à la ligne 11 de la feuille passée en revue et que cette liste d'affaires n'a pas de ligne vide entre deux. Le nombre d'affaires peut toutefois être différents d'un fichier à l'autre. Cependant, j'ai également considéré que le détail des affaires commençait à la ligne 34, quel que soit le nombre d'affaires de ce fichier.

Si l'une ou l'autre de ces suppositions étaient incorrectes, je devrais modifier le code en conséquence.

Bien à toi.

Merci Yvouille pour ces précisions,

En effet, la ligne où commence le détail de l'affaire varie en fonction du nombre d'affaire. Par contre, c'est linéaire. Un offset qui compte le nombre d'affaire dans la fiche VE devrait faire le taffe. Mais t'inquiète, je vais essayer de me débrouiller maintenant.

Merci beaucoup

Je te souhaite que ce soit si simple

J'ai réussi à faire la modif et j'ai rajouté un diagnostique si la colonne recherchée est introuvable plutôt qu'un message d'erreur VBA de la méthode match ^^

Dis moi ce que t'en penses

Tu as le droit de m'insulter si j'ai dégueulassé ton code

Je te laisse ouvrir un nouveau fil si tu as encore besoin d'aide sur un autre problème

Rechercher des sujets similaires à "optimisation code recuperation donnees classeur ferme"