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 :

Copier données d'un classeur à un autre (vba) [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 294
    Points : 91
    Points
    91
    Par défaut Copier données d'un classeur à un autre (vba)
    bonjour,

    Je me suis trompé d'endroit où poster ma question, g donc cloturé le précédent et replacé celle-ci dans le bon forum. Sorry

    Je souhaiterais copier des données de plusieurs classeurs (toujours cellule A2:C150) vers un autre classeur mais à la suite les uns des autres.
    J'ai trouvé un bout de code que j'ai un peu adapté :

    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
    Private Sub DL_M02_Click()
     
        Sheets("MOIS-MAAND").Range("J2:L300").ClearContents
        Workbooks.Open Filename:= _
            "\\spvfilebru020.intra.just.fgov.be\Services\ACA\Budget\Dir-Budget\Cel-Bud\#Tabl_MonitoringPersonnel-Tab_MonitoringPersoneel\#DATA_2017\extract_SAP\Janvier_CD.XLSX"
        Range("A2:C200").Select
        Selection.Copy
            'faire attention au nom du fichier xlsm
        Windows("Monitoring-Pers_2017 - BETA_V2-1.xlsm").Activate
        Sheets("MOIS-MAAND").Activate
        Range("J2").Select
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("Janvier_CD.XLSX").Close
        MsgBox ("Données exportées")
        List_M.Show 0
    End Sub
    Cela fonctionne mais je voudrais ajouter les autres classeurs à la suite et faire en sorte que le système sélectionne la première cellule vide avant de coller.


    Voici ce que je cherche à effectuer :

    J'ai 4 classeurs "source" avec des données se trouvant de A2 à C150

    Classeur_1
    Classeur_2
    Classeur_3
    Classeur_4

    J'ai un classeur_5 où je désire copier ces données dans les cellule débutant en J2

    Déroulement : copy/paste données classeur_1, check 1ère cellule vide en colonne J du classeur_5, copy/paste données classeur_2, check.... etc

    Les classeurs 1 à 4 se trouvant dans le même répertoire, y a t il moyen d'indiquer à excel que celui-ci est une constante.

    Merci pour votre aide.

  2. #2
    Membre actif Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Points : 236
    Points
    236
    Par défaut
    Bonsoir,

    Un truc du genre

    Range("J65536").end(xlup).offset(1,0).pastespecial ....
    si xls ou

    Range("J1048576") si xlsx ou slxm...

  3. #3
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 294
    Points : 91
    Points
    91
    Par défaut
    Merci

    je vais essayer cette modification

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En fait on copie des données (plage de cellules) présentes sur une feuille et le classeur contient une ou des feuilles donc une il faudrait savoir s'il n'y a qu'une seule feuille par classeur à copier ou s'il faut copier toutes les feuilles d'un classeur.
    Cependant finalement pour la procédure qui effectue la copie cela n'a aucune espèce d'importance.
    Lorsque l'on programme, il vaut mieux découper chaque tâche.
    La copie des données qui est tout de même une chose importante devrait idéalement placée dans une procédure dédiée à cela (Sub ou Function) avec au moins deux arguments obligatoires la plage source et la plage cible. Un troisième argument optionnel pourrait indiquer si l'on ajoute les données source à la suite des données se trouvant déjà dans la feuille parente des données cible.
    Ce que je vient de décrire est une question
    Pour ce qui concerne, la ou les feuilles des classeurs à copier est une autre question "Comment sélectionner et ouvrir un classeur se trouvant dans répertoire quelconque" et ensuite autre question encore comment sélectionner et copier toutes les feuilles d'un classeur ou une feuilleparticulière.
    Ainsi chaque tâche peut être indépendante des autres et être utilisée dans une même application et être réutilisée dans une autre.

    Cette contribution Regrouper plusieurs feuilles sur une autre. (2003-2010) te donnera peut-être des idées.
    Tu y trouveras une procédure utilisable telle quelle. Il suffit de lui passer les bons arguments.

  5. #5
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 294
    Points : 91
    Points
    91
    Par défaut
    @ Ebrag ==> super cela fonctionne

    @ Philippe Tulliez ==> je ne maîtrise pas assez le VBA pour comprendre les différentes procédures

  6. #6
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 294
    Points : 91
    Points
    91
    Par défaut
    J'ai adapté mon code et cela fonctionne.

    Voici le 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private Sub DL_M01_Click()
     
        Sheets("MOIS-MAAND").Range("D2:F300").ClearContents
        Workbooks.Open Filename:= _
            "\\spvfilebru020.intra.just.fgov.be\Services\ACA\Budget\Dir-Budget\Cel-Bud\#Tabl_MonitoringPersonnel-Tab_MonitoringPersoneel\#DATA_2017\extract_SAP\Janvier_CD.XLSX"
        Range("A2:C200").Select
        Selection.Copy
        ThisWorkbook.Activate
        Sheets("MOIS-MAAND").Activate
        Range("D1048576").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation _
                :=xlNone, SkipBlanks:=False, Transpose:=False
        Call ClearClipboard
        Workbooks.Open Filename:= _
            "\\spvfilebru020.intra.just.fgov.be\Services\ACA\Budget\Dir-Budget\Cel-Bud\#Tabl_MonitoringPersonnel-Tab_MonitoringPersoneel\#DATA_2017\extract_SAP\Janvier_CV.XLSX"
        Range("A2:C200").Select
        Selection.Copy
        ThisWorkbook.Activate
        Sheets("MOIS-MAAND").Activate
        Range("D1048576").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation _
                :=xlNone, SkipBlanks:=False, Transpose:=False
        Call ClearClipboard
        Workbooks.Open Filename:= _
            "\\spvfilebru020.intra.just.fgov.be\Services\ACA\Budget\Dir-Budget\Cel-Bud\#Tabl_MonitoringPersonnel-Tab_MonitoringPersoneel\#DATA_2017\extract_SAP\Janvier_121199_122148_CV.XLSX"
        Range("A2:C200").Select
        Selection.Copy
        ThisWorkbook.Activate
        Sheets("MOIS-MAAND").Activate
        Range("D1048576").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation _
                :=xlNone, SkipBlanks:=False, Transpose:=False
        Call ClearClipboard
        Workbooks.Open Filename:= _
            "\\spvfilebru020.intra.just.fgov.be\Services\ACA\Budget\Dir-Budget\Cel-Bud\#Tabl_MonitoringPersonnel-Tab_MonitoringPersoneel\#DATA_2017\extract_SAP\Janvier_121199_122148_CD.XLSX"
        Range("A2:C200").Select
        Selection.Copy
        ThisWorkbook.Activate
        Sheets("MOIS-MAAND").Activate
        Range("D1048576").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation _
                :=xlNone, SkipBlanks:=False, Transpose:=False
        Call ClearClipboard
        MsgBox ("Données exportées")
        Windows("Janvier_CD.XLSX").Close
        Windows("Janvier_CV.XLSX").Close
        Windows("Janvier_121199_122148_CD.XLSX").Close
        Windows("Janvier_121199_122148_CV.XLSX").Close
        Sheets("MOIS-MAAND").Range("D1").Activate
        List_M.Show 0
     
    End Sub
    Il est attaché à mon bouton relatif au mois de janvier.
    Je me demande, vu que je vais avoir un bouton par mois (pas possible de faire autrement), si il y avait moyen d'optimiser ce code afin de ne pas de devoir faire du copy/paste et adapter les différences
    Celles-ci sont :
    - janvier qui devient février, etc
    - Range("D1048576") : D qui va devenir "J" pour février, "P" pour mars, etc
    - Sheets("MOIS-MAAND").Range("D2:F300").ClearContents : idem qu'au dessus

    De même que le répertoire où se trouve les fichiers .xlsx par mois est identique pour tous.

    Merci pour votre aide.

  7. #7
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 294
    Points : 91
    Points
    91
    Par défaut
    help
    j'ai cherché toute la journée...
    et nada

    Mes connaissances étant limitées, je suis très novice.

    Personne pour m'aider.

  8. #8
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 294
    Points : 91
    Points
    91
    Par défaut
    Merci à tous pour votre aide

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

Discussions similaires

  1. [XL-2010] Copier données d'un classeur à un autre (vba)
    Par rossemma dans le forum Excel
    Réponses: 3
    Dernier message: 14/02/2017, 17h13
  2. Copier coller d'un classeur à l'autre vba
    Par ielharras dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/05/2016, 14h50
  3. Copier données d'un classeur à un autre
    Par simodahar dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/05/2013, 14h03
  4. Copier données d'un classeur à un autre
    Par dams53 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 25/05/2013, 13h48
  5. copier des données d'un classeur à un autre
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2009, 17h08

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