faire apparaitre un commentaire

pascal21

XLDnaute Barbatruc
bonjour à tous
pourriez-vous m'indiquer svp, le moyen de faire apparaitre un commentaire sous condition.
je m'explique:
ex: si en a1, j'ai une valeur > à 50 alors pas de commentaire
si en a1j'ai une valeur >0 mais <=50 alors commentaire du genre 'attention prévoir etc....'
si en a1 j'ai une valeur <0 alors commentaire du genre 'attention depassement'
si aucune valeur n'est présente dans a1 alors pas de commentaire non plus
ce commentaire doit s'appliquer sur une trentaine de cellules de la colonne
il se peut que plusieurs cellules de la colonne a remplissent les conditions
merci
 

andré

XLDnaute Barbatruc
Salut Pascal,

Pourrais-tu être quelque peu plusn précis ?
¨
Par commentaire, songes-tu au menu Insertion / Commentaires, à un message du menu Outils / Validation, une textbox ou un texte dans une cellule voisine ?

Dans les deux premiers cas, il me semble que ce sera necessairement une macro.
Dans le dernier cas, le plus facile, une simple petite formule peut faire l'affaire.

A toi de préciser.
Â+
 

pierrejean

XLDnaute Barbatruc
bonjour Pascal21

Salut André

Dans l'hypothese d'un commentaire style insertion / commentaires

une macro a tester (et adapter eventuellement)

Code:
Sub Macro1()
For Each cel In Range('A1:A30')
cel.ClearComments
If cel > 0 And cel <= 50 Then
cel.AddComment
cel.Comment.Text Text:='Attention' & Chr(10) & ' Prevoir....'
Else
 If cel < 0 Then
   cel.AddComment
   cel.Comment.Text Text:='Attention' & Chr(10) & ' Depassement'
 End If
End If
Next cel
End Sub
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir PierreJean, Pascal, Cher Ami et Compatriote Ândré, le Forum

En complément de code de Pierre Jean, voici le même un peu pluus poussé ;)

Option Explicit

Sub PierreJeanCorrectif()
Dim Cel As Range

For Each Cel In Range('A1:A30')
   
With Cel
        .ClearComments
           
If .Value > 0 And .Value <= 50 Then
               
With .AddComment
                    .Text Text:='Attention Prevoir....'
                    .Visible =
False
                    .Shape.TextFrame.AutoSize =
True
               
End With
               
           
ElseIf .Value < 0 Then
                 
                 
With .AddComment
                        .Text Text:='Attention Depassement de ' & Cel
                        .Visible =
True
                             
With .Shape
                                .TextFrame.AutoSize =
True
                                   
With .OLEFormat.Object
                                           
With .Font
                                                .Name = 'Arial'
                                                .Size = 10
                                                .ColorIndex = 3
                                                .Bold =
True
                                           
End With
                                   
End With
                           
End With
                 
End With
           
End If
   
End With
Next Cel
End Sub


On notera que je reste dans le même 'If' grace au 'ElseIf' très utile dans ce cas là, ensuite dans une telle cascade 'l'identation' est indispensable pour s'y retrouver. Le 'Cel 'déclaré, permet aussi d'avoir des tas de petit dropdown en cours de programmation pour trouver toutes les propriétés successives.

Bonne Fête Pascal !

Arf non il n'est pas dans ce Fil,
Bonnes fêtes Pascales enfin Joyeuses Pâques

[ol]@+Thierry[/ol]
 

Jacou

XLDnaute Impliqué
Bonsoir à tous,
J'arrive un peu après la bataille mais je vous propose ceci -
cela prend en compte n'importe quelle série dans la colonne 1 (pas limitée à 30)

bonne fin de journée [file name=commentaire_20060415191546.zip size=8935]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/commentaire_20060415191546.zip[/file]
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
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]
 

Jacou

XLDnaute Impliqué
Rebonsoir à tous

Merci Thierry pour tes conseils.
C'est vrai que ta présentation est limpide, mais les très vieilles habitudes sont presque une seconde nature -si ce n'était que du basic ! c'est encore pire : du FORTRAN ou du COBOL ;) alors tu vois ça ne nous rajeunit effectivement pas
Bonnes Pâques à tous
 

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 456
Membres
103 546
dernier inscrit
mohamed tano