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 :

Recopie de mise en forme [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Août 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Août 2021
    Messages : 19
    Par défaut Recopie de mise en forme
    Bonjour à tous,

    Je ne m'y connais malheureusement pas en programmation et l'enregistrement de macros n'a rien donné donc je m'adresse à vous car je bloque complètement :/

    J'utilise une Feuil1 avec des valeurs auxquels j'attribue manuellement une mise en forme sur le fond de cellule. En Feuil2, j'appelle ces cellules donc ca me reprend la valeur et j'aimerais que ça me prenne également la mise en forme appliquée.

    Voici un fichier exemple en pièce jointe : test_excel.xlsx
    Dans ce fichier test, il y a seulement 2 colonnes en Feuil2, dans mon fichier original il y en a bien plus.

    Merci par avance pour votre aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 436
    Par défaut
    Bonjour,

    Une possibilité est d'utiliser des mises en forme conditionnelles, par exemple de cette façon:
    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
    Option Explicit
     
    Sub AjoutMFC(rModèle As Range, rPlage As Range)
        '--- ajout mises en forme conditionnelles selon plage modèle
        Dim kR As Long
        'Debug.Print rModèle(1, 1), rModèle(1, 2)
        'Debug.Print rPlage(1), rPlage(2)
        rPlage.FormatConditions.Delete             '--- supprime tous les formats conditionnels existants (pour ne pas les accumuler)
        '--- ajoute format conditionnels identiques à ceux utilisés dans plage modèle
        For kR = rModèle.Rows.Count To 1 Step -1   '--- va de bas en haut pour ajouter les conditions
            Debug.Print kR
            If rModèle(kR).Interior.Color <> vbWhite Or rModèle(kR).Font.Color <> vbBlack Then
                '--- ajout format si différent du format "normal"
                With rPlage.FormatConditions.Add( _
                    Type:=xlCellValue, _
                    Operator:=xlEqual, _
                    Formula1:=rModèle(kR).Value)
                    .Interior.Color = rModèle(kR).Interior.Color
                    .Font.Color = rModèle(kR).Font.Color
                    '--- et éventuellement encore d'autres propriétés
                End With
            End If
        Next kR
    End Sub
     
    Sub Test()
        AjoutMFC Worksheets("Feuil1").Range("A1:A25"), Worksheets("Feuil2").Range("A1:A10,C1:C10")
    End Sub
    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Août 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Août 2021
    Messages : 19
    Par défaut
    Bonjour EricDgn,

    Merci beaucoup pour votre aide et le code commenté, cela fonctionne parfaitement sur le fichier "test" envoyé.

    Sur mon fichier réel, j'ai essayé de réadapter le code en changeant les plages et le nom des feuilles sur la dernière fonction "Sub Test" comme suit:

    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
    Option Explicit
     
    Sub AjoutMFC(rModèle As Range, rPlage As Range)
        '--- ajout mises en forme conditionnelles selon plage modèle
        Dim kR As Long
        'Debug.Print rModèle(1, 1), rModèle(1, 2)
        'Debug.Print rPlage(1), rPlage(2)
        rPlage.FormatConditions.Delete             '--- supprime tous les formats conditionnels existants (pour ne pas les accumuler)
        '--- ajoute format conditionnels identiques à ceux utilisés dans plage modèle
        For kR = rModèle.Rows.Count To 1 Step -1   '--- va de bas en haut pour ajouter les conditions
            Debug.Print kR
            If rModèle(kR).Interior.Color <> vbWhite Or rModèle(kR).Font.Color <> vbBlack Then
                '--- ajout format si différent du format "normal"
                With rPlage.FormatConditions.Add( _
                    Type:=xlCellValue, _
                    Operator:=xlEqual, _
                    Formula1:=rModèle(kR).Value)
                    .Interior.Color = rModèle(kR).Interior.Color
                    .Font.Color = rModèle(kR).Font.Color
                    '--- et éventuellement encore d'autres propriétés
                End With
            End If
        Next kR
    End Sub
     
    Sub Test()
    AjoutMFC Worksheets("BOM_FULL_ASSEMBLY").Range("B3:BG400"), Worksheets("MODULAR").Range("B3:B20,F3:F30,J3:J35,N3:N50,R3:R15,V3:V65,Z3:Z20,AD3:AD30,AH3:AH30")
    End Sub
    Mais j'obtiens une erreur "Argument ou appel de procédure incorrect" lors du déboguage, il y aurait un problème sur cette partie apparemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                With rPlage.FormatConditions.Add( _
                    Type:=xlCellValue, _
                    Operator:=xlEqual, _
                    Formula1:=rModèle(kR).Value)
    J'imagine que c'est dû au nombre de plage ?

    Merci d'avance

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 436
    Par défaut
    Bonjour,

    Le problème vient de ce que la plage "modèle" doit se trouver sur une seule colonne, donc du genre "B3:B400" (et pas B3:BG400). Encore que je suis fort étonné qu'il y ait près de 400 formats conditionnels différents à inscrire (alors qu'en destination il n'y a qu'au plus 65 lignes).

    Cordialement.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Août 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Août 2021
    Messages : 19
    Par défaut
    Bonjour,

    Merci, j'ai donc modifié le code comme suit et quelques couleurs de fond de cellule apparaissent, mais pas sur toutes les cellules -malgré le fait que les plages renseignés soient bonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Test()
    AjoutMFC Worksheets("BOM_FULL_ASSEMBLY").Range("B172:B250"), Worksheets("MODULAR").Range("B3:B20,F3:F30,J3:J35,N3:N50,R3:R15,V3:V65,Z3:Z20,AD3:AD30,AH3:AH30")
    End Sub
    J'ai noté un Range de la ligne de 172 à 250 car au-dessus j'ai le même message d'erreur que précedemment. Alors que ma feuille BOM_FULL_ASSEMBLY comporte 400 lignes.
    Aussi, au lieu d'appliquer toute la feuille1 à la feuille2, est-il possible d'appliquer une plage particulière de la feuille1 par plage de la feuille 2? car il existe des doublons qui n'ont pas la même mise en forme..

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 436
    Par défaut
    La routine AjoutMFC() est justement faite pour permettre cela. On peut donc très bien faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
        Dim wSh1 as Worksheet, wSh2 as Worksheet
        Set wSh1 = Worksheets("BOM_FULL_ASSEMBLY")
        Set wSh2 = Worksheets("MODULAR")
        AjoutMFC wSh1.Range("B3:B8"), wSh2.Range("B3:B20")
        AjoutMFC wSh1.Range("C3:C30"), wSh2.Range("F3:F30")
        AjoutMFC wSh1.Range("D3:D24"), wSh2.Range("J3:J35,N3:N50,R3:R15,V3:V65,Z3:Z20,AD3:AD30,AH3:AH30")
        Set wSh1 = Nothing
        Set wSh2 = Nothing
    End Sub
    A noter que s'il y a deux formats conditionnels inscrits avec un même critère (p.ex. ="X"), c'est le premier de ces formats qui sera exploité.

    Cordialement.

    P.S. Depuis Excel 2007, une cellule ne peut être soumise qu'à au plus 64 formats conditionnels différents.

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

Discussions similaires

  1. Recopier un nombre variable de lignes et en gardant la mise en forme
    Par Novice72 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/08/2016, 14h00
  2. Réponses: 3
    Dernier message: 08/08/2016, 08h56
  3. Réponses: 3
    Dernier message: 07/08/2016, 10h23
  4. Insérer une ligne en recopiant les formules et mise en forme
    Par mogo107 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/06/2013, 22h05
  5. [XL-2007] recopier mise en forme conditionnelle
    Par Hervé40 dans le forum Excel
    Réponses: 2
    Dernier message: 07/07/2010, 17h32

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