Protection du formatage conditionnel (Microsoft Excel)
Kees a une feuille de calcul qui utilise largement la mise en forme conditionnelle.
Cependant, la mise en forme conditionnelle continue à être gâchée lorsque les utilisateurs copient et collent des informations ou lorsqu’ils utilisent le glisser-déposer pour modifier la feuille de calcul. Il s’interroge sur la meilleure façon d’éviter que cela ne se produise.
Cela se produit parce que le formatage conditionnel est considéré comme cela: le formatage. Un copier-coller standard (ou une modification par glisser-déposer)
copie tout, y compris le formatage. Cela signifie que les cellules cibles auront la mise en forme des cellules sources, et non la mise en forme des cellules cibles (y compris toute mise en forme conditionnelle qui aurait pu se trouver dans les cellules cibles).
La réponse est donc de dire aux utilisateurs de ne pas faire de copier-coller standard.
Au lieu de cela, ils doivent utiliser les options de collage pour coller tout (ou tout) sauf le formatage.
Une autre option, bien sûr, consiste à protéger la feuille de calcul afin que l’utilisateur ne puisse rien copier et coller. Cependant, cela peut être un peu radical pour vos utilisateurs, car vous voudrez peut-être qu’ils apportent des modifications. (Vous ne voulez tout simplement pas qu’ils gâchent le formatage conditionnel.)
Cela conduit à une approche macro. Si vous pouvez enregistrer une macro qui applique la mise en forme conditionnelle aux cellules, vous pouvez créer des macros supplémentaires qui appliquent cette macro enregistrée, si nécessaire. Par exemple, disons que la macro que vous enregistrez s’appelle quelque chose de court et sexy comme SetCondFormat.
Ensuite, allez dans Visual Basic Editor et, dans la fenêtre Exécution, entrez ce qui suit:
? Cells.SpecialCells(xlCellTypeAllFormatConditions).Address
En supposant que votre mise en forme conditionnelle est entièrement configurée, cela devrait renvoyer une ligne – peut-être une longue ligne – qui montre les adresses des cellules et des plages qui utilisent la mise en forme conditionnelle. Cela ressemblera à quelque chose comme ceci:
$B$3:$B$50,$D$3:$D$50,$G$3:$I$20
Ensuite, ajoutez la macro suivante au module de code ThisWorksheet:
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range Const cCFAddress = "$B$3:$B$50,$D$3:$D$50,$G$3:$I$20" On Error Resume Next Set r = Range(cCFAddress) On Error GoTo 0 If r IsNot Nothing Then If Application.Intersect(Target, r) IsNot Nothing Then SetCondFormat End If End If End Sub
La clé ici est de s’assurer que la constante cCFAddress est définie égale à ce qui a été renvoyé lorsque vous avez vu les adresses dans la fenêtre Exécution. (Si vous modifiez le formatage conditionnel ultérieurement, vous pouvez utiliser à nouveau l’astuce de la fenêtre Exécution et changer simplement la ligne dans la macro ci-dessus.)
La macro est exécutée chaque fois qu’il y a un changement dans la feuille de calcul. Il vérifie si l’adresse modifiée (transmise dans la variable Target) fait partie des cellules d’origine contenant des formats conditionnels. Si tel est le cas, votre SetCondFormat (celui que vous avez enregistré pour effectuer le formatage conditionnel) est à nouveau exécuté.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (4362) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.