XL 2013 Copier des données de plusieurs classeurs

  • Initiateur de la discussion Initiateur de la discussion Lone-wolf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
3
Affichages
599
Réponses
4
Affichages
362
Réponses
2
Affichages
423
Réponses
3
Affichages
537
Retour