Améliorer la rapidité macro - ouverture fichiers
Bonjour,
J'ai un code ci-dessous et j'aimerais en améliorer sa vitesse.
Est-il possible d'aller chercher des données dans d'autres fichiers sans ouvrir les fichiers ?
Dans ma macro que j'ai produit j'ouvre les fichiers Excel mais comme j'en ai beaucoup la macro est très longue à s’exécuter
En vous remerciant pour votre aide
Sub MAJ()
Dim wkA As Workbook, wkB As Workbook
Dim chemin As String, fichier As String
Dim j As Long
Application.ScreenUpdating = False
Dim i
Dim nom As String
Range("A3:A130").Select
Selection.ClearContents
Range("k3:AB130").Select
Selection.ClearContents
i = 1
'--------XXXXXXXX
nom = Dir("S:xxxxxxxxxxxx\*.xlsb")
While nom <> ""
Range("A2").Offset(i, 0).Value = nom
nom = Dir
chemin = "S:xxxxxx"
fichier = Range("A" & i + 2).Value
Workbooks.Open chemin & fichier
Sheets("Données").Activate
Range("AI7:AZ7").Select
Selection.Copy
Windows("Analyses des sondes.xlsm").Activate
Range("k2").Offset(i, 0).Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Workbooks(fichier).Activate
Sheets("Données").Activate
Range("B" & Rows.Count).End(xlUp).Select
Selection.Copy
Windows("Analyses des sondes.xlsm").Activate
Range("b2").Offset(i, 0).Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Workbooks(fichier).Close Saved = False
i = i + 1
Wend
End subBonjour,
Un essai ...
Je n'ai pas testé le code > mais, déjà en enlevant les .sélect > il devrait y avoir amélioration de la rapidité d'exécution ...
Sub MAJ()
Dim wkA As Workbook, wkB As Workbook
Dim chemin As String, fichier As String
Dim j As Long
Dim i
Dim nom As String
Application.ScreenUpdating = False
Range("A3:A130").ClearContents
Range("k3:AB130").ClearContents
i = 1
'--------XXXXXXXX
nom = Dir("S:xxxxxxxxxxxx\*.xlsb")
While nom <> ""
Range("A2").Offset(i, 0).Value = nom
nom = Dir
chemin = "S:xxxxxx"
fichier = Range("A" & i + 2).Value
Workbooks.Open chemin & fichier
Sheets("Données").Activate
Range("AI7:AZ7").Copy
Windows("Analyses des sondes.xlsm").Activate
Range("k2").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Workbooks(fichier).Activate
Sheets("Données").Activate
Range("B" & Rows.Count).End(xlUp).Copy
Windows("Analyses des sondes.xlsm").Activate
Range("b2").Offset(i, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Workbooks(fichier).Close Saved = False
i = i + 1
Wend
End Subric
Bien vu les select, oui c'est mieux déjà merci
Sans ouvrir les fichiers c'est possible ou pas ?
Petite question supplémentaire, ma macro cesse de fonctionner à partir de 100 lignes pourtant je n'ai pas indiqué de limite en terme de ligne : es ce du au while ou au dimension ?
Bonjour,
Vba aime bien savoir ou il est et ou il va !
A méditer.
Sub MAJ()
Dim wkA As Workbook, wkB As Workbook
Dim chemin As String, fichier As String
Dim i As Long, j As Long
Dim nom As String
Application.ScreenUpdating = False
nom = Dir("S:xxxxxxxxxxxx\*.xlsb")
i = 1
Set wkA = ThisWorkbook
With wkA.Worksheets("???")
.Range("A3:A130").ClearContents
.Range("k3:AB130").ClearContents
End With
While nom <> ""
wkA.Worksheets("???").Range("A2").Offset(i, 0).Value = nom
nom = Dir
chemin = "S:xxxxxx"
fichier = wkA.Worksheets("???").Range("A" & i + 2).Value
Set wkB = Workbooks.Open(chemin & fichier)
wkB.Worksheets("Données").Range("AI7:AZ7").Copy
wkA.Worksheets("???").Range("k2").Offset(i, 0).PasteSpecial Paste:=xlPasteValues
wkB.Worksheets("Données").Range("B" & Rows.Count).End(xlUp).Copy
wkA.Worksheets("???").Range("b2").Offset(i, 0).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = 0
Workbooks(fichier).Close False 'Saved = False
i = i + 1
Wend
End SubBonjour à tous ...
Pour l'arrêt à 100 occurrences > je ne sais pas trop sans fichiers pour tester > peut-être déclarer i correctement > Dim i as Integer (si moins de 32 000 lignes) > ou Dim i as Long (si plus) ...
Note : Je vois que Jean-Eric t'a donnée un code plus sympa ...
Oui, c'est possible de lire dans un classeur fermé ...
https://forum.excel-pratique.com/viewtopic.php?f=2&t=130816
http://boisgontierjacques.free.fr/pages_site/ado.htm#CopyFrom
ric
Merci Jean Eric
C'est plus digeste que ma version de base
J'ai 120 fichiers Excel a ouvrir et récupérer les données : ma macro met 17 min ... c'est long mais je pourrais pas faire autrement
Même avec ton code Jean Eric c'est pareil
Le bug des 100 lignes s'est résolu sans que je sache pourquoi
Et trouver un moyen sans ouvrir les fichiers va être compliqué
Tout est parfait pour moi, je vous remercie beaucoup