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 :

Copier coller avec mise forme de cellule. [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 70
    Points : 46
    Points
    46
    Par défaut Copier coller avec mise forme de cellule.
    Bonjour,
    j'ai une fonction (voir macro ci-dessous) qui copie et colle les valeurs dans un autre classeur.
    Cependant, je vaudrai savoir comment copier d'un classeur A et coller dans un classeur B en concevant le même format de fichier A i.e la même en mise des cellules (couleur...) du fichier A sur le fichier B

    Cordialement



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub COPIEBASEVG(chemin, feuille)
    Dim Wbk As Workbook
    Dim Rep As String
    Dim Plage As Range
    Dim tbl() As Variant
    Dim i As Integer, j As Integer
    Dim srange As String
     
     
    Set Wbk = Workbooks.Open(chemin)
    With ThisWorkbook.Worksheets("service")
        Set Plage = .Range("A1:DV" & .Range("A65536").End(xlUp).Row)
    End With
    tbl = Plage.Value
     
    icase = UBound(tbl, 1)
     
    With Wbk.Worksheets(feuille)
        Set Plage = .Range("A8:DV" & .Range("A65536").End(xlUp).Row)
    End With
    tbl = Plage.Value
    jcase = UBound(tbl, 1)
    kcase = UBound(tbl, 2)
     
     
    For i = 1 To jcase
        For j = 1 To kcase
        ThisWorkbook.Worksheets("service").Cells(i + icase + 2, j).Value = Wbk.Worksheets(feuille).Cells(i + 7, j).Value
        Next j
    Next i
     
     
     
    Wbk.Close False
    Set Wbk = Nothing
    End Sub

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Essaie (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub COPIEBASEVG(chemin, feuille)
    Dim Wbk As Workbook
    Dim Rep As String
    Dim Plage As Range
    Dim tbl() As Variant
    Dim i As Integer, j As Integer
    Dim srange As String
    Dim Sh As Worksheet
     
     
    Set Wbk = Workbooks.Open(chemin)
    With ThisWorkbook.Worksheets("service")
        Set Plage = .Range("A1:DV" & .Range("A65536").End(xlUp).Row)
    End With
    tbl = Plage.Value
     
    icase = UBound(tbl, 1)
     
    With Wbk.Worksheets(feuille)
        Set Plage = .Range("A8:DV" & .Range("A65536").End(xlUp).Row)
    End With
    tbl = Plage.Value
    jcase = UBound(tbl, 1)
    kcase = UBound(tbl, 2)
     
    Set Sh = Wbk.Worksheets(feuille)
    With ThisWorkbook.Worksheets("service")
        For i = 1 To jcase
            For j = 1 To kcase
                .Cells(i + icase + 2, j).Value = Sh.Cells(i + 7, j).Value
                Sh.Cells(i + 7, j).Copy
                .Cells(i + icase + 2, j).PasteSpecial xlPasteFormats
            Next j
        Next i
    End With
     
     
    Wbk.Close False
    Set Wbk = Nothing
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    Cette macro fonctionne bien par contre elle est extrêmement lente. Est-ce qu'il y aurait un moyen d'accélérer le processus?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Regarde si tu vois une différence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub COPIEBASEVG(chemin, feuille)
    Dim Wbk As Workbook
    Dim Rep As String
    Dim Plage As Range
    Dim tbl() As Variant
    Dim i As Integer, j As Integer
    Dim srange As String
    Dim Sh As Worksheet
     
    Dim inCalculationMode As Integer
    Application.ScreenUpdating = False
    inCalculationMode = Application.Calculation
    Application.Calculation = xlCalculationManual
     
    Set Wbk = Workbooks.Open(chemin)
    With ThisWorkbook.Worksheets("service")
        Set Plage = .Range("A1:DV" & .Range("A65536").End(xlUp).Row)
    End With
    tbl = Plage.Value
     
    icase = UBound(tbl, 1)
     
    With Wbk.Worksheets(feuille)
        Set Plage = .Range("A8:DV" & .Range("A65536").End(xlUp).Row)
    End With
    tbl = Plage.Value
    jcase = UBound(tbl, 1)
    kcase = UBound(tbl, 2)
     
    Set Sh = Wbk.Worksheets(feuille)
    With ThisWorkbook.Worksheets("service")
        For i = 1 To jcase
            For j = 1 To kcase
                .Cells(i + icase + 2, j).Value = Sh.Cells(i + 7, j).Value
                Sh.Cells(i + 7, j).Copy
                .Cells(i + icase + 2, j).PasteSpecial xlPasteFormats
            Next j
        Next i
    End With
     
     
    Wbk.Close False
    Set Wbk = Nothing
     
    Application.Calculation = inCalculationMode
    Application.ScreenUpdating = True
     
    End Sub

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    L’exécution reste toujours lente

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    C'est possible. La macro traite quelles plages ? C'est quoi, lent ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    je te dits encore une fois de plus un grand merci pour ton aide mais j'ai pu trouver la solution par moi-même, elle etait vraiment simple. Mais il m'a fallu du temps, c'est cela la magie de la programmation. je te mets la solution en dessous.

    cordialement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set Sh = Wbk.Worksheets(feuille)
    With ThisWorkbook.Worksheets("service")
        For i = 1 To jcase
            For j = 1 To kcase
                .Cells(i + icase + 2, j).Value = Sh.Cells(i + 7, j).Value
              ' Sh.Cells(i + 7, j).Copy
             ' .Cells(i + icase + 2, j).PasteSpecial xlPasteFormats
                .Cells(i + icase + 2, j).Interior.ColorIndex = Sh.Cells(i + 7, j).Interior.ColorIndex
                .Cells(i + icase + 2, j).Font.ColorIndex = Sh.Cells(i + 7, j).Font.ColorIndex
            Next j
        Next i
    End With

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

Discussions similaires

  1. [XL-2007] Copie/coller avec mise en forme
    Par Pierre67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/03/2013, 12h34
  2. [XL-2010] Copier/coller et mise en forme conditionnelle
    Par lucas56 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2013, 13h43
  3. Copier/Coller avec conservation de la mise en forme du texte initial.
    Par Richard_35 dans le forum Evolutions du club
    Réponses: 16
    Dernier message: 24/11/2011, 18h33
  4. [XL-2003] copier coller et mise en forme conditionnelle
    Par sophtoche dans le forum Conception
    Réponses: 2
    Dernier message: 18/06/2010, 23h55
  5. Copier/coller une mise en forme d'une ligne compléte en vba
    Par ptitrault dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/01/2009, 15h38

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