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 en gardant la mise en forme d'arrivée [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut copier en gardant la mise en forme d'arrivée
    Bonjour à tous,

    voici mon code
    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
    Private Sub CommandButton1_Click()
     
    Dim ligdeb As Long, ligfin As Long
    Dim ligdeb2 As Long, dercol As Long
    Dim typ As String
    Dim c As Range
    Dim ws As Worksheet
     
    Set ws = Sheets("" & Range("c2").Value & "")
     
        If Range("c2").Value <> "" And Range("c3").Value <> "" Then
            typ = "" & Range("c3").Value
     
            Set c = ws.Columns("A:A").Find(typ, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                ligdeb2 = c.Row
     
    dercol = ws.Cells(ligdeb2, Rows(ligdeb2).Cells.Count).End(xlToLeft).Column + 1
     
    ligdeb = Range("c8").End(xlDown).Row
    ligfin = Range("c18").End(xlUp).Row
    Range("c" & ligdeb, "c" & ligfin).Copy ws.Cells(ligdeb2, dercol)
    Range("c5", "c7").Copy ws.Cells(ligdeb2 - 3, dercol)
     
            End If
        End If
     
    End Sub
    je souhaiterais lors ma copie garder le format d'arrivée et pas celui de départ, j'ai essayer de rajouter un code lors de la copie mais ca ne fonctionne pas.

    Merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.range(ws.Cells(ligdeb2 - 3, dercol),ws.cells(ligdeb2-1,dercol)).value=Range("c5:c7").value
    Range(B).value=range(A).value
    A et B doivent être de même dimension
    et ne pas oublier le .value

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut
    Merci mais ca ne fonctionne pas.

    Tu me dis que Range(B).value=Range(A).value et que A et B doivent être de même dimension. Justement moi ma mise en forme d'arrivée est avec un format différent en taille, en plus il y a des bordures etc

    j'ai trituré ton code dans tout les sens mais je crois ne pas trop le comprendre.

    cordialement

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("c5", "c7").Copy ws.Cells(ligdeb2 - 3, dercol)
    ça te copie C5:C7 (3cellules) dans ws à partir de Cells(ligdeb2 - 3, dercol) donc, les cellules de destination sont Cells(ligdeb2 - 3, dercol),Cells(ligdeb2 - 2, dercol) et Cells(ligdeb2 - 1, dercol)
    Ils ont bien la même dimension, C'est bien ça?
    et avec .copy, il te copie même la mise en forme
    Si tu désire garder la mise en forme des cellules de destination:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.range(ws.Cells(ligdeb2 - 3, dercol),ws.cells(ligdeb2-1,dercol)).value=Range("c5:c7").value
    répond à ta demande.

    La traduction fidèle de ton code donne ceci
    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
    Private Sub CommandButton1_Click()
    Dim ligdeb As Long, ligfin As Long
    Dim ligdeb2 As Long, dercol As Long
    Dim typ As String
    Dim c As Range
    Dim ws As Worksheet
     
    Set ws = Sheets(Range("C2").Value)
    With ws
        If Range("C2").Value <> "" And Range("C3").Value <> "" Then
        typ = Range("C3").Value
     
        Set c = .Columns("A:A").Find(typ, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            ligdeb2 = c.Row
            Set c = Nothing
            dercol = .Cells(ligdeb2, .Columns.Count).End(xlToLeft).Column + 1
     
            ligdeb = Range("C8").End(xlDown).Row
            ligfin = Range("C18").End(xlUp).Row
            .Range(.Cells(ligdeb2, dercol), .Cells(ligdeb2 + ligfin - ligdeb, dercol)).Value = Range("C" & ligdeb & ":C" & ligfin).Value
            .Range(.Cells(ligdeb2 - 3, dercol), .Cells(ligdeb2 - 1, dercol)).Value = Range("C5:C7").Value
        End If
    End If
    End With
    Set ws = Nothing
    End Sub
    Si ça ne fonctionne pas comme tu le désire, je crois fermement que ça vient de la veleur de tes variables ligdeb, ligfin, ligdeb2 et dercol As Long.
    à toi de faire un pas pas F8 pour vérifier.

    Quand je dis que les ranges A et B doivent être de même taille, ça veut dire le même nombre de lignes et de colonnes (attention peut être aux cellules fusionnées)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Par défaut
    Pourquoi ne pas utiliser la fonction paste special "utiliser le format de destination" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone,     SkipBlanks:=False, Transpose:=False
    ?

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Le pastspécial est aussi adapté. la différence, pas obligé de passer par le presse papier pour l'affectation directe.
    question de choix

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

Discussions similaires

  1. Copier Feuille depuis un classeur fermé en gardant la mise en forme
    Par altra dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/11/2011, 08h58
  2. Ajout de ligne en gardant la mise en forme
    Par Steph_pas_douée dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/01/2010, 21h19
  3. [WD-2007] Envoyer le corps d'un doc par mail en gardant la mise en forme
    Par abillon dans le forum VBA Word
    Réponses: 7
    Dernier message: 13/11/2009, 10h00
  4. Réponses: 2
    Dernier message: 31/08/2006, 09h38

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