Re Bonsoir PierreJean, le Fil, Bonsoir Jacou
Oui PierreJean, il y avait aussi ce ElseIf, plus opérationel (direct) que de passer par un autre 'subsequent' If.
Pour Jacou, si je peux me permettre, sans aucune prétention, je pense pouvoir te conseiller de faire attention à deux ou trois petites choses importantes si tu veux optimiser tes codes, non pas que ta solution ne fonctionne pas, mais elle vraiment digne d'un Western Napolitain, (
comme Ti_ m'avait 'allumé' une foiss)
Premièrement lors de macros évènementielles, toujours délimiter la zone du déclenchement sur la Feuille de l'évenmement...
Ici en l'occurrence ;
If Application.Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
(
Si la Target n'est pas en colonne(1) on ne déclenche rien)
Secondement toujours éviter les '
Select', ceci n'est pas pas conseillé, ça flash et ça rallentit le code un maximum :
Range('A65536').End(xlUp).Select
derlig = ActiveCell.Row
Range('A1:A' & derlig).Select
Selection.ClearComments
Cells(derlig, 1).Select
On peut faire la même chose ainsi :
Range('A1:A' & Range('A65536').End(xlUp).Row).ClearComments
Et pour finir, les 'acrobaties' avec
Goto cellsuivante et autres :
cellsuivante:
If ActiveCell.Row > 1 Then
ActiveCell.Offset(-1, 0).Select
GoTo boucle
End If
.... sont vraiment à éviter, au pire moi j'en utilise pour sortir d'une boucle, et évidemment les gestions d'erreurs.
Je pense que cette façon que tu as de faire provient d'un héritage de Programmation en Basic (
ça rajeunit pas), mais depuis le Visual Basic, il y a une panoplie de Functions, Méthodes, Instructions et de Proprietés qui permettent d'éviter ce genre de 'gymnastique'.
Voici une approche essayant de reprendre ton idée de base interressante pour le passage du Commentaire en tant que String.
Option Explicit
Const Bad As String = 'Attention : prévoir intervention'
Const VerYBad As String = 'Attention : dépassement'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Cell As Range
Dim Commentaire$
If Application.Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
Set Plage = Range(Range('A1'), Range('A65536').End(xlUp))
For Each Cell In Plage
Select Case Cell.Value
Case 0 To 50
Commentaire = Bad
Case Is < 0
Commentaire = VerYBad
Case Else
Cell.ClearComments
Commentaire = ''
End Select
If Not Commentaire = '' Then
With Cell
.ClearComments
.AddComment Commentaire
.Comment.Visible = True
.Comment.Shape.TextFrame.AutoSize = True
End With
End If
Next Cell
End Sub
Bonnes Fêtes de Pâques
[ol]@+Thierry[/ol]