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

vba-copier des colonnes d'un fichier xls vers un autre fichier xls - VB/VBA/VBS - Programmation

Marsh Posté le 23-11-2016 à 09:09:58    

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

Reply

Marsh Posté le 23-11-2016 à 09:09:58   

Reply

Marsh Posté le 23-11-2016 à 15:41:17    

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
Reply

Marsh Posté le 23-11-2016 à 16:56:25    

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  
         

Reply

Marsh Posté le 23-11-2016 à 17:52:31    

 
            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 !
 

Reply

Marsh Posté le 24-11-2016 à 09:32:19    

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

Reply

Marsh Posté le 24-11-2016 à 10:55:18    

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

Reply

Marsh Posté le 26-11-2016 à 13:50:14    

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

Reply

Marsh Posté le 26-11-2016 à 14:54:30    

 
             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 …
 

Reply

Marsh Posté le 26-11-2016 à 15:17:24    

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
 
 

Reply

Marsh Posté le 27-11-2016 à 09:24:36    

 
            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 …
 

Reply

Marsh Posté le 27-11-2016 à 09:24:36   

Reply

Marsh Posté le 29-11-2016 à 16:42:44    

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

Reply

Marsh Posté le 29-11-2016 à 18:50:23    

 
            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

 

Reply

Marsh Posté le 29-11-2016 à 21:19:26    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed