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 :

Optimisation de macro : Rapatrier plusieurs fichiers excel sur un seul [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Optimisation de macro : Rapatrier plusieurs fichiers excel sur un seul
    Bonjour à toutes et à tous !

    Ce n'est pas faute d’avoir fouillé partout, mais je n'arrive pas à optimiser mon code... il est fonctionnel mais très lent avec les 12 "répétitions".

    L'idée est de rapatrier les données contenues dans plusieurs fichiers ayant 2 onglets vers un seul et unique fichier disposant de ces mêmes 2 onglets structurellement identiques..

    Le code joint, piqué chez vous, m'a permis d'avancer à grands pas, mais je doute de sa "propreté"...
    Je crois qu'il me faut créer un module pour la requête... Me trompe-je ?

    J'ai également constaté que lorsqu'un fichier est ouvert par un utilisateur, le fichier s'ouvre (un post à déjà été fait à ce propos, mais je n'ai pas compris la résolution..)

    D'autant que je souhaiterai, dans la mesure du possible, rapatrier à tout le moins les couleurs des cellules.... => très accessoire !

    Voici l'usine (néanmoins réduite puisque j'ai une douzaine de fichiers, mais l'esprit est celui ci) :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Sub Bouton3_Cliquer()
        Dim Cn As ADODB.Connection
        Dim FichierDAA As String
        Dim FichierDTEST As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        'Définit le classeur fermé servant de base de données
        FichierDAA = "\\services.ddn\partages\COMMUN_RESSOURCES_DGSol\DAA\Ressources humaines effectifs\Suivi des vacances et des recrutements\DAA.xlsm"
        FichierDTEST = "\\services.ddn\partages\COMMUN_RESSOURCES_DGSol\DTEST\Ressources humaines effectifs\Suivi des vacances et des recrutements\DTEST.xlsm"
     
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Postes vacants"
     
        Set Cn = New ADODB.Connection
     
        '--- Connexion ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & FichierDAA & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
     
        End With
        '-----------------
     
        'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        'Ecrit le résultat de la requête
    With Feuil1
        .Cells(.Rows.Count, "A").End(xlUp)(2).CopyFromRecordset Rst
    End With
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
     
    ' 2e requete
        Set Cn = New ADODB.Connection
     
        '--- Connexion ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & FichierDTEST & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
     
        End With
        '-----------------
     
        texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
    With Feuil1
        .Cells(.Rows.Count, "A").End(xlUp)(2).CopyFromRecordset Rst
    End With
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Merci de l'éclairage que vous pourrez apporter et surtout des commentaires que vous laissez partout qui permettent d'en apprendre beaucoup !!!

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, est-ce que Fusion de fichiers Excel XLS (2) peut t'aider ? Il y a un squelette de mode d'emploi ici. L'approche n'est absolument pas la même.

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Salut,

    Merci de ton retour rapide et désolé de mon mutisme : bcp de boulot sur une autre thématique !

    Bref, l'outil que tu as développé est super mais ne correspond en effet pas à mon besoin... (cela dit je le garde sous le coude pour d'autres choses ;-)

    L'idée est plus fourbe, et j'ai tenté d'essayer de croire que je pourrais comprendre ton code mais...

    En fait, ma macro fonctionne, j'ai juste besoin d'ajouter 10 fichiers fixes comme les 2 exemples insérés dans le code. ET pour avoir testé ça prend un temps fou !

    Je me suis donc dis que lister les chemins sur une feuille et aller les chercher était pas mal mais je doute de la nouvelle efficacité que cela procurera...

    N'y a t'il pas une notion de module à créer pour opérer la requête, ou les fichiers à aller chercher, ou créer un module par fichier, ou... ?

    En tout cas merci pour ton retour !!

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, comme je dis toujours : pas de bras pas de chocolat, tu as tous les éléments pour tester et tu ne veux pas le faire.

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

Discussions similaires

  1. Compilation des plusieurs fichiers Excel sur une seule feuille
    Par Hamouda7542 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 17/01/2018, 17h39
  2. [XL-2003] Créer une macro pour plusieurs fichiers excel
    Par bocki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2009, 22h53
  3. Excécuter Macro dans plusieurs fichiers Excel
    Par mattwarend dans le forum Macros et VBA Excel
    Réponses: 26
    Dernier message: 24/10/2008, 12h06
  4. Réponses: 10
    Dernier message: 28/08/2008, 09h15
  5. Réponses: 9
    Dernier message: 10/05/2007, 10h56

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