IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copie/coller avec mise en forme [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut Copie/coller avec mise en forme
    Bonjour à tous

    d'une application exterieure, je récupère un fichier xl 2003.
    Mon application tourne sur 2007 et/ou 2010. Pour cette raison je ne peux copier un onglet vers le fichier 2003 (pas le même nombre de lignes)

    Pour contourner, je copie une plage entre 2 fichiers ouverts avec le bout de code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks("APPLI_DEF.xlsm").Sheets("MODELEDEP").Range("A1:I45").Copy Destination _
    :=Workbooks(ActiveWorkbook.Name).Sheets("F_DEP").Range("A1")
    En collant, il ne me reproduit pas la mise en forme de la plage initiale.

    Comment coller avec conservation de la mise en forme (hauteur lignes, ....)

    Au plaisir de vous lire

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 931
    Points : 28 926
    Points
    28 926
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour coller la largeur des colonnes, tu peux utiliser la constante xlPasteColumnWidths dans l'argument Paste dans le collage spécial.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PasteSpecial Paste:=xlPasteColumnWidths

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Merci Philippe toujours présent à l'appel

    d'accord pour les colonnes, pour les lignes ce sera sans doute du genre rowheight

    mais cette commande je la colle où par rapport à mon code ci-dessus ?
    @+

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 931
    Points : 28 926
    Points
    28 926
    Billets dans le blog
    53
    Par défaut
    Bonjour Pierre,
    Attention malgré le fait que je suis persuadé d'avoir réussi ce collage spécial avec largeur de colonne voilà que maintenant j'obtiens une erreur 1004.
    Pour la hauteur, je ne vois pas d'autres solutions que boucler sur la propriété des lignes copiées pour l'appliquer aux lignes collées.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    OK d'accord

    il n'y pas beaucoup de lignes/colonnes à ajuster
    j'écrirai ces quelques lignes

    comme toujours un grand merci pour ta réactivité et précieux conseils

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 931
    Points : 28 926
    Points
    28 926
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai trouvé la raison du problème de l'erreur 1004
    Je n'avais pas constaté que lorsque l'on fait un Copy Destination le CutCopyMode était à False
    Donc pour Coller la largeur des colonnes d'une plage copiée.
    Soit on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With rngSource
    .Copy: rngTarget.PasteSpecial xlPasteColumnWidths: .Copy rngTarget
    End With
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With rngTarget
     rngSource.Copy
    .PasteSpecial xlPasteAll: .PasteSpecial xlPasteColumnWidths
    End With
    Application.CutCopyMode = False
    rngSource est la plage copiée et rngTarget est la plage où l'on colle.

    Une procédure pour Copier/Coller une plage avec la largeur des colonnes et la hauteur des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub CopyRange(SourceData As Range, TargetData As Range, Optional ClearTarget As Boolean = False)
     Application.ScreenUpdating = False
     Dim r As Long, c As Integer, rngTarget As Range
     With SourceData
      If ClearTarget Then TargetData.Worksheet.Cells.Clear
      Set rngTarget = TargetData.Resize(.Rows.Count, .Columns.Count)
     .Copy: rngTarget.PasteSpecial xlPasteColumnWidths: .Copy rngTarget
      For r = 1 To .Rows.Count: rngTarget.Rows(r).RowHeight = .Rows(r).RowHeight: Next
     End With
     Application.ScreenUpdating = True
    End Sub
    La procédure qui l'invoque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
     With ThisWorkbook
      Dim rngSource As Range: Set rngSource = .Worksheets("Feuil1").Range("A2:E24")
      Dim rngTarget As Range: Set rngTarget = .Worksheets("Feuil4").Range("C5")
     End With
     CopyRange rngSource, rngTarget, True
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 08/12/2014, 08h32
  2. [XL-2003] Copier coller avec mise forme de cellule.
    Par hobine dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/12/2011, 23h39
  3. [XL-2003] tableau avec mise en forme coller dans autre feuil
    Par antoine2933 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2011, 17h47
  4. Copie d'une feuille avec mise en forme
    Par kernkraft dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/12/2010, 17h09
  5. Form Web avec mise en forme et stockage BdD
    Par jflebegue dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 14/10/2005, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo