Bonjour à tous,
J'ai un gros problème de lenteur de macro. Si vous pouviez m'aider ce serait pas mal ;-)
Explication:
Dans une première feuille j'ai, par exemple, 10 lignes.
La macro va supprimer les lignes existantes (sauf la première) dans une deuxième feuille puis copier - insérer la ligne copiée aprés la première ligne 9 fois (car 10 lignes dans la première feuille) avec cette macro:
Dim nb, i, ancienb As Integer
Dim ligne As String
nb = Cells(16, 4).Value
ancienb = Cells(17, 4).Value
For i = 1 To (ancienb - 2)
Rows("33:33").Select
Selection.Delete Shift:=xlUp
Next
For i = 1 To (nb - 2)
Rows("33:33").Select
Selection.Insert Shift:=xlDown
Next
For i = 33 To (33 + nb - 2)
ligne = i & ":" & i
Rows("32:32").Select
Selection.Copy
Rows(ligne).Select
ActiveSheet.Paste
Next
Le problème est que, pour chaque ligne, les calculs des différentes colonnes font références à d'autres fichiers excels (une dizaine à peu près).
4 fichiers différents au total, en utilisant notamment la fonction INDEX. Exemple
INDEX(_NOM1;EQUIV(BF32;_NOM2;0))
_NOM1 et _NOM2 font référence à des colonnes des autres fichiers excels.
En gros la fonction dit: trouve la valeur BF32 dans la colonne _NOM2 du fichier B et donne la valeur correspondante de la colonne _NOM1 dans le fichier A (fichier ou je fais tourner ma macro).
Bref, en gros mon soucis est:
Avec les 4 fichiers fermés, la macro prend une trentaine de secondes.
Avec les 4 fichiers ouverts: 2 secondes.
Avec la macro qui ouvre les fichiers en masqué: une trentaine de seconde:
Dim xlApp As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet
Dim x2App As New Excel.Application
Dim x2Book As New Excel.Workbook
Dim x2Sheet As New Excel.Worksheet
Dim x3App As New Excel.Application
Dim x3Book As New Excel.Workbook
Dim x3Sheet As New Excel.Worksheet
Dim x4App As New Excel.Application
Dim x4Book As New Excel.Workbook
Dim x4Sheet As New Excel.Worksheet
Set xlBook = xlApp.Workbooks.Open("Q:\FICHIERB.xls")
Set x2Book = x2App.Workbooks.Open("Q:\FICHIERC.xls")
Set x3Book = x3App.Workbooks.Open("Q:\FICHIERD.xls")
Set x4Book = x4App.Workbooks.Open("Q:\FICHIERE.xls")
Application.Run "MaMacro"
xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
x2Book.Close
x2App.Quit
Set x2Sheet = Nothing
Set x2Book = Nothing
Set x2App = Nothing
x3Book.Close
x3App.Quit
Set x3Sheet = Nothing
Set x3Book = Nothing
Set x3App = Nothing
x4Book.Close
x4App.Quit
Set x4Sheet = Nothing
Set x4Book = Nothing
Set x4App = Nothing
Avec la macro qui permet d'ouvrir les fichiers et de les afficher: un peu mieux: 20 secondes
Workbooks.Open Filename:="Q:\FICHIERB.xls"
Workbooks.Open Filename:="Q:\FICHIERC.xls"
Workbooks.Open Filename:="Q:\FICHIERD.xls""
Workbooks.Open Filename:="Q:\FICHIERE.xls"
Application.Run "MaMacro"
Workbooks("FICHIERB.xls").Close SaveChanges:=False
Workbooks("FICHIERC.xls").Close SaveChanges:=False
Workbooks("FICHIERD.xls").Close SaveChanges:=False
Workbooks("FICHIERE.xls").Close SaveChanges:=False
La dernière solution n'est pas top car d'autres utilisateurs (ou même moi même) peuvent avoir les fichiers B,C,D ou E ouverts (ce qui implique des fenètres du style: le fichier est déjà ouvert......).
Bref, j'ai plus trop de solution qui me permet d'appliquer ma macro en 2 secondes comme avec les fichiers ouverts.
Si vos lanternes pouvaient m'éclairer.......
PS: Je n'y comprends pas grand chose en macro ni en excel d'ailleurs (je me suis très largement inspiré du travail des autres (oui je sais, c'est vilain) pour faire mon fichier et mes macros (merci à ceux qui s'y connaissent d'ailleurs, ceux de ce forum ou autres) donc soyez indulgent avec vos réponses.
PS2: Les fichiers sont sur un serveur donc à chaque ouverture il doit les télécharger (si ça peut aider)
Merci.
Schlew
J'ai un gros problème de lenteur de macro. Si vous pouviez m'aider ce serait pas mal ;-)
Explication:
Dans une première feuille j'ai, par exemple, 10 lignes.
La macro va supprimer les lignes existantes (sauf la première) dans une deuxième feuille puis copier - insérer la ligne copiée aprés la première ligne 9 fois (car 10 lignes dans la première feuille) avec cette macro:
Dim nb, i, ancienb As Integer
Dim ligne As String
nb = Cells(16, 4).Value
ancienb = Cells(17, 4).Value
For i = 1 To (ancienb - 2)
Rows("33:33").Select
Selection.Delete Shift:=xlUp
Next
For i = 1 To (nb - 2)
Rows("33:33").Select
Selection.Insert Shift:=xlDown
Next
For i = 33 To (33 + nb - 2)
ligne = i & ":" & i
Rows("32:32").Select
Selection.Copy
Rows(ligne).Select
ActiveSheet.Paste
Next
Le problème est que, pour chaque ligne, les calculs des différentes colonnes font références à d'autres fichiers excels (une dizaine à peu près).
4 fichiers différents au total, en utilisant notamment la fonction INDEX. Exemple
INDEX(_NOM1;EQUIV(BF32;_NOM2;0))
_NOM1 et _NOM2 font référence à des colonnes des autres fichiers excels.
En gros la fonction dit: trouve la valeur BF32 dans la colonne _NOM2 du fichier B et donne la valeur correspondante de la colonne _NOM1 dans le fichier A (fichier ou je fais tourner ma macro).
Bref, en gros mon soucis est:
Avec les 4 fichiers fermés, la macro prend une trentaine de secondes.
Avec les 4 fichiers ouverts: 2 secondes.
Avec la macro qui ouvre les fichiers en masqué: une trentaine de seconde:
Dim xlApp As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet
Dim x2App As New Excel.Application
Dim x2Book As New Excel.Workbook
Dim x2Sheet As New Excel.Worksheet
Dim x3App As New Excel.Application
Dim x3Book As New Excel.Workbook
Dim x3Sheet As New Excel.Worksheet
Dim x4App As New Excel.Application
Dim x4Book As New Excel.Workbook
Dim x4Sheet As New Excel.Worksheet
Set xlBook = xlApp.Workbooks.Open("Q:\FICHIERB.xls")
Set x2Book = x2App.Workbooks.Open("Q:\FICHIERC.xls")
Set x3Book = x3App.Workbooks.Open("Q:\FICHIERD.xls")
Set x4Book = x4App.Workbooks.Open("Q:\FICHIERE.xls")
Application.Run "MaMacro"
xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
x2Book.Close
x2App.Quit
Set x2Sheet = Nothing
Set x2Book = Nothing
Set x2App = Nothing
x3Book.Close
x3App.Quit
Set x3Sheet = Nothing
Set x3Book = Nothing
Set x3App = Nothing
x4Book.Close
x4App.Quit
Set x4Sheet = Nothing
Set x4Book = Nothing
Set x4App = Nothing
Avec la macro qui permet d'ouvrir les fichiers et de les afficher: un peu mieux: 20 secondes
Workbooks.Open Filename:="Q:\FICHIERB.xls"
Workbooks.Open Filename:="Q:\FICHIERC.xls"
Workbooks.Open Filename:="Q:\FICHIERD.xls""
Workbooks.Open Filename:="Q:\FICHIERE.xls"
Application.Run "MaMacro"
Workbooks("FICHIERB.xls").Close SaveChanges:=False
Workbooks("FICHIERC.xls").Close SaveChanges:=False
Workbooks("FICHIERD.xls").Close SaveChanges:=False
Workbooks("FICHIERE.xls").Close SaveChanges:=False
La dernière solution n'est pas top car d'autres utilisateurs (ou même moi même) peuvent avoir les fichiers B,C,D ou E ouverts (ce qui implique des fenètres du style: le fichier est déjà ouvert......).
Bref, j'ai plus trop de solution qui me permet d'appliquer ma macro en 2 secondes comme avec les fichiers ouverts.
Si vos lanternes pouvaient m'éclairer.......
PS: Je n'y comprends pas grand chose en macro ni en excel d'ailleurs (je me suis très largement inspiré du travail des autres (oui je sais, c'est vilain) pour faire mon fichier et mes macros (merci à ceux qui s'y connaissent d'ailleurs, ceux de ce forum ou autres) donc soyez indulgent avec vos réponses.
PS2: Les fichiers sont sur un serveur donc à chaque ouverture il doit les télécharger (si ça peut aider)
Merci.
Schlew