condition, SelectionChange(ByVal Target As Range)

news

XLDnaute Impliqué
Bonjour à tous du forum,

besoin d'une condition
uniquement s'îl y a une couleur de fond mis dans une plage de données, qu'est affiché l'historique de changement dans commentaire,
sinon rien est affiché ( pour éviter que pour n'importe click avec le curser sur ActiveWorksheet qu'est affiché un commentaire )

Ne sait pas quel code est à utiliser pour ajouter cette conditon à la procédure suivante:

Code:
[B]Private Sub Worksheet_SelectionChange(ByVal Target As Range)[/B]
  Application.EnableEvents = False
  If Target.Column <> 0 Then                  
    On Error Resume Next                        
    Err = 0
    temp = Target.Comment.Text                 
    If Err <> 0 Then Target.AddComment          
    Target.Comment.Text Text:=Target.Comment.Text & _
       Target.Value & " Modifié par:" & NomUtil() & _
         " Le " & Now & vbLf
    Target.Comment.Visible = True
    Target.Comment.Shape.Select
    Selection.AutoSize = True
    Target.Comment.Visible = False
    On Error GoTo 0                             
  End If
  Application.EnableEvents = True
End Sub
 

news

XLDnaute Impliqué
Re : condition, SelectionChange(ByVal Target As Range)

Bonjour à tous du forum,

merci Banzai64 pour réponse,
Re: If Target.Column <> 0 Then, mais pour avoir l'événement il faut être sur la feuille non

d'accord, mais on pouvait utiliser également If Target.Column = 5 Then
(afin uniquemnt dans colonne 5 est mis un commentaire)


j'ai ajouté le code suivant dans l'évènement, pour n'importe quelle couleur ajoutée, est mis un commentaire ( If Cel.Interior.ColorIndex <> xlNone Then),
mais cela ne fonctionne pas, aucun commentaire est ajouté

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Application.EnableEvents = False
[B]If Cel.Interior.ColorIndex <> xlNone Then[/B]
  If Target.Column <> 0 Then                  
    On Error Resume Next                        
    Err = 0
    temp = Target.Comment.Text                 
    If Err <> 0 Then Target.AddComment          
    Target.Comment.Text Text:=Target.Comment.Text & _
       Target.Value & " Modifié par:" & NomUtil() & _
         " Le " & Now & vbLf
    Target.Comment.Visible = True
    Target.Comment.Shape.Select
    Selection.AutoSize = True
    Target.Comment.Visible = False
    On Error GoTo 0                             
  End If
End if
  Application.EnableEvents = True
End Sub
 

Banzai64

XLDnaute Accro
Re : condition, SelectionChange(ByVal Target As Range)

Re

Remplace

Code:
If Cel.Interior.ColorIndex <> xlNone

Par

Code:
If [COLOR="Red"]Target[/COLOR].Interior.ColorIndex <> xlNone

Pour éviter ce genre de problèmes pensez à utiliser

OPTION EXPLICIT
 

news

XLDnaute Impliqué
Re : condition, SelectionChange(ByVal Target As Range)

Bonjour à tous du forum,

merci de réponse Bonzai64,

mais avec Option Explicit,
un autre bug est affiché, variable non défini ( mais sans Option explicit et sans ajouter une condition
(If Target.Interior.ColorIndex <> xlNone), cela fonctionnait

voir ci-joint fichier
 

Pièces jointes

  • ajouté_fonction_dans_module,5.zip
    29.7 KB · Affichages: 55
  • ajouté_fonction_dans_module,5.zip
    29.7 KB · Affichages: 33
  • ajouté_fonction_dans_module,5.zip
    29.7 KB · Affichages: 46
Dernière édition:

matthieu33

XLDnaute Occasionnel
Re : condition, SelectionChange(ByVal Target As Range)

Bonjour News, Banzai64 et le forum,

En début de procédure Worksheet_SelectionChange, tu dois déclarer la variable Temp :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim temp As String
    
  Application.EnableEvents = False
   
If Target.Interior.ColorIndex <> xlNone Then
'  If Target.Column = 11 Then                   ' colonne 11 seulement
'  If Target.Column <> 0 Then                   ' toutes les colonnes
    On Error Resume Next                        ' active la gestion d'erreur
    Err = 0
    temp = Target.Comment.Text                  ' Commentaire existe t-il?
    If Err <> 0 Then Target.AddComment          ' Création commentaire
    Target.Comment.Text Text:=Target.Comment.Text & _
       Target.Value & " Modifié par:" & NomUtil() & _
         " Le " & Now & vbLf
    Target.Comment.Visible = True
    Target.Comment.Shape.Select
    Selection.AutoSize = True
    Target.Comment.Visible = False
    On Error GoTo 0                             ' désactive la gestion d'erreurs
End If
  Application.EnableEvents = True
End Sub
@+
 

Banzai64

XLDnaute Accro
Re : condition, SelectionChange(ByVal Target As Range)

Re
Option Explicit force la déclaration de TOUTES les variables cela permet entre-autre d'éviter des erreurs comme la confusion des noms de variables (derlig et derlg ou truc et turc)


Donc cela oblige à déclarer tes variables dans chaque module

Dans
Function NomUtil()
Dim temp As Object
et dans
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim temp As String
 

news

XLDnaute Impliqué
Re : condition, SelectionChange(ByVal Target As Range)

Bonjour à tous du forum,

merci Banzai64 et matthieu33 pour le temps pris de résoudre et de vos explications concernant les variables et Option Explicit,

cela fonctionne,

uniquement la condition d'afficher un commentaire n'est pas celle que je voudrais.
Actuellement un commentaire est affiché s'il existe déjà une couleur de fond et par après on clique dessus.

Mais, aurais besoin que dès qu'on met une couleur de fond est affiché le commentaire,

j'ai essayé avec le code Target.Cells ou Target.Font ou Target.Activate
mais cela ne fonctionne pas, respectivement est indiqué un bug,

peut-être vous pouvez m'indiquer conment modifier le code suivant
voir fichier ci-joint
 

Pièces jointes

  • ajouté_fonction_dans_module,05.zip
    30.6 KB · Affichages: 24
  • ajouté_fonction_dans_module,05.zip
    30.6 KB · Affichages: 28
  • ajouté_fonction_dans_module,05.zip
    30.6 KB · Affichages: 27
Dernière édition:

Banzai64

XLDnaute Accro
Re : condition, SelectionChange(ByVal Target As Range)

Bonjour

A ma connaissance (limitée) je ne crois pas que le fait de mettre une couleur dans une cellule déclenche un événement
Alors je ne vois pas comment faire
Tes commentaires risquent de devenir très important car le fait de passer sur une cellule en couleur (avec les touches curseurs) rajoute une annotation
La 2ème méthode avec Worksheet_Change permet de vérifier si un changement dans la cellule me parait plus appropriée. Mais ce n'est pas mon programme.

Mais s'il existe une solution je suis preneur
 

news

XLDnaute Impliqué
Re : condition, SelectionChange(ByVal Target As Range)

Bonjour à tous du forum,

merci Banzai64 pour explications,

si on ne peut pas déclencher un évènement en mettant une couleur de fond,
je vais opter pour 2e méthode, Private Sub Worksheet Change(ByVal Target As Range)

bonne journée encore,
 

Discussions similaires

Statistiques des forums

Discussions
312 452
Messages
2 088 540
Membres
103 879
dernier inscrit
JJB2