[SIZE=2][COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK[/I][/B][/COLOR]
[COLOR=NAVY]Option Explicit[/COLOR]
[COLOR=GREEN]'---------------------------------------------------------------------------------------[/COLOR]
[COLOR=GREEN]' Auteur : Didier FOURGEOT (myDearFriend!)[/COLOR]
[COLOR=GREEN]' Date : 18/09/2005[/COLOR]
[COLOR=GREEN]' Sujet : MFC multiples v2[/COLOR]
[COLOR=GREEN]'---------------------------------------------------------------------------------------[/COLOR]
[COLOR=NAVY]Private Sub[/COLOR] Workbook_SheetChange([COLOR=NAVY]ByVal[/COLOR] Sh [COLOR=NAVY]As Object[/COLOR], [COLOR=NAVY]ByVal[/COLOR] Target [COLOR=NAVY]As[/COLOR] Range)
[COLOR=NAVY]Dim[/COLOR] TabTemp [COLOR=NAVY]As Variant
Dim[/COLOR] L [COLOR=NAVY]As Long
Dim[/COLOR] V [COLOR=NAVY]As Variant[/COLOR]
[COLOR=GREEN]'Ne gère pas les sélections de plages[/COLOR]
[COLOR=NAVY]If[/COLOR] Target.Cells.Count > 1 [COLOR=NAVY]Then Exit Sub[/COLOR]
[COLOR=GREEN]'Vérifie la présence du format conditionnel "spécial"[/COLOR]
[COLOR=NAVY]If[/COLOR] Target.FormatConditions.Count < 1 [COLOR=NAVY]Then Exit Sub
If[/COLOR] Target.FormatConditions(1).Formula1 = "=mDF" [COLOR=NAVY]Then
With[/COLOR] Sheets("MFC")
[COLOR=GREEN]'Charge les préférences dans un tableau variant temporaire[/COLOR]
L = .Range("A65536").[COLOR=NAVY]End[/COLOR](xlUp).Row
TabTemp = .Range(.Cells(1, 1), .Cells(L, 1)).Value
[COLOR=GREEN]'Détermine le format à utiliser suivant la valeur de la cellule[/COLOR]
[COLOR=NAVY]If[/COLOR] Target.Value = "" [COLOR=NAVY]Then[/COLOR]
L = 1
[COLOR=NAVY]Else
For[/COLOR] L = 2 [COLOR=NAVY]To UBound[/COLOR](TabTemp, 1)
[COLOR=GREEN]'Fonctionne en minuscule/majuscule pour les chaines de caractères[/COLOR]
[COLOR=NAVY]If[/COLOR] UCase(Target.Value) = UCase(TabTemp(L, 1)) [COLOR=NAVY]Then Exit For
Next[/COLOR] L
[COLOR=NAVY]End If[/COLOR]
[COLOR=GREEN]'Gestion des erreurs (impératif, compte tenu de la désactivation des évènements)[/COLOR]
[COLOR=NAVY]On Error GoTo[/COLOR] Fin
Application.EnableEvents = [COLOR=NAVY]False[/COLOR]
[COLOR=GREEN]'Applique le format (sauf les bordures)[/COLOR]
.Cells(L, 2).Copy
V = Target.Formula
Target.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _
SkipBlanks:=[COLOR=NAVY]False[/COLOR], Transpose:=[COLOR=NAVY]False[/COLOR]
Target.Formula = V
[B]Target.EntireRow.PasteSpecial Paste:=xlPasteFormats [COLOR=GREEN]'<============= ligne ajoutée ici ===========[/COLOR]
[/B] [COLOR=GREEN]'Il semble que sur Mac et dans certaines situations (non ciblées) le format[/COLOR]
[COLOR=GREEN]'conditionnel "spécial" d'origine ne soit pas écrasé par le nouveau, il convient[/COLOR]
[COLOR=GREEN]'donc de s'en assurer avant de réimposer ce format spécial.[/COLOR]
[COLOR=NAVY]If[/COLOR] Target.FormatConditions.Count < 1 [COLOR=NAVY]Then[/COLOR] Target.FormatConditions.Add [COLOR=NAVY]Type[/COLOR]:=xlExpression, Formula1:="=mDF"
Application.CutCopyMode = [COLOR=NAVY]False[/COLOR]
Application.EnableEvents = [COLOR=NAVY]True
End With
End If
Exit Sub[/COLOR]
Fin:
[COLOR=GREEN]'En cas d'erreur dans le code, il convient impérativement de rétablir la gestion des[/COLOR]
[COLOR=GREEN]'évènements d'application pour la suite. Par une gestion d'erreur, on réaffecte la[/COLOR]
[COLOR=GREEN]'valeur True à la propriété Application.EnableEvents et on informe l'utilisateur qu'une[/COLOR]
[COLOR=GREEN]'erreur non gérée est survenue[/COLOR]
MsgBox "Erreur non gérée dans la procédure Workbook.SheetChange()" & vbLf & "Erreur : " & _
Err & " " & Err.Description, vbOKOnly, "myDearFriend!"
Application.EnableEvents = [COLOR=NAVY]True
End Sub[/COLOR][/SIZE]