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
    60zalt.xlsx (8.62 Ko)
  • un fichier ZALT2.xlsm sur lequel je vais retravailler ces données via plusieurs macros
    57zalt2.xlsm (14.73 Ko)

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

Rechercher des sujets similaires à "importer donnees classeur ferme mise forme"