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 :

Compiler données de plusieurs classeurs dans une seule feuille [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Compiler données de plusieurs classeurs dans une seule feuille
    Bonjour à tous,

    Je débute en VBA et aurais besoin d'un peu d'aide pour finaliser/corriger un bout de code qui ne marche pas très bien.

    Voilà mon problème:
    J'ai plusieurs dizaines de fichiers excel à traiter chaque semaine en compilant manuellement les différentes données de chaque fichier dans une feuille unique.
    Tous les fichiers sont dans un même répertoire unique et ont exactement la même structure.
    Pour être précis, aujourd'hui, j'ouvre manuellement chaque fichier et copie toutes les données de l'onglet "Exp" des colonnes B, P, Q, AB, AC à partir de la ligne 2 que je viens coller dans un autre fichier. L'opération est répété pour tous les fichiers contenu dans le répertoire, toutes les données sont collées à la suite des autres dans les colonnes A à E.

    En naviguant un peu sur le site, j'ai pu arriver à un bout de code qui fait le travail mais uniquement en mode run pas à pas. Lorsque je lance la macro en auto, une grande partie des données est perdu.. j'ai l'impression que le PC n'arrive pas à traiter toutes les informations en mode copié/collé..

    Est-ce que quelqu'un aurait une solution à mon problème?
    Merci d'avance

    J'ai copié la macro ci-dessous:

    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
    Sub Importe()
    Dim dossier As Object, Fichier As Object, Chemin As String, Lg As Integer
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Range("A2:E65536").ClearContents
    Chemin = ThisWorkbook.Path
               FName = Dir(Chemin & "\" & "*.xls")
    Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
    For Each Fichier In dossier.Files
     
    NomFichier = Fichier.Name
    If Not Fichier.Name = "IMPORT.xlsm" Then
    Lg = Range("A65536").End(xlUp).Row + 1
    Workbooks.Open Filename:=Chemin & "/" & NomFichier
    On Error Resume Next
     
    With Workbooks(NomFichier)
        .Sheets("recup pidi").Range("C2:C" & Range("A65536").End(xlUp).Row).Copy
        ThisWorkbook.Sheets("Feuil1").Range("A" & Lg).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        .Sheets("recup pidi").Range("P2:Q" & Range("A65536").End(xlUp).Row).Copy
        ThisWorkbook.Sheets("Feuil1").Range("B" & Lg).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        .Sheets("recup pidi").Range("AB2:AC" & Range("A65536").End(xlUp).Row).Copy
        ThisWorkbook.Sheets("Feuil1").Range("D" & Lg).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    .Close
    End With
    End If
    Next
    Application.DisplayAlerts = True
    End Sub

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 102
    Points : 190
    Points
    190
    Par défaut
    Bonjour,

    Le code semble cohérent mais une question me chiffonne...

    Es tu certain que dans chacun des fichiers exploités tu n'a pas de cellule vierge entre ligne 2 et fin de la feuille ?

    Une instruction comme range("A2").end(xldown).select pointe la première cellule vierge située sous A2. Pareil si tu parcours depuis Ax vers le haut avec xlup.

    Vérifie ce point. Celà pourrait expliquer des oublis de données.

    Sinon, peut tu préciser si les données manquantes sont relatives à certains des fichiers à traiter (donc oubliés) ou juste si tous les fichiers sont traités mais qu'il manque certaines données.

    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour ta réponse.
    Alors pour répondre à ta question, dans chacun des fichiers exploité, le but est de copier les données commençant à la cellule 2 jusque cellule x (variable d'un fichier à un autre), le but est d'arrêter la copie à la première cellule vierge.

    J'ai donc apporté une petite modif suite à ta remarque sur l'instruction range("A2").end(xldown) mais il dois y avoir quelque chose qui m'échappe car je n'arrive toujours pas à avoir ce que je veux.

    J'ai attaché 3 fichiers de test à compiler ainsi que le fichier contenant la macro dans lequel les données doivent être copiées.
    J'ai l'impression d'avoir un résultat différent à chaque lancement de la macro..

    Peux-tu y jeter un œil?
    Merci d'avance pour ton aide.

    cordialement,
    Fichiers attachés Fichiers attachés

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 102
    Points : 190
    Points
    190
    Par défaut
    Bonjour,

    D'abors qques remarques sur ton code :

    * Evites des lignes genre application.screeupdating=false (blocage écran) tant que ton code n'est pas débogué ou mets les en commentaire (précédé de ')
    c'est ce qui m'a permis de voir que ta 2e copie ne s'effectuait pas, et pour cause, le pointeur n'est pas sur la bonne feuille...

    * lorsque tu enchaîne plusieurs copies, n'hésite pas à ajouter application.cutcopymode=false (vide le presse-papiers), entre deux copies.

    J'ai apporté qques modifications sur le module qui semble maintenant OK.

    En particulier, le repointage des feuilles source et destination entre chaque copie.

    Et exit For sur ta conditionnelle.

    IMPORT - OK.xlsm

    Voilà. Cordialement.

    Bruno Lemaire lemaire.bruno31@orange.fr, si nécessaire.

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour et merci ton aide précieuse sur ce topic.


    Le module que tu as modifié marche très bien avec les fichiers exemple que j'avais posté.

    Par contre il bug sur le 'paste' de la seconde colonne avec mes fichiers originaux à traiter...


    Dans un premier temps, je ne me suis pas trop attarder sur l'erreur de compilation et l'ai détourné en supprimant les lignes de code pour ne garder que la premiere colonne "C" à traiter:

    Résultat: pas de bug, par contre certaines données sont manquantes (uniquement 167 cellules au lieu de 201)


    Pour verifier quelles étaient les données manquantes, j'ai modifié pour chaque fichier à traiter la première et dernière cellule de la colonne C en "start x" et "end x" (avec x le numero du fichier) afin de pouvoir controller que toutes les données soient bien copiées.

    Résultat: cette fois ci, toutes les données ont été copié soit 201 cellules.


    Apparement le fait de modifier et sauvegarder les fichiers a eu un effet benefique.


    Désolé de mettre encore à contribution mais je m'arrche les cheveux sur ce pb.

    Pour que ce soit plus parlant pour toi, je t'ai envoyé les fichiers originaux qui me posent problem en MP sur ta boite mail (infos sensible).


    Merci pour ton aide,

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 102
    Points : 190
    Points
    190
    Par défaut Suite et fin j'espère
    IMPORT - OK.xlsm

    Bonjour,

    Je ne suis pas sur que tu ais bien tout appliqué dans mes consignes...

    Si tu avais mis en commentaire le screeupdating et exécuté la macro en pas à pas, tu aurai surement remarqué que dans tes fichiers importés, il y a plusieurs feuilles et que la feuille "recup pidi" n'est pas forcément la feuille active à l'ouverture du fichier. Bref en mode d'exécution rapide, Excel ne copie pas la bonne zone.

    Dans ton code, en terme de copier/coller, il faut être très précis sur les feuilles actives d'origine et de destination. Ce qui peut passer en mode "pas à pas" ne passe pas forcément en mode réel... Pourquoi, ce serait trop long à expliquer mais c'est comme çà !

    Je t'ai donc ajouté les lignes suivantes après ouverture du fichier d'import :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Sheets("recup pidi").Select
            Range("P2:p" & Range("P2").End(xlDown).Row).Copy
    Et celà tourne nickel chrome !

    Cordialement.

    Bruno

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci ça marche super!!
    Ca va vraiment me faciliter la vie!!

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

Discussions similaires

  1. [XL-2007] Copier plusieurs feuilles de plusieurs fichier dans une seule feuille
    Par QcSylvanio dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/10/2012, 22h02
  2. [Toutes versions] Macro regroupant plusieurs classeurs dans une seule feuille
    Par lisandjo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/04/2012, 07h52
  3. [SQL2005] Regrouper les données de plusieurs bases dans une seule
    Par oliviera63 dans le forum Développement
    Réponses: 7
    Dernier message: 07/02/2012, 10h40
  4. Insérer des données sur plusieurs lignes dans une seule en SQL
    Par nathantahiti dans le forum Développement
    Réponses: 1
    Dernier message: 03/08/2011, 10h47
  5. Copier les données de plusieurs colonnes dans une nouvelle feuille
    Par lolonico1974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2010, 07h51

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