Macro excel vba et copier coller entre classeur

Résolu/Fermé
tom_3031 Messages postés 7 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 16 avril 2013 - 10 avril 2013 à 17:50
regys1 Messages postés 4 Date d'inscription mercredi 9 octobre 2013 Statut Membre Dernière intervention 20 octobre 2013 - 9 oct. 2013 à 23:32
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
15 avril 2013 à 10:08
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
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
18 juin 2013 à 14:53
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...
0