Je suis un utilisateur relativement expérimenté en Excel (enfin c'est ce que je croyais!) mais complètement débutant en VBA. Je reconnais que ce n'est pas très élégant de vous demander de l'aide sans proposer une solution, mais après avoir cherché des heures des bouts de programme pour chaque étape de la macro dont j'ai besoin, je n'arrive pas à les assembler en quelque chose de cohérent...
J'ai donc besoin de créer une macro activable en cliquant sur un bouton, et permettant:
1. d'ouvrir l'explorateur Windows pour sélectionner un fichier Excel (alternativement, sélectionner ce fichier en fonction d'un nom écrit quelque part à côté du bouton de la macro). Mettons "doc1.xls"
2. Copier certaines colonnes de "doc1.xls" en fonction de leur en-tête (mettons "header 1" et "header 2")
3. les copier dans une autre feuille du fichier d'où est exécutée la macro (mettons "feuille2" du « doc0.xls », la macro étant exécutée depuis "feuille1" du même "doc0.xls"). Mettons que la colonne "header 1" soit copiée en A (avec le fameux "header 1" en A1), et "header 2" en C.
Ces colonnes contiennent beaucoup de données (dans les 500,000 lignes) donc j'espère qu'il est possible de faire quelque chose de relativement rapide.
Merci beaucoup de votre aide,
Pierre.
A voir également:
Extraire des colonnes d'un tableau excel
Extraire des données d'un tableau excel vers un autre tableau - Meilleures réponses
Vba extraire des données d'un tableau excel vers un autre tableau - Meilleures réponses
Voici un exemple :
1- Lire les commentaires,
2- Adapter ce qui doit l'être...
Option Explicit
Sub ImporterColonnes()
Dim Fichier, WbkCopy As Workbook, WbkColle As Workbook
Dim Colonnes(), Col As Integer, Resultat As Variant
'On attribue à la variable WbkColle le fichier actuel (celui qui contient la macro)
Set WbkColle = ThisWorkbook
'A adapter : Nom des entêtes de colonnes à importer
Colonnes = Array("Header 1", "Header 2", "Header 3")
'Sélection du fichier
Fichier = Application.GetOpenFilename("Fichiers Excels, *.xls*")
'En cas de clic sur "ANNULER"
If Fichier <> False Then
'On ouvre le fichier en question
Set WbkCopy = Workbooks.Open(Fichier)
With WbkCopy.Sheets("MACHIN") '==> ADAPTER NOM de la feuille
'Boucle sur toutes les entêtes des colonnes
For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
'teste si l'entête correspond à un des noms des colonnes à copier
Resultat = Application.Match(.Cells(1, Col), Colonnes, 0)
'Si l'entête est trouvée (colonne à copier)
If Not IsError(Resultat) Then
'Copié - Collé ==> ADAPTER NOM de la feuille ou coller ("TRUC" à remplacer)
.Columns(Col).Copy WbkColle.Sheets("TRUC").Cells(1, Cells.Columns.Count).End(xlToLeft).Offset(0, 1)
End If
Next Col
End With
WbkCopy.Close
End If
Set WbkCopy = Nothing
Set WbkColle = Nothing
End Sub
Bonjour,
tout d'abord un grand merci, cela met très utile.
Une question cependant, est il possible de "forcer" l'ordre de recopie des colonnes, dans certaines je souhaiterai la recopie de la valeur et non de la formule (RECHERCHEV etc....)
tout d'abord un grand merci, cela met très utile.
Une question cependant, est il possible de "forcer" l'ordre de recopie des colonnes, dans certaines je souhaiterai la recopie de la valeur et non de la formule (RECHERCHEV etc....)
merci
Fred