XL 2016 Suivi des modifications d'un fichier excel

nae104

XLDnaute Nouveau
Bonjour,
Je viens de trouver ce code permettant d'afficher des commentaires(utilisateur,date,valeur avant et valeur après) dans toute cellule modifiée. Il fonctionne bien sauf que les utilisateurs n'arrivent pas à supprimer une ligne ou l'insérer !!

Je sais pas si je dois ajouter des lignes à ce code pour permettre l’insertion et la suppression des lignes !?
Ou si quelqu’un a une autre idée pour suivre les modifications sans partage du classeur parce qu'il contient des macros

Merciii :)

Private Sub Worksheet_Change(ByVal Target As Range)
'Updateby Extendoffice
Const xRg As String = "A1:Z1000"
Dim strOld As String
Dim strNew As String
Dim strCmt As String
Dim xLen As Long
With Target(1)
If Intersect(.Cells, Range(xRg)) Is Nothing Then Exit Sub
strNew = .Text
Application.EnableEvents = False
Application.Undo
strOld = .Text
.Value = strNew
Application.EnableEvents = True
strCmt = "Edit: " & Format$(Now, "dd Mmm YYYY hh:nn:ss") & " by " & _
Application.UserName & Chr(10) & "Previous Text :- " & strOld
If Target(1).Comment Is Nothing Then
.AddComment
Else
xLen = Len(.Comment.Shape.TextFrame.Characters.Text)
End If
With .Comment.Shape.TextFrame
.AutoSize = True
.Characters(Start:=xLen + 1).Insert IIf(xLen, vbLf, "") & strCmt
End With
End With

End Sub
 
Solution
Bonjour Nae,
Une solution simple est d'interdire la macro lorsque plusieurs cellules sont sélectionnées ( cas pour l'insertion ou la suppression ).
Il suffit de rajouter "If Target.Count > 1 Then Exit Sub" en début de macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Const xRg As String = "A1:Z1000"
...
...
Reste à savoir si ça couvre tous vos cas.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Nae,
Une solution simple est d'interdire la macro lorsque plusieurs cellules sont sélectionnées ( cas pour l'insertion ou la suppression ).
Il suffit de rajouter "If Target.Count > 1 Then Exit Sub" en début de macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Const xRg As String = "A1:Z1000"
...
...
Reste à savoir si ça couvre tous vos cas.
 

Efgé

XLDnaute Barbatruc
Bonjour

Attention, Target.count peut présenter des effets de bords en cas de sélection de toute la feuille en utilisant le carré à l'intersection des entêtes de lignes et de colonnes.
Mieux vaut utiliser CountLarge
VB:
If Target.CountLarge > 1 Then Exit Sub

Cordialement
 

Statistiques des forums

Discussions
311 709
Messages
2 081 769
Membres
101 816
dernier inscrit
Jfrcs