[VBA - Excel] Remplacer format d'une cellule par une autre sur le classeur

Bonsoir à tous,

J'espère que vous allez bien.

J'essaie d'écrire un code pour que sur tout un classeur, le format de la cellule sélectionnée (fond, bordures, couleurs bordure, couleur police, police, taille police etc.) soit remplacé par le format de la cellule désigné.

J'ai essayé d'écrire le code mais j'ai une erreur sur FormatConditions.

Voici mon code à date:

Sub Rep_all_format()

Dim fmt_bef As CellFormat
Dim fmt_aft As CellFormat
Dim rngReplace As Boolean
Dim msg As String
Dim Sh As Worksheet
Dim Rg As Range
Dim ppos1 As Range
Dim ppos2 As Range
Dim Find As String
Dim Remplace As String

'Definition des param
        Set ppos1 = Application.InputBox(Prompt:="Selectionnez le style de cellue à remplacer", Title:="Remplacer", Default:=ActiveCell.Address, Type:=8)
        Set ppos2 = Application.InputBox(Prompt:="Selectionnez le style de cellule à affecter", Title:="Affecter", Type:=8)

'Dec param
    Find = ppos1.FormatConditions
    Remplace = ppos2.FormatConditions

Application.ScreenUpdating = False
Set fmt_bef = Application.FindFormat
Set fmt_aft = Application.ReplaceFormat

For Each Sh In ThisWorkbook.Worksheets
    Set Rg = Sh.UsedRange
            With fmt_bef
                .Clear
                .FormatConditions = Find
            End With
            With fmt_aft
                .Clear
                .FormatConditions = Remplace
            End With
        Rg.Replace What:="", Replacement:="", _
        SearchFormat:=True, ReplaceFormat:=True
    Next

fmt_bef.Clear
fmt_aft.Clear

Application.ScreenUpdating = True

MsgBox ("Le format sélectionné a été remplacé par le format désiré.")

End Sub

Voici également le fichier avec les onglets suivants:

  • Param: ce sont des formats au hasard avec un avant et un après
  • Avt: Situation avant lancement de la macro (qui est lancée cellule par cellule)
  • Bef: Situation après lancement de la macro

Dans la même mesure est-il possible de faire un inventaire de tous les formats de cellule dans un classeur, pour ne pas en oublier?

Toute aide est la bienvenue,

Bonne soirée,

Naxos

Une autre idée serait:

'Dec param
    ppos2.Select
    Remplace =Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    ppo1.Select
    Find = Selection.CopySpecial Copy:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Et de chercher les paramètres de format de ppos1 pour appliquer les paramètre de ppos2 comme après utilisation du pinceau.

Mais la encore, étant débutant, je n'arrive pas à rédiger la fin du code!

Toute aide serait la bienvenue.

Naxos

Bonjour,

cette fonctionnalité existe dans excel, ctrl-H->remplacer format. (choisir la cellule avec le format à remplacer, choisir la cellule avec le format de remplacement, sélectionner appliquer sur tout le classeur) et cliquer sur le bouton remplacer tout.

Bonjour,

Merci pour ton retour. Je le sais néanmoins, ceci ne fonctionne essentiellement que pour le fond d'une cellule et ne capture pas tout. Par ailleurs, l'idée est de faire une évolution par la suite en déclarant une liste de style et le format à appliquer d'ou la nécessité du code VBA!

Excellente journée,

Naxos

bonjour,

si tu veux utiliser la fonction replaceformat, il faudra que tu initialises findformat et replaceformat pour chaque attribut de format possible (longue liste , les attributs de interior, de font, de borders, formatconditions, locked, etc ..)

le plus simple sera de travailller avec des styles, en effet.

Sub test()
    Set bef = Application.InputBox("before", Type:=8)
    stylebef = bef.Style
    Set aft = Application.InputBox("after", Type:=8)
    styleaft = aft.Style

    For Each sh In ThisWorkbook.Worksheets
        For Each c In sh.UsedRange
            If c.Style = stylebef Then c.Style = styleaft
        Next c
    Next sh
End Sub

Merci pour ta réponse je garde ton code pour une autre utilisation!

Et quand l’utilisateur précédent n’a pas été bien éduqué et qu’il a tout fait manuellement ...?

Je vois bien l’idée qu’il faille définir pour chaque paramètre et ça je vais m’en occuper. Mais comment autrement que par Debug.print récupérer les informations de format de la cellule sélectionne ou bien est il possible de définir un truc genre

Set marvar = debut.print selection.interior.color

(Quand j’ai essayé ça ne fonctionnait pas non plus)

Ce qui me permettrait de chercher toutes les cellules remplissant les conditions

Ex:

For each c in active sheet

With c

.interior

Etc

End with

Et appliquer le style de ma cellule désirée

Désolé j’écris depuis le téléphone!

Merci pour ton aide

Bonjour

par exemple

set celluleexempleavant=range("A1")
set celluleexempleapres=range("A2")

'on prépare le replaceformat
with application.findformat
.clear
.interior.color=celluleexempleavant.interior.color
.font.size=celluleexempleavant.font.size
.bold=celluleexexempleavant.bold
etc ...
end with
with application.replaceformat
.clear
.interior.color=celluleexempleapres.interior.color
.font.size=celluleexempleapres.font.size
.bold=celluleexexempleapres.bold
etc ...
end with

cells.replace replaceformat=true

Bonjour H2SO4,

Merci après quelques modifications tout fonctionne parfaitement bien!

Excellente journée,

Naxos

Rechercher des sujets similaires à "vba remplacer format classeur"