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 :

Compilation de données de plusieurs classeurs excel vers un seul


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    lille 2
    Inscrit en
    Juin 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : lille 2

    Informations forums :
    Inscription : Juin 2015
    Messages : 60
    Par défaut Compilation de données de plusieurs classeurs excel vers un seul
    Bonjour à toute la communauté,

    Je sais que le sujet à déjà était traité à plusieurs reprises mais vu que les dates sont assez anciennes, j'ai peur que personne ne visite le ou les forum qui le traitent.

    Je ne demande pas qu'on me construise une macro, mais simplement qu'on me fournisse une petite correction pour que la mienne fonctionne.

    Je vous explique : Il s'agit d'une macro plutôt simple dans l'esprit ; dans un fichier déterminé (chemin déterminé par la macro) il existe plusieurs classeur excel au format de nom identique et dont la constitution (contenu) est également identique. Dans un autre fichier existe un classeur excel qui consolidera tous les autres.

    Le but étant d'aller chercher les données d'un tableau d'une feuille contenue dans chaque classeur excel (nom de feuille est identique, format du tableau identique) et de compiler ces données à la suite dans un tableau du classeur consolidation (tableau toujours au même format).

    voilà mon code

    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
     
     
    Sub Compilation()
     
    Dim Fichier As String
    Dim Chemin As String
    Dim ClasseurSource As Workbook
    Dim valeur1 As String
    Dim MonTableau As Variant
     
    Application.DisplayAlerts = False 'Evite les messages d'Excel
    Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts
     
    valeur1 = Sheets("Base").Range("D2").Value
    Chemin = "J:\Rom France\France\WPP\" & valeur1 'Chemin du répertoire contenant les fichiers
    Fichier = Dir(Chemin & "*.xls*")
     
    Do While Fichier <> ""
        Set ClasseurSource = Workbooks.Open(Chemin & Fichier)
        MonTableau = ClasseurSource.Worksheets("Masterfile-valeurs").Range("Tableau5")
     
        ThisWorkbook.Worksheets("Base").Range ("Conso")
        derlig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
     
     Range("derlig+1") = MonTableau
     
     ClasseurSource.Close
     Fichier = Dir
    Loop
     
    Application.EnableEvents = True
    Application.DisplayAlerts = True
     
    End Sub
    J'ai pour ce faire essayé d'utiliser des fonctions déjà présente dans mes classeurs et tenté d'obtenir le bon algorithme. Malheureusement, je pense que ma formule coince à partir de thisworkbook.worksheets("base")

    Si une âme charitable pouvait m'éclairer ma lanterne pour continuer d'avancer, je lui en serai reconnaissant ^^.

    Par avance merci pour votre contribution et votre disponibilité à tous et à toutes

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    [QUOTE=med_mugen;8511848]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.DisplayAlerts = False 'Evite les messages d'Excel
    Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts
    Ca, c'est à éviter (ou à placer en remarque) en phase de développement.
    Ca masque d'éventuels problèmes et évite de les comprendre et de les résoudre.
    En plus, si ton programme plante au milieu, il ne remettra pas ces options à True vu qu'il n'atteindra pas les instructions qui le font.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ThisWorkbook.Worksheets("Base").Range ("Conso")
    Le problème, c'est que cette ligne ne fait... rien.
    Et comme tu a demander que les alertes soient virées (voir ma remarque précédente), VBA ne te signale même pas le problème.
    Il faudrait au moins mettre un Select.
    Que souhaitais-tu que fasse cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        derlig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Il y a plus simple pour trouver le dernière ligne utilisée.
    La plupart du temps, on utilise un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Rows.Count,XX).End(xlUp).Row
    En remplaçant XX par le numéro de la colonne ayant le plus de chance d'avoir ses cellules remplies.

    Mais tu peux aussi le faire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("derlig+1") = MonTableau
    Pas de "" pour utiliser une variable. Les "" sont pour les chaines de caractères.
    Tu oublies de préciser la colonne de ton Range.

    Il y a peut-être d'autres erreurs mais tu peux déjà corriger celles-ci.

  3. #3
    Membre averti
    Homme Profil pro
    lille 2
    Inscrit en
    Juin 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : lille 2

    Informations forums :
    Inscription : Juin 2015
    Messages : 60
    Par défaut Ravi de correspondre à nouveau avec vous Menhir
    Je vais tenter de répondre par étape à vos interrogations et en parallèle je vais prendre vos remarques en compte pour corriger cette macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ThisWorkbook.Worksheets("Base").Range ("Conso")
    en fait je cherchais en écrivant cela à sélectionner le tableau "conso" dans la feuille "base" du classeur sur lequel je travaille. (pour ensuite utiliser l'action derlig + 1 pour atteindre la première ligne vide du tableau.

    En ce qui concerne votre remarque sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("derlig+1") = MonTableau
    Vous avez du certainement comprendre que MonTableau me permet de copier mes cellules et de les apporter vers une autre plage. Dans un ancien code comportant cette variable j'avais été bloqué car j'avais collé cette plage non pas sur autre plage mais sur une colonne du tableau destination (ex : tableau n°3[store] qui était la première colonne du tableau. Du coup j'ai retiré le [store] et ma formule a fonctionné.

    Ici je voulais faire pareille avec le tableau [Conso] mais à partir de la première ligne vide, d'où
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("derlig+1") = MonTableau

    Mais lorsque vous dites que je dois associer une colonne à ce range, si je note
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells(derlig+1,1) = MonTableau
    ça peut aller vous pensez ?

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par med_mugen Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ThisWorkbook.Worksheets("Base").Range ("Conso")
    en fait je cherchais en écrivant cela à sélectionner le tableau "conso" dans la feuille "base" du classeur sur lequel je travaille. (pour ensuite utiliser l'action derlig + 1 pour atteindre la première ligne vide du tableau.
    Dans ce cas, il te manque un Select.

    Mais lorsque vous dites que je dois associer une colonne à ce range, si je note
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells(derlig+1,1) = MonTableau
    ça peut aller vous pensez ?
    Je ne sais pas trop. Passer par un tableau de variables n'est pas du tout ma façon de travailler pour copier des données.
    Il me semble beaucoup plus simple de passer par une simple copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ClasseurSource.Worksheets("Masterfile-valeurs").Range("Tableau5").Copy
    ThisWorkbook.Worksheets("Base").Cells(Rows.Count,1).End(xlUp).Offset(1,0).PasteSpecial(xlPasteValues)

  5. #5
    Membre averti
    Homme Profil pro
    lille 2
    Inscrit en
    Juin 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : lille 2

    Informations forums :
    Inscription : Juin 2015
    Messages : 60
    Par défaut étrange
    Je ne sais pas si c'est à cause du nom de la macro (compilation) mais j'ai effectué les modif, mis en commentaires les lignes de codes empêchant les messages d'alertes, et pourtant lorsque je clique sur le bouton auquel j'ai associé la macro rien ne se passe, même pas un message d'erreur.. vous comprenez quelque chose ?

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par med_mugen Voir le message
    mis en commentaires les lignes de codes empêchant les messages d'alertes
    Dans la mesure où ces options ont été passées à False puis que la macro a planté avant d'atteindre leur passage à True, elles ont du resté dans cet état et ce n'est pas les mettre en commentaire qui les fera passer à True.

    lorsque je clique sur le bouton auquel j'ai associé la macro rien ne se passe, même pas un message d'erreur.. vous comprenez quelque chose ?
    Sans savoir où en est ton code, je ne vois pas comment il serait possible de trouver ce qui pose problème.

  7. #7
    Membre averti
    Homme Profil pro
    lille 2
    Inscrit en
    Juin 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : lille 2

    Informations forums :
    Inscription : Juin 2015
    Messages : 60
    Par défaut
    malheureusement je ne sais pas pourquoi mais ca ne fonctionne pas, je n'ai même pas de message d'erreur lorsque je l'actionne. Petite information supplémentaire il existe déjà une macro rattaché à la feuille qui change de couleur les lignes du tableau à chaque changement de n°référence. Y a t il conflit entre ces deux macros qui empêcherait la nouvelle de fonctionner ?

    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
    Sub Compilation()
     
    Dim Fichier As String
    Dim Chemin As String
    Dim ClasseurSource As Workbook
    Dim valeur1 As String
     
    valeur1 = Sheets("Base").Range("D2").Value
    Chemin = "J:\Rom France\France\WPP\" & valeur1 'Chemin du répertoire contenant les fichiers
    Fichier = Dir(Chemin & "*.xls*")
     
    Do While Fichier <> ""
        Set ClasseurSource = Workbooks.Open(Chemin & Fichier)
     
        ClasseurSource.Worksheets("Masterfile-valeurs").Range("Tableau5").Copy
     
        ThisWorkbook.Worksheets("Base").Range("Conso").Select
        ThisWorkbook.Worksheets("Base").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
     
     ClasseurSource.Close
     Fichier = Dir
    Loop
     
    End Sub
    Voulez vous que je vous envoie un exemple ?

    Après sur d'autres site j'ai vu souvent dans l'annonce des variable la mention ADOB. après quelques recherches, j'ai cru comprendre qu'on parle de Access VBA. De quoi parle t on exactement ?

Discussions similaires

  1. Réponses: 23
    Dernier message: 21/12/2015, 16h18
  2. Exporter des données des plusieurs fichiers Excel vers un seul fichier Excel
    Par pkp85pkp dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 09/12/2014, 15h20
  3. [XL-2007] comment migrer des données entre plusieurs classeurs excel
    Par Iichham dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/06/2011, 14h28
  4. Ouvrir plusieurs classeurs Excel dans un seul processus
    Par zoopsys dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/12/2008, 17h27
  5. Réponses: 3
    Dernier message: 24/05/2008, 18h56

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