Extraire colonnes d'un fichier Excel en fonction de leur en-tête
Résolu
Pedritto
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Fred -
Fred -
Bonjour,
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.
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 données d'un fichier excel vers un autre
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
- Extraire une video youtube - Guide
3 réponses
Bonjour,
Voici un exemple :
1- Lire les commentaires,
2- Adapter ce qui doit l'être...
Cordialement,
Franck
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
Cordialement,
Franck
Bonjour,
Je viens d'essayer le code. Il fonctionne parfaitement, merci.
En revanche, j'aurai un question.
Est-il possible de coller les colonnes a un emplacement précis ?
Cordialement.
Je viens d'essayer le code. Il fonctionne parfaitement, merci.
En revanche, j'aurai un question.
Est-il possible de coller les colonnes a un emplacement précis ?
Cordialement.
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
Bonjour, même plusieurs années après cela sert :)
Simplement un grand merci!