Copie de cellules avec mise en forme conditionnelle

Bonjour,

J'ai une feuille de calcul "A" dont je veux copier et incérer plusieurs colonnes dont certaines cellules ont une mise en forme conditionnelle.

La formule de mise en forme conditionnelle est très basique =R$1=0.

Mon problème c'est, quand je copie les colonnes de la feuille "A" et que je l'incère dans la feuille "B" la formule de mise en forme conditionnelle devient ='A'!R$1=0 alors que souhaiterai garder =R$1=0.

Je souhaite faire cette manipulation en VBA, mais j'ai le même problème si je le fait manuellement.

Le bout de code que j'ai écrit pour la copie est relativement basique et marche très bien hormis ce problème de mise en forme

Sheets("A").Select Columns("R:LQ").Select Selection.Copy Sheets("B").Select Range("12").End(xlToRight) (-0, 1).select Selection.insert shift:=xlLeft

Merci d'avance à celui qui connais le paramètre ou l'astuce pour contourner ce problème.

Bonjour,

Pourquoi vous vous êtes arrêté en si bon chemin ? Vous auriez dû changer la formule de MFC pendant l'enregistrement pour connaitre le paramètre à modifier.

Si vous faites ceci et postez le code (utile) en entier, à l'aide des balises </> du ruban de commentaire, il sera plus simple de vous aider.

Cdlt,

Bonjour, 3GB

Quand je fais l'enregistrement de la macro, et que je vais dans gérer les mises en formes conditionnelles afin de modifier la cellule comme suggéré, il y a rien qui s'enregistre sinon les déplacements de cellule sélectionnées. J'ai pas du tout comprendre, à ce que vous me proposé comme solution.

Bonjour,

Dans ce cas, voici un essai :

sub MFC()

dim source as range, dest as range

set source = Sheets("A").Columns("R:LQ") 'plage origine à copier
set dest = Sheets("B").columns(???) 'plage destination à déplacer <<<< ADAPTER

source.copy 'copie origine
with dest 'avec destination
    .insert shift:=xlLeft 'insertion des lignes copiées vers la gauche
    with .offset(,-source.columns.count).resize(,source.columns.count).formatconditions 'avec les MFC des lignes collées
        .delete 'supprimer
        .add type:=xlexpression, formula1:="=R$1=0" 'ajouter
        with .item(1) 'avec MFC n°1
            .font.color = RGB(0,0,255) 'couleur police
            .interior.color = RGB(255,255,0) 'couleur cellule
        end with
    end with
end with

end sub
        

Il faudra peut-être adapter 2 3 choses dont la plage de destination notamment. Ici, on supprime puis ajoute une MFC donc je suis parti du principe qu'il n'existe pas de MFC autre que celle à définir.

Cdlt,

Bonjour,

Merci pour cette proposition, mais j'ai plein de mise en forme dans la plage de données copié

Bonjour,

Dans ce cas, en essayant ceci, ça devrait être mieux :

sub MFC()

dim source as range, dest as range

set source = Sheets("A").Columns("R:LQ") 'plage origine à copier
set dest = Sheets("B").columns(???) 'plage destination à déplacer <<<< ADAPTER

source.copy 'copie origine
with dest 'avec destination
    .insert shift:=xlLeft 'insertion des lignes copiées vers la gauche
    with .offset(,-source.columns.count).resize(,source.columns.count).formatconditions 'avec les MFC des lignes collées
        with .add(type:=xlexpression, formula1:="=R$1=0") 'avec nouvelle mfc
            .priority = 1 'définit la priorité sur 1 (prévaut sur les
            .font.color = RGB(0,0,255) 'couleur police
            .interior.color = RGB(255,255,0) 'couleur cellule
        end with
    end with
end with

end sub
        

La nouvelle MFC devient prioritaire. Il faudra adapter les formats bien entendu...

Cdlt,

En faisant plusieurs tests je me suis aperçu que si je collais la plage de données au lieu de l'insérer coller, ça marche.

Je suis donc en train de reprendre mon code pour insérer 312 colonnes avant de coller la plage.

Je maitrise insérer une colonne, mais je trouve pas comment insérer 312 colonnes après la cellule active

Mais est-ce que vous avez essayé le code ? Parce qu'au niveau des MFC, je crois que ça marche et pour l'insertion, ça semblait être le cas aussi. Il faut bien sûr faire correspondre ce code à vos plages réelles.

Cdlt,

Non j'avais pas vu votre réponse

Et bien, n'hésitez pas à essayer, on sait jamais , ça pourrait être la bonne.

J'ai intégrer votre proposition à ma macro

Voir code ci-après

Sub Ceer_année_sup3()
'
' Ceer_année_sup Macro
' Permet de créer une année supplémentaire  dans le planning

 'Variables'
Dim AdresseDépart As Worksheet
Dim source As Range, dest As Range

    'enregistrer la feuille active de départ'
    Set AdresseDépart = ActiveSheet

    'ôter la protection de la feuille'
    ActiveSheet.Unprotect Password:="Admin"
    Application.DisplayAlerts = False

    ' Supprimer les filtres
    ActiveSheet.AutoFilterMode = False
    Rows("14:14").AutoFilter

Set source = Sheets("EXP1").Columns("R:LQ") 'plage origine à copier
Set dest = AdresseDépart.Range("l2").End(xlToRight)(-0, 1)  'plage destination à déplacer <<<< ADAPTER

source.Copy 'copie origine
With dest 'avec destination
    .Insert shift:=xlLeft 'insertion des lignes copiées vers la gauche
    With .Offset(, -source.Columns.Count).Resize(, source.Columns.Count).FormatConditions 'avec les MFC des lignes collées
        With .Add(Type:=xlExpression, Formula1:="=R$1=0") 'avec nouvelle mfc
            .Priority = 1 'définit la priorité sur 1 (prévaut sur les
            .Font.Color = RGB(0, 0, 255) 'couleur police
            .Interior.Color = RGB(255, 255, 0) 'couleur cellule
        End With
    End With
End With

End Sub

Je sais pas si j'ai loupé un truc, mais dans la plage collée, j'ai toujours les mises en formes qui font référence à la feuille d'origine "EXP1".

Je suis têtu mais je pense, que vu la complexité des mises en formes existantes sur la plage à copier et vu que la fonction coller fonctionne correctement, je vais essayer d'approfondir la solution d'incérer dans un premier temps 312 colonnes au bon endroit dans ma feuille de départ puis d'y coller les colonnes "R:LQ de "EXP1"

Rechercher des sujets similaires à "copie mise forme conditionnelle"