IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Consolider une feuille issue de plusieurs fichiers ave SQL [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Par défaut Consolider une feuille issue de plusieurs fichiers ave SQL
    Bonjour à tous,

    Cela fait longtemps que je ne suis pas venu faire appel à votre aide.


    Je cherche à consolider une feuille de plusieurs fichiers Excel d'un répertoire ayant tous la même racine + la date.

    Je préfère sans ouvrir le fichier source.
    J'ai adapté une macro que j'avais déjà utilisée pour lequel il me fallait nommer les noms de chaque fichier source.
    Cette macro fonctionne, j'obtiens un onglet data issu d'un fichier. Mais je ne peux à chaque fois nommer mes 20 fichiers chaque mois.

    dans ma routine, j'utilise

    à partir d'une chaine de connexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$)
    '
    'Microsoft ActiveX Data Object 2.x Library
    
    Dim rsData As ADODB.Recordset
    Dim szConnect As String
    Dim szSQL As String
    Dim Li&, FeuilleDest
    Debug.Print NomFichier$, FeuilleSource$, FeuilleCible$
    
    ' Crée la chaîne de connexion
        szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & NomFichier & ";" & _
            "Extended Properties=Excel 8.0;"
    NomFichier est la variable utilisée pour le nom du fichier source

    pour lire mes champs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    szSQL = "SELECT ALL* FROM [OZ3L$] "
    Comment pouvoir lancer autant de requête sql que de fichier ayant la même racine ?

    Mes routines pour lire les fichiers fermées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TestConso()
    Dim Feui1$, Fich1$, Source1$, Cible$
      Feui1 = Worksheets("PARAMETRE").Range("B2") & "." & Worksheets("PARAMETRE").Range("B3") 'FICHIER à "
     
     
       Fich1 = "C:\EURO IT" & "\" & Feui1
     
      Source1 = Worksheets("PARAMETRE").Range("B5")
      Cible = Worksheets("PARAMETRE").Range("B4")
     
      ConsoDatas Fich1, Source1, Cible
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$)
    'Va chercher dans le classeur NomFichier (sans l'ouvrir) les données
    'de la feuille FeuilleSource et les copie dans la feuille FeuilleCible
    'du classeur actif, à la suite des données (éventuellement) déjà présentes.
    '(La ligne d'entêtes de FeuilleSource n'est pas importée)
    'inspiré de Rob Bovey, mpep
    'nécessite une référence à la librairie
    'Microsoft ActiveX Data Object 2.x Library
    Dim rsData As ADODB.Recordset
    Dim szConnect As String
    Dim szSQL As String
    Dim Li&, FeuilleDest
    Debug.Print NomFichier$, FeuilleSource$, FeuilleCible$
     
        ''' Crée la chaîne de connexion
        szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & NomFichier & ";" & _
            "Extended Properties=Excel 8.0;"
     
        ' La requête est basée sur le nom de la feuille. Ce nom
        ' doit se terminer par un $ et doit être entouré de crochets droits.
        szSQL = "SELECT ALL* FROM [OZ3L$] "
     
     
     
     
        Set rsData = New ADODB.Recordset
        rsData.Open szSQL, szConnect, adOpenForwardOnly, _
            adLockReadOnly, adCmdText
     
        'où envoyer les données :
        Set FeuilleDest = ActiveWorkbook.Sheets(FeuilleCible)
        Li = FeuilleDest.Range("A65536").End(xlUp).Row + 1
        'envoi sur la première ligne vide
        If Not rsData.EOF Then
          FeuilleDest.Range("A" & Li).CopyFromRecordset rsData
        Else
          'si la source était vide...
          MsgBox "Aucun enregistrement renvoyé.", vbCritical
        End If
     
        ''' On nettoie pour finir...
        rsData.Close
        Set rsData = Nothing
     
    End Sub

    Merci de votre aide

    Christian

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Aujourd'hui cela se fait assez simplement sans VBA avec POwerQuery, intégré à Exccel 2016 et +, en add on sur 2013

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Par défaut
    Merci pour votre retour rapide.

    En effet cela semble être une meilleur solution.
    Je vais regardé du côté POwerQuery, sur un ordi avec office 365.

    bonne journée

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Par défaut
    j'ai fait un test cette semaine.
    j'ai obtenu relativement assez facilement la consolidation de plusieurs fichiers.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. imprimer plusieurs plages d'une feuille dans un seul fichier pdf
    Par xica19 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/08/2017, 13h13
  2. [XL-2007] Compiler contenu feuille identique dans plusieurs fichiers vers une seule feuille
    Par julie.b dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/10/2014, 14h33
  3. Créer une feuille récap de plusieurs fichiers excel
    Par babacool dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/07/2006, 19h56
  4. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20
  5. [VBA] exportation vers une feuille précise d'un fichier xls
    Par Christophe93250 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo