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.