Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
803 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  vba-copier des colonnes d'un fichier xls vers un autre fichier xls

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

vba-copier des colonnes d'un fichier xls vers un autre fichier xls

n°2292476
didek68
Posté le 23-11-2016 à 09:09:58  profilanswer
 

Bonjour
 
je souhaiterais que ma macro vba  
aille dans le gestionnaire de fichier pour que je puisse choisir un fichier.xls
puis copie certaines colonnes de la feuille "A" (feuille 1)
et les colle dans la feuille "import" (feuille 5) du fichier ouvert  
 
j'ai tenté ce code mais il ne fonctionne pas.
quelqu'un aurait il une idée ,
 
merci
Didek
 
 
 
Sub Import_xls()
 
   Dim Fichier As Variant
   
    Feuil5.Select
Fichier = Application.GetOpenFilename("Fichiers .xls (*.xls),*.xls" )
If Fichier = False Then Exit Sub
rep = MsgBox("Ecrire à la suite sans effacer les données click(OUI)" & vbCr & "Pour Effacer les anciennes données click(NON)", vbExclamation + vbYesNoCancel, "Fichier.TXT" )
If rep = vbCancel Then Exit Sub
 
If rep = vbNo Then [A2:l100000].ClearContents: ligne = 3
If rep = vbYes Then ligne = [A100000].End(3).Row + 1
 
'importer les cellules du fichier export.xls vers la feuille "import" du fichier ouvert
 
'with FICHIER export
     ' copier et coller vers
    ' la colonne B de export vers colonne A de rang_equipe
    ' les colonnes C/D/E/F vers           B/C/D/E
     'la colonne I         verS           F
     ' la colonne L        VERS           G
     ' la colonne P/Q/R    vers           H/I/J
     ' la colonne V/W      vers           K/L
         
         
         
         
 'End with
 
 
  Workbooks(Export.xls).Worksheets(1).Range(Cells(B, 2), Cells(B, 400)).Copy Worksheets(5).Range(A2)
End Sub

mood
Publicité
Posté le 23-11-2016 à 09:09:58  profilanswer
 

n°2292540
patrice337​40
Avec la réponse, c'est facile.
Posté le 23-11-2016 à 15:41:17  profilanswer
 

Bonjour
 

Code :
  1. Fichier = Application.GetOpenFilename("Fichiers .xls (*.xls),*.xls" )

Ce code permet d'attribuer à Fichier le nom choisi.
 
Ensuite il faut ouvrir le fichier :).


---------------
Cordialement, Patrice
n°2292564
didek68
Posté le 23-11-2016 à 16:56:25  profilanswer
 

Bonjour
 
actuellement la macro chercher le fichier et l'ouvre  
mais ne copie et ne  colle pas les infos
 ' copier et coller vers  
    ' la colonne B de export vers colonne A de rang_equipe  
    ' les colonnes C/D/E/F vers           B/C/D/E  
     'la colonne I         verS           F  
     ' la colonne L        VERS           G  
     ' la colonne P/Q/R    vers           H/I/J  
     ' la colonne V/W      vers           K/L  
         

n°2292573
Marc L
Posté le 23-11-2016 à 17:52:31  profilanswer
 

 
            Bonjour,
 
            conformément aux règles de ce forum publier l'état actuel du code (y a pas d'ouverture de classeur dans le truc du post initial !)
            via l'icône dédiée pour du code …
 
            Sinon une solution simple : activer l'Enregistreur de macros puis opérer manuellement : une base de code est livrée sur un plateau !
 

n°2292619
didek68
Posté le 24-11-2016 à 09:32:19  profilanswer
 

Bonjour MArc
 
j'ai mis le code dans c/c++
 
Le  début de La macro fonctionne  
mais la  fin non je ne sais pas programmer pour "copie et collage pas les infos sur 2 fichiers"
 
merci
Didek
 
[cpp][/cpp]  
   
Sub Import_xls()  
 
   Dim Fichier As Variant  
   
    Feuil5.Select  
Fichier = Application.GetOpenFilename("Fichiers .xls (*.xls),*.xls" )  
If Fichier = False Then Exit Sub  
rep = MsgBox("Ecrire à la suite sans effacer les données click(OUI)" & vbCr & "Pour Effacer les anciennes données click(NON)", vbExclamation + vbYesNoCancel, "Fichier.TXT" )  
If rep = vbCancel Then Exit Sub  
 
If rep = vbNo Then [A2:l100000].ClearContents: ligne = 3  
If rep = vbYes Then ligne = [A100000].End(3).Row + 1  
 
'importer les cellules du fichier export.xls vers la feuille "import" du fichier ouvert  
 

Code :
  1. ' FICHIER export
  2.      ' copier certaines colonnes du fichier export.xls et coller vers rang_equipe
  3.     ' la colonne B de export vers colonne A de rang_equipe
  4.     ' les colonnes C/D/E/F vers           B/C/D/E
  5.      'la colonne I         verS           F
  6.      ' la colonne L        VERS           G
  7.      ' la colonne P/Q/R    vers           H/I/J
  8.      ' la colonne V/W      vers           K/L
  9.          
  10. '       
  11.   Workbooks(Export.xls).Worksheets(1).Range(Cells(B, 2), Cells(B, 400)).Copy Worksheets(5).Range(A2)
  12. End Sub

n°2292636
Marc L
Posté le 24-11-2016 à 10:55:18  profilanswer
 

 
 
            Merci de m'indiquer le numéro de la ligne ouvrant le classeur car je ne la vois toujours pas ‼ …
 

n°2292784
didek68
Posté le 26-11-2016 à 13:50:14  profilanswer
 

Marc L a écrit :

 
 
            Merci de m'indiquer le numéro de la ligne ouvrant le classeur car je ne la vois toujours pas ‼ …
 


 
Bonjour Marc
 
est ce le début de la macro que tu souhaitais ?
 
voilà ce que j'ai  (trouvé sur le net)
merci  
 
 

Code :
  1. Sub Import_xls()
  2.    Dim Fichier As Variant
  3.  
  4.     Feuil5.Select
  5. Fichier = Application.GetOpenFilename("Fichiers .xls (*.xls),*.xls" )
  6. If Fichier = False Then Exit Sub
  7. rep = MsgBox("Ecrire à la suite sans effacer les données click(OUI)" & vbCr & "Pour Effacer les anciennes données click(NON)", vbExclamation + vbYesNoCancel, "Fichier.TXT" )
  8. If rep = vbCancel Then Exit Sub
  9. If rep = vbNo Then [A2:l100000].ClearContents: ligne = 3
  10. If rep = vbYes Then ligne = [A100000].End(3).Row + 1

n°2292786
Marc L
Posté le 26-11-2016 à 14:54:30  profilanswer
 

 
             Pourquoi serait-ce si compliqué de publier l'intégralité du code de la procédure ?
 
             En suivant la progression de ton code en mode pas à pas via la touche F8, quel est donc précisément le souci ?
 
             Nulle part j'ai constaté une quelconque ouverture de classeur …
 

n°2292787
didek68
Posté le 26-11-2016 à 15:17:24  profilanswer
 

Bonjour
 
Dans mon 1er message le code apparaissait en entier.
Juqu'à présent la macro du fichier1.xls ouvre le répertoire  
=> puis il faut choisir le fichier2.xls (feuil1) dans lequel se trouvent les données
==> puis les copier
et enfin les coller dans le fichier1  
 
merci
 
 

n°2292812
Marc L
Posté le 27-11-2016 à 09:24:36  profilanswer
 

 
            Par deux fois je pense avoir été clair; alors là il te reste à activer l'Enregistreur de macros puis à opérer manuellement :
            une base de code est livrée sur un plateau ! En comparant avec ton code actuel, cela te permettra de constater ton oubli …
 

mood
Publicité
Posté le 27-11-2016 à 09:24:36  profilanswer
 

n°2292932
didek68
Posté le 29-11-2016 à 16:42:44  profilanswer
 

Bonjour
 
je pense avoir trouvé une solution. :pt1cable:  
Ce n'est peut-être pas la plus rapide, il doit u avoir mieux mais ça fonctionne.
voici le code  
 
Merci
Didek
 
 

Code :
  1. Sub données_fichier_export()
  2. '
  3. ' Importer les données du fichier export vers la feuille import
  4. '
  5. '
  6. Dim Fichier As Variant
  7.     Feuil5.Select
  8. Fichier = Application.GetOpenFilename("Fichiers .xls (*.xls),*.xls" )
  9. If Fichier = False Then Exit Sub
  10. rep = MsgBox("Ecrire à la suite sans effacer les données click(OUI)" & vbCr & "Pour Effacer les anciennes données click(NON)", vbExclamation + vbYesNoCancel, "Fichier.TXT" )
  11. If rep = vbCancel Then Exit Sub
  12. If rep = vbNo Then [A2:l100000].ClearContents: ligne = 3
  13. If rep = vbYes Then ligne = [A100000].End(3).Row + 1
  14.     Workbooks.Open Fichier
  15.    
  16.     Range("B:F,I:I,L:L,P:R,V:W" ).Select
  17.     Selection.Copy
  18.    
  19.     Workbooks("fichier_test.xlsm" ).Sheets("IMPORT" ).Activate
  20.     Range("A1" ).Select
  21.     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  22.         :=False, Transpose:=False
  23.  
  24.     Cells.Select
  25.     Selection.ColumnWidth = 5.43
  26.     Cells.EntireColumn.AutoFit
  27.     Range("A1" ).Select
  28.    
  29.     Call import_vers_base
  30.    
  31.    
  32. End Sub
  33. Sub import_vers_base()
  34. '
  35. ' importer la feuille "import" _vers la feuille base
  36. '
  37. '
  38.      Sheets("IMPORT" ).Select
  39.      Range("A2:L10000" ).Select
  40.     Application.CutCopyMode = False
  41.     Selection.Copy
  42.     Sheets("BASE" ).Select
  43.     Range("A2" ).Select
  44.      ActiveSheet.Paste
  45.    
  46. End Sub

n°2292946
Marc L
Posté le 29-11-2016 à 18:50:23  profilanswer
 

 
            Enfin le fichier est ouvert ! (B-A-BA)
 
            L'Enregistreur de macro est bien pour se mettre sur la voie mais ensuite il faut nettoyer
            car un bon code n'utilise pas de Select à tout va, sans pouvoir tester un exemple à partir du code précédent :
 

Code :
  1. Sub Import()
  2.     Dim Fichier, Ligne&, Rep
  3.        Fichier = Application.GetOpenFilename("Fichiers .xls (*.xls),*.xls" )
  4.     If Fichier = False Then Exit Sub
  5. '' Les lignes suivantes sont en commentaire car la variable Ligne n'est même pas utilisée dans le code !!
  6. '       Rep = MsgBox("Ecrire à la suite sans effacer les données click (OUI)" & vbLf & _
  7.                     "Pour Effacer les anciennes données click (NON)", vbExclamation + vbYesNoCancel, "Fichier.txt" )
  8. '    If Rep = vbCancel Then Exit Sub
  9. '    If Rep = vbNo Then ActiveSheet.UsedRange.Offset(1).ClearContents: Ligne = 3 _
  10.                   Else Ligne = Cells(Rows.Count, 1).End(xlUp)(2).Row
  11.     With ActiveSheet
  12.              .UsedRange.Offset(1).ClearContents
  13.               Workbooks.Open Fichier
  14.               Range("B:F,I:I,L:L,P:R,V:W" ).Copy
  15.              .Cells(1).PasteSpecial xlPasteValues
  16.         With .UsedRange.Columns
  17.              .ColumnWidth = 5.43
  18.              .AutoFit
  19.              .Copy Worksheets("BASE" ).[A2]
  20.         End With
  21.     End With
  22. End Sub

 

n°2292954
didek68
Posté le 29-11-2016 à 21:19:26  profilanswer
 

Bonsoir
 
mais pour nettoyer il faut avoir des connaissances :)  
que je n'ai pas :(
 
merci
Didek


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  vba-copier des colonnes d'un fichier xls vers un autre fichier xls

 

Sujets relatifs
Splitter (découper) un fichier CSV[PYTHON] VBA & Formules Excel vers site web Python
Supprimez le fichier image uploded utilisant le code d'ajaxChoix de configurations a l'ouverture d'un fichier Excel
Lire ou Télécharger un fichier sur un FTP[batch] renommer fichier
[Batch] création du'une tache via fichier .xmlfusions de plusieurs lignes dans différentes colonnes
verrouiller un fichier excel avec une macroAutomatisation fichier excel avec VBA
Plus de sujets relatifs à : vba-copier des colonnes d'un fichier xls vers un autre fichier xls


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR