Espionnage: Comment limiter macro á qques colonnes?
Bonjour!
Sur le formidable site http://boisgontierjacques.free.fr/ , j'ai trouvé les lignes de code qu'il mme manquait pour espionner les utilisateurs de mon fichier...
Tout marche parfaitement, la macro permet de voir quelles cellules ont été modifiées, par qui, quand...ect, c'est super....
Mais le pb est que je souhaiterais limiter l'espionnage á seulement qques colonnes de certaines de mes feuilles...
Qq'un pourrait adapter mes lignes de codes á un espionnage qui se limite aux colonnes 1 et 2 de la feuill1 et a la colonne 3 de la feuill2 par exemple!
Voici le code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Espion" Then
Application.EnableEvents = False
temp = Application.CountA(Sheets("espion").Range("a:a")) + 1
Sheets("espion").Cells(temp, 1) = Sh.Name
Sheets("espion").Cells(temp, 2) = Target.Address
Sheets("espion").Cells(temp, 3) = Now
Sheets("espion").Cells(temp, 4) = [mémo]
Sheets("espion").Cells(temp, 5) = Target
Sheets("espion").Cells(temp, 6) = Environ("username")
Application.EnableEvents = True
End If
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & ActiveCell.Value & Chr(34)
End SubCar je vous avoue que je l'utilise sans vraiment le comprendre, dc j'arrive pas a le modifier...
Merci bcp de votre aide!
Bonjour,
remplace ton premier code par celui-ci (que j'ai commenté) :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Espion" Then 'si le nom de la feuille où une donnée est modifiée n'est pas "Espion"
If (Sh.Name = "Feuil1" And Target.Column <= 2) Or _
(Sh.Name = "Feuil2" And Target.Column = 3) Then 'si dans les 2 premières colonnes de la feuille 1
' ou dans la 3ème de la feuille 2
Application.EnableEvents = False 'désactivation des évènements
temp = Application.CountA(Sheets("espion").Range("a:a")) + 1 'calcul des données dans la première
'colonne de la feuille "Espion" + 1 correspondant à la première ligne vide
Sheets("espion").Cells(temp, 1) = Sh.Name 'inscription de la feuille modifiée
Sheets("espion").Cells(temp, 2) = Target.Address 'adresse de la cellule modifiée
Sheets("espion").Cells(temp, 3) = Now 'heure de la modification
Sheets("espion").Cells(temp, 4) = [mémo] 'ancienne valeur de la cellule, obtenue lorsque
'tu changes de sélection dans ta feuille, ou que tu actives la feuille
'par insertion d'un nom dont la valeur est celle de la cellule sélectionnée
Sheets("espion").Cells(temp, 5) = Target 'nouvelle valeur
Sheets("espion").Cells(temp, 6) = Environ("username") 'nom de l'ordinateur
Application.EnableEvents = True 'réactivation des évènements
End If
End If
End Submerci bcp! ca a l'air de marcher nikel!
faut encore que je fasse qques tests, mais ca a l'air bon!
merci bcp.... je te redis si je trouve un pb!
tchao bonne soirée!
hello
que voilà un code très commenté.
on devrait tous en prendre de la graine. Bravo !
Merci bcp pour les lignes de codes et les commentaires, ca marche et ca m'a bien aidé á comprendre!!!
Cependant, j'ai un bug (enfin le message debug) parfois sur cette ligne de code, qd j'utilise une autre macro... Mais ca ne le fait pas tout le tps... bizarre... en fait, ma macro est assez compliquée car elle a pour but de faire la somme de chiffres selectionnées, grace a un tri et a un sous total...
Bref, quand j'utilise cette macro, ca me fait une bug sur la ligne de l'espionnage parfois...
Est ce qu'il est possible d'utiliser une autre ecriture pour la ligne et peut etre qu'il n'y aurait plus le bug comme ca...!
Le code de l'espionnage est le suivant>>>c'est la ligne en gras qui bug!
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Espion"
If (Sh.Name = "Feuil1" And Target.Column <= 2) Or _
(Sh.Name = "Feuil2" And Target.Column = 3) Then
Application.EnableEvents = False
temp = Application.CountA(Sheets("espion").Range("a:a")) + 1
Sheets("espion").Cells(temp, 1) = Sh.Name
Sheets("espion").Cells(temp, 2) = Target.Address
Sheets("espion").Cells(temp, 3) = Now
Sheets("espion").Cells(temp, 4) = [mémo]
Sheets("espion").Cells(temp, 5) = Target
Sheets("espion").Cells(temp, 6) = Environ("username")
Application.EnableEvents = True
End If
End If
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & ActiveCell.Value & Chr(34)
End Sub
Merci de votre aide
je voudrais au moins comprendre ce que veut dire cette ligne... si c'est possible...
merci
Bonsoir,
@ jmd, merci pour ce compliment, mais j'ai un gros défaut, je suis parfois trop direct, et oublie bien souvent de commenter mes codes. Merci
@ dabom
je voudrais au moins comprendre ce que veut dire cette ligne... si c'est possible...
Bien sûr,
ce code te permet d'inscrire le nom de la valeur de la cellule que tu viens de sélectionner.
Pour en vérifier la valeur, tu vas dans Insertion/Nom/Définir, et tu cliques sur "mémo"
pour vérifier, dans une cellule vide, tu entres :
=mémoet, ensuite, sélectionne des cellules non vides
dans ta cellule, tu auras la valeur de cette cellule
Maintenant, si tu couples cette macro, avec une autre, que je ne connais pas, il risque effectivement d'y avoir quelques interférences, surtout, si dans le code de l'autre macro, il apparait quelques
[Cellule_quelconque].Select