XL 2013 Copier des données de plusieurs classeurs

Lone-wolf

XLDnaute Barbatruc
Bonsoir à toutes et à tous. J'éspère que vous allez tous bien, malgré cette char...... .

J'ai un souci avec ADODB pour la copie de données de 6 classeurs (pour l'instant). Avant celà, j'ai utilisé Workbook.Open. La macro fonctionne bien, mais le problème c'est que, malgré ScreenUpdating = False, on vois l'ouverture des classeurs.

Voici le code ADO que j'utilise.

VB:
Option Explicit

Sub RequeteClasseursFermes()
    Dim Fichier As String, Chemin As String
    Dim NomFeuille As String, Requete As String
    Dim Rec As Object, Cnn As Object, Lig As Integer

    Chemin = ThisWorkbook.Path & "\Representants\"
    Fichier = Dir(Chemin & "*.xlsx")
    NomFeuille = "Chiffre_Affaire"

    Set Cnn = CreateObject("ADODB.Connection")
    Cnn.Provider = "MSDASQL"

    Cnn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
             "DBQ=" & Fichier & "; ReadOnly=False;"

    Do While Fichier <> ""
        Requete = "SELECT * FROM [" & NomFeuille & "]"

        Set Rec = CreateObject("ADODB.Recordset")
        Set Rec = Cnn.Execute(Requete)
        Rec.Open Requete, Cnn, 3

        Lig = Range("a" & Rows.Count).End(xlUp).Row + 1
        Range("a" & Lig).CopyFromRecordset Rec

        Fichier = Dir
    Loop
    Cnn.Close
    Set Cnn = Nothing

End Sub

Note: ces copies doivent-être faites à la suite et il faut utiliser Classeur1.
Comme les lignes sont variables, avec ADO, je ne sais pas comment il faut faire.

Pour ceux qui seraient intêressés, voici le code avec Workbook.Open.

Code:
Option Explicit
    Dim ShCa As Worksheet, fichiers As String, chemin As String
    Dim lig As Integer, Lgn As Integer, col As Integer, i As Integer
    Dim derlig As Integer, k As Integer, Tbl(), Bd, tablo

Sub Consolidation_Donnees()

    Application.ScreenUpdating = False

    chemin = ThisWorkbook.Path & "\Representants\"
    fichiers = Dir(chemin & "*.xls")

    Set ShCa = ThisWorkbook.Sheets("Rapport_CA")

    With ShCa
        .Range("j3, k3").ClearContents
        lig = .Range("a" & Rows.Count).End(xlUp).Row
        .Range("a2:g" & lig).ClearContents
    End With

    col = 0: k = 0: Lgn = 0

    Do While fichiers <> ""
        Workbooks.Open chemin & fichiers

        With ActiveWorkbook
            derlig = .Sheets("Chiffre_Affaire").Range("a" & Rows.Count).End(xlUp).Row
            Bd = .Sheets("Chiffre_Affaire").Range("a2:g" & derlig).Value
        End With


        For i = LBound(Bd) To UBound(Bd)
            If Bd(i, 1) <> vbNullString Then
                Lgn = Lgn + 1: col = col + 1: ReDim Preserve Tbl(1 To UBound(Bd, 2), 1 To col)
                For k = 1 To UBound(Bd, 2): Tbl(k, col) = Bd(i, k): Next k
            End If
        Next i

        If col > 0 Then
            With ShCa
                lig = .Range("a" & Rows.Count).End(xlUp).Row + 1
                .Range("a" & lig).Resize(Lgn, UBound(Bd, 2)) = Application.Transpose(Tbl)
                col = 0: k = 0: Lgn = 0
            End With
        End If

        ActiveWorkbook.Close True
        fichiers = Dir
    Loop

    tablo = [{"Representant", "Client", "Date Com.", "Date Fact.", "DatePaiem.", "Montant HT", "Montant HTTC"}]  'Array

    For i = LBound(tablo) To UBound(tablo)
        ShCa.Cells(1, i) = tablo(i)
    Next i

    With ShCa
        .Range("j3") = "Chiffre d'affaire: "
        .Range("k3") = Application.Sum(.Range(.Cells(2, 7), .Cells(.Rows.Count, 7).End(3)))
        .Range("a2:g900000").Sort .Range("a2"), xlAscending
        .Range("A:G").Columns.AutoFit
    End With

End Sub
 

Pièces jointes

  • Consolidation données.zip
    76.7 KB · Affichages: 7
Dernière édition:

Discussions similaires

Haut Bas