Macro excel vba et copier coller entre classeur [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
16 avril 2013
-
Messages postés
4
Date d'inscription
mercredi 9 octobre 2013
Statut
Membre
Dernière intervention
20 octobre 2013
-
Bonjour,

Vaut mieux un qui sait que 10 qui cherche...

Quelles sont les lignes de code que je dois mettre dans ma macro excel pour résoudre le problème suivant.

J'ai 52 classeurs excel (dans un même dossier) dans lesquels le contenu d'environ 10 cellules m'intéresse. Ces cellules sont dans une même feuille, à la meme ligne et meme colonne dans les 52 classeurs. Les cellules ne sont pas contiguës.

Je souhaiterai copier/coller tout ça dans un classeur final indépendant déjà créé. Avec 52 colonnes (1 pour chaque classeur) de 10 lignes (une pour chaque cellule).


=> Idée directrice de procédure contestable et à traduire VBA

0) Créer ma macro depuis mon classeur final avec comme étapes:
1) Lancer une boucle sur tous les classeurs du dossier (spécifier l'adresse du dossier)
Dans la boucle:
2) Ouvri le premier excel
3)copier coller les 10 cellules dans une même colonne (vierge) du classeur en question dans l'ordre voulu
4)copier coller cette colonne dans sa colonne de destination dans le classeur final
5)fermer l'excel
6)Passer au suivant

Autant l'étape 3 à l'intérieur d'un même fichier je vois comment faire mais la gestion des passages d'un classeur à l'autre, je n'ai pas le niveau...

Entre les Workbook, workbookS, Activate, Open, For each next, la fonction Enregistrer une macro et ne connaissant pas vraiment la syntaxe vba... je galère!

En vous remerciant,

Thomas

7 réponses

Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 508
Alors,
- Créées toi un nouveau classeur Excel
- places y, dans un module, la macro ci-dessous,
- Enregistres ton classeur sous Recap.xslm (classeur excel prenant en charge les macros)
- Assures toi bien que ton classeur Recap.xslm contient bien deux feuilles (minimum) appelées Feuil1 et Feuil2
- testes...

Code :
Option Explicit

Sub Import()
Dim objShell As Object, objFolder As Object
Dim Chemin As String, fichier As String
Dim Colonne As Byte

    'ouverture de la fenêtre de choix du répertoire
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
'Si l'utilisateur annule sans choisir
If objFolder Is Nothing Then
    'message
    MsgBox "Abandon opérateur", vbCritical, "Annulation"
Else 'sinon
    'Chemin = répertoire choisi
    Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
    'Choix du 1er fichier
    fichier = Dir(Chemin & "*.xls*")
    'Colonne = n° de colonne ou on va coller les données
        'pour commencer colonne A, laisser à 0, pour commencer colonne B remplacer 0 par 1 etc...
    Colonne = 0
    'on boucle sur tous les fichiers excel du répertoire choisi
    Do While Len(fichier) > 0
        Colonne = Colonne + 1
        If fichier <> ThisWorkbook.Name Then
            'attribue un nom dans le classeur, se référant à la plage à importer : B2:I18
            ThisWorkbook.Names.Add "Plage", RefersTo:="='" & Chemin & "[" & fichier & "]fiche site'!$B$2:$I$18"
            With Sheets("Feuil2")
                ' "Importe les données" grâce au nom donné ci-dessus
                .[B2:I18] = "=Plage"
                .[B3:B10].Copy 'Copie B3:B10
            End With
            With Sheets("Feuil1")
                .Cells(1, Colonne).PasteSpecial xlPasteValues 'Colle B3:B10
            End With
            With Sheets("Feuil2")
                .[B16].Copy 'Copie B16
            End With
            With Sheets("Feuil1")
               .Cells(9, Colonne).PasteSpecial xlPasteValues 'Colle B16
            End With
            With Sheets("Feuil2")
                .[B18].Copy 'copie B18
            End With
            With Sheets("Feuil1")
               .Cells(10, Colonne).PasteSpecial xlPasteValues 'Colle B18
            End With
            With Sheets("Feuil2")
                .[G2].Copy 'Copie G2
            End With
            With Sheets("Feuil1")
               .Cells(11, Colonne).PasteSpecial xlPasteValues 'Colle G2
            End With
            With Sheets("Feuil2")
                .[I2].Copy  'Copie I2
            End With
            With Sheets("Feuil1")
               .Cells(12, Colonne).PasteSpecial xlPasteValues 'Colle I2
            End With
            With Sheets("Feuil2")
                .[G3].Copy 'Copie G3
            End With
            With Sheets("Feuil1")
               .Cells(13, Colonne).PasteSpecial xlPasteValues 'Colle G3
            End With
            With Sheets("Feuil2")
                .[I3].Copy  'Copie I3
            End With
            With Sheets("Feuil1")
               .Cells(14, Colonne).PasteSpecial xlPasteValues 'Colle I3
            End With
        End If
        fichier = Dir()
    Loop
End If
End Sub


Il existe d'autres manières de procéder qui pourraient, notamment, accélérer le processus.
Revient donc nous dire si ceci te convient.
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Bonjour, je viens de découvrir ce qu'est une macro, et en fouillant sur le web, j'ai trouvé votre exemple que je cherche a adapter mais je n'entrave rien en vba..ce que je souhaite faire c'est dans un fichier excel (tout joli tout beau) récupérer les valeurs de la colonne B du fichier 1 et les valeurs des colonnes A,B,C,D,E,F,G,H,,K,L du fichier 2 et les coller dans le fichier Excel (tout joli tout beau) de ce que j'ai compris il y aurais donc 2 boucles une pour chaque fichier....d'autre part ayant copier/collé le code dans l'éditeur ,puis-je etre assuré que ce qui est en bleu est la condition,en noir la commande et en vert le commentaire....Merci d'avance pour votre aide, ça m'éviterais de fastidieux copier-coller
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 508
Bonjour Ledave,
Chaque fichier excel étant unique, je vous recommande de créer votre propre sujet et d'y exposer clairement votre problème. Quitte à copier-coller mon code...
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 508
Bonjour,

Les cellules B3 B4 B5 B6 B7 B8 B9 B10 B16 B18 G2 I2 G3 I3 à extraire sont elles toujours dans la même feuille? Si oui quel est son nom? Si non, comment puis je différencier cette feuille des autres?
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 508
Bonjour,

L'ordre des colonnes est il important?
Si oui, y a t'il une ligne d'entêtes? que comporte t'elle?
Messages postés
7
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
16 avril 2013

Bonjour,

Les colonnes doivent s'enchainer dans l'ordre des fichiers.
L'entete de chaque colonne est un "texte" qui fait parti du contenu d'une des cellules à extraire. En gros le contenu des cellules importe peu. C'est un collage special de "valeur" qui m'interesse, il n' y a pas de formule, pas de mise en forme particuliere.

En gros voici une base de travail commune.

J'ai un dossier avec des classeurs : Wb1, Wb2 , ... , Wb52

Dans chaque classeur Wbi, j'ai les cellules B3 B4 B5 B6 B7 B8 B9 B10 B16 B18 G2 I2 G3 I3 à extraire et à mettre dans un excel général qui ressemblera à :

A B C ...
(Wb1) (Wb2) (Wb3) ...

B3 B3 B3 ...
B4 B4 B4
B5 B5 B5
B6 B6 B6
B7 B7 B7
B8 B8 B8
B9 B9 B9
B10 B10 B10
B16 B16 B16
B18 B18 B18
G2 G2 G2
I2 I2 I2
G3 G3 G3
I3 I3 I3

Sachant donc que la cellule B3 est un chaine de caractere propre à chaque classeur (un résumé de son nom en gros). Le reste est essentiellement des valeurs.

Merci.
Messages postés
7
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
16 avril 2013

Excusez ma présentation en colonne style tableur a été coupée... je pense que ça reste compréhensible sinon dites j'essaierai autre chose!
Messages postés
7
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
16 avril 2013

Les cellules à extraire sont dans la première feuille de chaque classeur Wbi.
Cette feuille s'appelle "fiche site" pour chaque classeur Wbi.
Messages postés
7
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
16 avril 2013

Quel boulot! C'est parfait!
Je m'attendais pas à ce qu'il y ait autant de boucles!

Merci Franck!
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 508
De rien!
Est ce rapide ou pas pour 52 fichiers?
Messages postés
7
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
16 avril 2013

Je dirai 10-15 secondes donc ça va !

En tout cas ce qui est cool c'est que ton code est transposable à d'autre dossier (via la fonction parcourir), juste la partie copier coller à modifier ! c'est beau l'algo ! Merci !
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 508
Ok. Merci de ton retour.
10-15 secondes, on aurait pu faire plus rapide, mais bon, c'est pas la mère à boire et le temps gagné sur tes copié-collé suffit.
Bonne journée
A+
Messages postés
4
Date d'inscription
mercredi 9 octobre 2013
Statut
Membre
Dernière intervention
20 octobre 2013

Bonjour, super votre aide sur le vba !
Pour le code au dessus, je recherche une petite évolution.
Sur cette exemple, on choisit de copier les colonnes de B3 à B10.
Pour ma part, je recherche le code/l'écriture pour choisir de la colonne B3 jusqu'à la colonne vide !
J'ai donc des fichiers qui prendront de B3 à B10 comme d'autres de B3 à B5.
Qui peut m'aider !!!
Merci d'avance et continuez, on apprend grâce à vous :)