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
A voir également:
Copier coller vba excel entre 2 classeurs
Copier coller vba excel entre 2 feuilles - Meilleures réponses
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.
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
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...
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?
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 à :
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.
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 !
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+
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 :)
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...