Extraire colonnes d'un fichier Excel en fonction de leur en-tête [Résolu/Fermé]

Signaler
Messages postés
1
Date d'inscription
jeudi 12 décembre 2013
Statut
Membre
Dernière intervention
12 décembre 2013
-
Messages postés
1
Date d'inscription
samedi 29 octobre 2016
Statut
Membre
Dernière intervention
25 octobre 2017
-
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

Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 février 2021
2 573
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
1
Date d'inscription
samedi 29 octobre 2016
Statut
Membre
Dernière intervention
25 octobre 2017

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
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.
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.
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 février 2021
2 573
Mais de rien.
A+
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)