Macro excel vba et copier coller entre classeur

Résolu
tom_3031 Messages postés 8 Statut Membre -  
regys1 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Ledave
       
      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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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