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 sub

Bonjour,

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 Sub

ric

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 Sub

Bonjour à 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

Rechercher des sujets similaires à "ameliorer rapidite macro ouverture fichiers"