[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 SubVoici é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:=FalseEt 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 SubMerci 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=trueBonjour H2SO4,
Merci après quelques modifications tout fonctionne parfaitement bien!
Excellente journée,
Naxos