Personnaliser les changements de piste en surbrillance d'excel 2010

Existe-t-il un moyen de personnaliser comment Excel met en évidence les cellules sur Track Changes? Mon client nous a demandé de "mettre en évidence tout ce que vous avez changé en changeant de couleur de texte en rouge", et j'aimerais mettre en œuvre ceci. Je suis actuellement à la recherche d'un moyen de le faire avec VBA, et je pense:

if (current cell has changed) and (changed has NOT been approved) then set color of current cell = red else remove color of current cell. end if 

Toutes les suggestions sont appréciées!

Vous pouvez le faire avec un événement Changement de feuille de calcul dans VBA. J'ai commencé à créer un exemple simple pour vous, mais je me suis rendu compte que votre client voudra probablement rétablir toute mise en évidence après avoir vérifié vos modifications. Alors, j'ai décidé de faire tout un modèle de travail qui fait tout. Voici les étapes que vous devez suivre:

Appuyez sur Alt + F11 pour ouvrir l'éditeur VBA dans Excel. Dans le navigateur d'objets (sur le côté gauche de la fenêtre VBA), double-cliquez sur une feuille que vous éditez. Collez le code suivant dans le champ de texte qui s'ouvre.

 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet, ws2 As Worksheet Dim i As Boolean Application.ScreenUpdating = False 'Create Change Log if one does not exist. i = False For Each ws In ThisWorkbook.Worksheets If ws.Name = "Change Log" Then i = True Exit For End If Next ws If Not i Then Set ws2 = ThisWorkbook.Worksheets.Add ws2.Visible = xlSheetHidden ws2.Name = "Change Log" ws2.Range("A1") = "Sheet" ws2.Range("B1") = "Range" ws2.Range("C1") = "Old Text Color" Else Set ws2 = Sheets("Change Log") End If 'Store previous color data in change log for rollback. ws2.Range("A1").Offset(ws2.UsedRange.Rows.Count, 0) = Target.Worksheet.Name ws2.Range("B1").Offset(ws2.UsedRange.Rows.Count - 1, 0) = Target.Address ws2.Range("C1").Offset(ws2.UsedRange.Rows.Count - 1, 0) = Target.Font.Color 'Change font color to red. Target.Font.Color = 255 Application.ScreenUpdating = True End Sub 

Ce code changera la couleur de la police en rouge de n'importe quelle cellule que vous modifiez la valeur. Il ne changera pas la couleur de la police si vous modifiez uniquement le format d'une cellule. En outre, il ne changera pas automatiquement la couleur de la police des cellules dépendantes. Ce dernier pourrait être fait, mais je vous laisse si vous voulez ce comportement.

Ce code crée également une feuille de journal des modifications cachée et enregistre l'adresse et la couleur de la police d'origine de la cellule qui a été modifiée.

Notez que ce code ne fonctionne que pour les modifications apportées à cette feuille spécifique. Si vous souhaitez suivre les modifications dans l'intégralité du classeur, vous pouvez coller ce même code dans le module de feuille de calcul pour chaque feuille.

Le code pour annuler toute mise en surbrillance doit être placé dans un module séparé. Dans l'éditeur VBA, accédez à Insérer >> Module. Collez le code suivant dans le nouveau module.

 Sub rollbackHILITE() Dim sht As Worksheet, cl As Worksheet Dim j As Long, roll() As Variant Dim del As Integer Application.ScreenUpdating = False 'Find Change Log. If it doesn't exist, user is prompted and exits sub. For Each sht In ThisWorkbook.Worksheets If sht.Name = "Change Log" Then Set cl = sht Exit For End If Next sht If cl Is Nothing Then MsgBox "Change Log not found!" Exit Sub End If 'Return font colors to original form by stepping backward through change log. If cl.UsedRange.Rows.Count > 1 Then roll = cl.Range("A2:C2").Resize(cl.UsedRange.Rows.Count - 1, 3) For j = UBound(roll, 1) To 1 Step -1 Set sht = Sheets(roll(j, 1)) sht.Range(roll(j, 2)).Font.Color = roll(j, 3) Next j End If Application.ScreenUpdating = True 'Prompt User to keep or delete change log after rollback. del = MsgBox("Delete Change Log?", vbOKCancel, "Finish Rollback") If del = 1 Then cl.Delete End If End Sub 

Ce code peut être exécuté à partir du menu Macros dans Excel. Il revient simplement la couleur de la police des cellules en surbrillance sur leurs couleurs d'origine, puis supprime le journal des modifications si l'utilisateur l'accepte.