Importer données classeur fermé AVEC mise en forme
Bonjour,
Je travaille avec deux fichiers (en PJ) :
- un fichier ZALT.xlsx qui est exporté d'un logiciel et qui comporte des données brutes
- un fichier ZALT2.xlsm sur lequel je vais retravailler ces données via plusieurs macros
Mon objectif :
Lancer une macro depuis mon fichier ZALT2 qui va venir copier le corps des données de mon fichier d'extraction (sans la ligne d'en-tête) dans le premier onglet de mon classeur. Particularité : je connais le nombre de colonnes mais pas de lignes.
Ci-dessous, le code de la macro que j'ai crée qui fonctionne pas mal à la différence près que c'est la mise en forme du fichier d'arrivée (ZALT2) qui est conservée. Je veux garder la mise en forme du dossier ZALT.
Donc si vous pouvez m'aider à trouver l'astuce ou à améliorer mon code, je suis prenneur.
Merci bcp !
waxscud
Sub Importer()
Dim Chemin As String, Fichier As String, Fichier2 As String
Chemin = ThisWorkbook.Path & Application.PathSeparator
Fichier = "ZALT.xlsx"
With Workbooks.Open(Chemin & Fichier)
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
.Close savechanges:=False
End With
With ThisWorkbook
Range("A2").Select
ActiveSheet.Paste
End With
End Sub
Bonjour
A tester si cela te convient mieux
Sub Importer()
Dim Chemin As String, Fichier As String, Fichier2 As String
Chemin = ThisWorkbook.Path & Application.PathSeparator
Fichier = "ZALT.xlsx"
Application.ScreenUpdating = False
With Workbooks.Open(Chemin & Fichier)
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
ThisWorkbook.ActiveSheet.Range("A2").PasteSpecial Paste:=xlPasteValues
.Close savechanges:=False
End With
End Sub
Bonjour,
Sans grande conviction, mais un début de réponse.
Cdlt
Option Explicit
Public Sub Importer()
Dim wb As Workbook
Dim Chemin As String, Fichier As String, Fichier2 As String
Dim rng As Range
Set wb = ThisWorkbook
Chemin = ThisWorkbook.Path & Application.PathSeparator
Fichier = "ZALT.xlsx"
With Workbooks.Open(Chemin & Fichier)
Set rng = Worksheets(1).Range("A2").CurrentRegion
rng.Copy
wb.Worksheets(1).PasteSpecial Paste:=xlPasteColumnWidths
wb.Worksheets(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
.Close savechanges:=False
End With
Set wb = Nothing
End Sub
Bonjour Banzai, Jean-Eric,
Tout d'abord, merci de m'avoir répondu.
Banzai, ta solution donne le même résultat que moi c'est à dire qu'il ne prend pas la mise en forme du fichier que l'on va copier mais seulement les valeurs.
Jean-Eric, ta solution semble fonctionner à merveille. Seul hic, son éxécution lance le débogueur :S
Erreur d'éxécution 1004.
La ligne concernée est celle-ci : wb.Worksheets(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Normalement ca aurait été la précédente mais comme je ne veux pas récupérer la largeur des colonnes, je l'ai sucrée
Donc seule chose à résoudre, empécher que le débogueur ne se lance !
Encore merci,
Warren
En fait, pas du tout le débogueur se lance mais aucune action n'a été effectuée dans mon fichier ZALT2 (logique j'imagine)
Donc je ne sais pas si le code de cette macro fonctionne correctement...
Merci pour votre aide,
waxscud
Re,
Et ce mix...
Sub Importer()
Dim Chemin As String, Fichier As String, Fichier2 As String
Chemin = ThisWorkbook.Path & Application.PathSeparator
Fichier = "ZALT.xlsx"
Application.ScreenUpdating = False
With Workbooks.Open(Chemin & Fichier)
Range("A2").CurrentRegion.Select
Selection.Copy
ThisWorkbook.ActiveSheet.Range("A2").PasteSpecial Paste:=xlPasteColumnWidths
ThisWorkbook.ActiveSheet.Range("A2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
.Close savechanges:=False
End With
End Sub
Hello Jean-Eric,
Malheureusement, toujours pas de mise en forme récupérée.
De plus ce code intègre dans la zone copiée puis collée, la ligne d'en-tête du fichier ZALT qui vient donc se coller sous la ligne d'en-tête de mon fichier ZALT2.
Je ne comprends pas pourquoi la mise en forme ne veut pas être prise en compte :S
Merci,
Waxscud
Hello,
En fait c'était tout con
Il suffisait de chosir le PasteSpecial : Paste:=xlAll au lieu de xlPasteValues
Du coup j'ai repris le code de Banzai et j'ai fait cette petite modif !
Merci encore,
Waxscud