Optmisation import de données externes

Bonjour,

Tout d'abord, un grand merci pour ce site qui m'a permis de débuter sur VBA.

Je me permets aujourd'hui de vous exposer une problématique qui dépasse mes connaissances actuelles.

Je souhaite importer d'un fichier excel externe (max 25000lignes sur 20colonnes) qui recence les besoins de mon entreprise (1 qté suivant 1 date svt 1 référence) dans le fichier contenant mon programme pour remplir un tableau contenant les références sur lesquelles je souhaite connaître les besoins rangés par mois

Fichier analysé:

colonne A -> référence

Colonne E -> date du besoin

Colonne G -> quantité

Fichier à compléter:

Colonne A -> mes références pour lesquelles je souhaite synthétiser les données

Colonne 10 à 69 -> dates (par mois), dé début 2012 à fin 2016.

Le problème est que suivant mon programme actuel, il faut minimum 15 minutes pour chaque run.

Je cherche à optimiser ce temps, peut-être par l'utilisation d'une autre fonction?

Voici mon code actuel:

n = 2

'lecture ligne à ligne des références sur le fichier à analyser'

While Workbooks(monfichier).Sheets(1).Range("A" & n) <> ""

y = 2

'lecture ligne à ligne des références sur le fichier à remplir'

While ThisWorkbook.Sheets("Synthèse").Range("A" & y) <> ""

'Si référence est la même début du traitement de la ligne de besoin'

If ThisWorkbook.Sheets("Synthèse").Range("A" & y).Value = Workbooks(monfichier).Sheets(1).Range("A" & n).Value Then

'Comparaison de la date du besoin avec l'échelle de temps mois par mois pour ranger correctement'

For t = 10 To 69

If Int(CDate(Workbooks(monfichier).Sheets(1).Range("E" & n).Value)) >= Int(CDate(ThisWorkbook.Sheets("Synthèse").Cells(1, t).Value)) Then

If Int(CDate(Workbooks(monfichier).Sheets(1).Range("E" & n).Value)) < Int(CDate(ThisWorkbook.Sheets("Synthèse").Cells(1, (t + 1)).Value)) Then

ThisWorkbook.Sheets("Synthèse").Cells(y, t).Value = ThisWorkbook.Sheets("Synthèse").Cells(y, t).Value + Workbooks(monfichier).Sheets(1).Range("G" & n).Value

'Ici complétude de données tierces mais qui est redondante car j'écrase les données à chaque fois que je lis la même référence, comment le faire qu'une fois?'

If Workbooks(monfichier).Sheets(1).Range("J" & n).Value = "920" Then

ThisWorkbook.Sheets("Synthèse").Cells(y, 3).Value = Workbooks(monfichier).Sheets(1).Range("K" & n).Value

ThisWorkbook.Sheets("Synthèse").Cells(y, 4).Value = Workbooks(monfichier).Sheets(1).Range("I" & n).Value

ElseIf Workbooks(monfichier).Sheets(1).Range("J" & n).Value = "921" Then

ThisWorkbook.Sheets("Synthèse").Cells(y, 5).Value = Workbooks(monfichier).Sheets(1).Range("K" & n).Value

ThisWorkbook.Sheets("Synthèse").Cells(y, 6).Value = Workbooks(monfichier).Sheets(1).Range("I" & n).Value

End If

ThisWorkbook.Sheets("Synthèse").Cells(y, 7).Value = Workbooks(monfichier).Sheets(1).Range("T" & n).Value

ThisWorkbook.Sheets("Synthèse").Cells(y, 8).Value = Workbooks(monfichier).Sheets(1).Range("O" & n).Value

'Date extraction'

ThisWorkbook.Sheets("Synthèse").Cells(y, 2).Value = MyString

ThisWorkbook.Sheets("Synthèse").Cells(y, 2).NumberFormat = "dd/mm/yyyy"

End If

End If

Next t

y = y + 1

Else: y = y + 1

End If

Wend

n = n + 1

Wend

Voilà, j'espère avoir été clair.

Merci d'avance de toute miste d'amélioration qui pourra m'être apporté.

Bon week-end.

bonjour

ne serai-il pas possible de travailler sans VBA, mais avec le menu Données (tri, filtre, sous-totaux, tableau croisés) ?

Bonjour et

Tes explications et ton code ne me permettent pas de comprendre exactement ce que tu veux faire.

Éventuellement dépose..

Fichier analysé: --> Un classeur avec une 50aine de lignes

Fichier à compléter: --> Un classeur avec quelque lignes non mise à jour et la macro.

Sans donnée confidentielle bien entendu.

A+

Bonjour et merci pour vos premiers retours,

Je joins le fichier exemple et le fichier de données raccourci.

22exemple2.xlsm (42.23 Ko)

Re,

Pensez-vous qu'avec la méthode find cette recherche serait plus rapide?

Bonne soirée,

Bonsoir,

Pensez-vous qu'avec la méthode find cette recherche serait plus rapide?

Certes.

Pour le reste beaucoup trop de champs sortis ex-nihilo sur le fichier export pour qu'on puisse comprendre qcq chose...

eric

Re, bonsoir Eric,

De plus plein d'incohérences dans le code Il compare les colonnes A des 2 classeurs alors qu'elles sont totalement différentes dans le format. Et d'autre encore.. J'ai abandonné.

A+

Bonjour,

Un énorme "Désolé" en particulier pour eriiic & lermite qui ont pris du temps a essayer de comprendre les fichiers.

En vérifiant ces fichiers je me suis aperçu que le fichier contenant les données de base "PortofolioOrdersDataGridDetail.xls" était tronqué.

Je viens de corriger le fichier et j'ai édité le précédent message.

Au cas ou, le voici une nouvelle fois:

Encore désolé, merci de votre aide.

Bonjour,

J'ai renoncé à me prendre la tête à faire le lien entre les champs qui changent de nom d'une feuille sur l'autre.

La feuille avec les données doit être active lors du lancement de la macro.

J'ai pris la colonne E (?) pour le cumul mensuel.

Il te reste à compléter les autres champs que tu veux voir.

eric

Merci bcp eriiic,

Ton code est très rapide et fonctionne parfaitement.

J'ai bcp appris en l'étudiant puis en l'appliquant à mes applications.

Merci pour ton aide précieuse.

Le but est de lire toutes les données d'un coup et travailler en mémoire. C'est beaucoup plus rapide que de travailler sur la feuille.

eric

Rechercher des sujets similaires à "optmisation import donnees externes"