Extraire colonnes d'un fichier Excel en fonction de leur en-tête

Résolu/Fermé
Pedritto Messages postés 1 Date d'inscription jeudi 12 décembre 2013 Statut Membre Dernière intervention 12 décembre 2013 - 12 déc. 2013 à 05:14
 Fred - 27 janv. 2023 à 17:57
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.
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 12/12/2013 à 08:54
Bonjour,

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
10
fredroq Messages postés 1 Date d'inscription samedi 29 octobre 2016 Statut Membre Dernière intervention 25 octobre 2017
25 oct. 2017 à 08:55
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....)

merci
Fred
0

Bonjour, même plusieurs années après cela sert :)

Simplement un grand merci!

0
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.
1
Super, merci beaucoup, avec quelques petite manip ca marche parfaitement!

Merci aussi pour les commentaires, ca fait plaisir de comprendre comment ca marche.

Bien cordialement,

Pierre.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
13 déc. 2013 à 08:20
Mais de rien.
A+
0
j'ai essayé ce code mais ca n'a pas marché ,on me dit qu'il y des erreur sur ca Set WbkCopy = Workbooks.Open(Fichier)
0