Protéger les mises en forme conditionnelles sur fichier partagé Sharepoint
Bonjour à tous,
Je cherche le moyen de protéger les mises en formes conditionnelles dans un fichier partagé entre plusieurs personnes sur Sharepoint.
Ma problématique : l'utilisation du copier-coller par les nombreuses personnes ayant accès à ce fichier donne un joyeux bazar dans les règles de mises en forme conditionnelles déjà établies, malgré les rappels réguliers de coller uniquement les valeurs dans la cellule de destination.
S'il existe un moyen de "sanctuariser" ces mises en formes conditionnelles (comme un background), tout en permettant la modification des cellules concernées, ce serait un gain de temps monumental.
Merci d'avance pour tout conseil ou suggestion.
Bonjour Dugu,
Votre demande est comme chercher le saint graal
Ce n'est pas possible à moins de modifier les MFC par des formules indirectes avec les fonctions DECALER(), NB.SI(), etc..
Et encore, pas certain que cela fonctionne
A+
Bonjour,
Je m'y attendais un peu, n'ayant rien trouvé ailleurs non plus
Merci d'avoir pris le temps de me répondre
À bientôt
Hello,
il y a peut-être une solution si le fichier est ouvert avec l'application Excel et pas avec Excel web.
Option Explicit
Private Etat_CopyMode As Long ' état copier/couper lors de la dernière sélection
'-----------------------------------------------------------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
' Garde l'état à cause de la touche entrée qui colle sans passer par le collage
Etat_CopyMode = Application.CutCopyMode
End Sub
'--------------------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Valeurs_Collees As Variant
Dim Tempo As Variant
Dim Cellule As Range
' exit si : plusieurs cellules destination, pas de copy en cours, pas de collage effectuée
If Target.Areas.Count > 1 Then Exit Sub
If Application.CutCopyMode <> xlCopy And Etat_CopyMode <> xlCopy Then Exit Sub
If Not Est_Un_Collage(Derniere_Action()) Then Exit Sub
On Error GoTo Fin
Application.EnableEvents = False
Application.ScreenUpdating = False
Valeurs_Collees = Target.Value ' garde les valeurs collées
Application.Undo ' annule le collage
For Each Cellule In Target.Cells
If IsArray(Valeurs_Collees) Then
Tempo = Valeurs_Collees(Cellule.Row - Target.Row + 1, Cellule.Column - Target.Column + 1)
Else
Tempo = Valeurs_Collees
End If
If VarType(Tempo) <> vbString Then
Cellule.Value = Tempo ' nombre, date, booléen : type conservé
ElseIf Tempo Like "[=+@-]*" And Not IsNumeric(Tempo) Then
Cellule.Value = "'" & Tempo ' "=A1", "-x" : resteraient des formules
Else
Cellule.FormulaLocal = Tempo ' interprété selon le format de la cellule de destination
End If
Next Cellule
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'-------------------------------------------
Private Function Derniere_Action() As String
On Error Resume Next
Derniere_Action = Application.CommandBars.FindControl(ID:=128).List(1)
End Function
'-----------------------------------------------------------------
Private Function Est_Un_Collage(ByVal Action As String) As Boolean
Est_Un_Collage = (Action Like "Coll*") Or (Action Like "Paste*") 'ajouter en allemand si besoin
End FunctionA coller dans ThisWorkbook du classeur en question.
NB : ça ne fonctionnera pas si la copie provient d'une autre application. Là il faudrait passer par les APIs Windows.
Une autre idée avant d'envoyer : garder les formats dans une feuille et les réappliquer une fois le collage effectué