Innserer valeurs dans un commentaire

Bonjour,

Puis-je me permettre de vous poser une autre concernant la mise en forme des commentaires et rajouter un paramètre à mon code ?

Je m'explique :

Voici mon code :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Cel As Range

Dim Com As Comment

Dim Chaine As String

Dim Val1 As Integer

Dim Val2 As Integer

Val1 = 8: Val2 = 0

If Target.Row < 56 Then Exit Sub 'seulement à partir de la ligne 56

If Target.Count > 1 Then Exit Sub 'seulement une seule cellule

If Target.Row Mod 9 <> Val1 And Target.Row Mod 9 <> Val2 Then Exit Sub

If Target.Column > 390 Then Exit Sub 'seulement jusqu'à la colonne 390

If Target.Row Mod 9 = Val1 Then Set Cel = Target.Offset(-6) Else Set Cel = Target.Offset(-7)

With Cel

Set Com = .Comment

If Not Com Is Nothing Then Com.Delete

If Target.Row Mod 9 = Val1 Then

If Target.Value <> "" Then Chaine = Target.Value

If Target.Offset(1).Value <> "" Then Chaine = Chaine & IIf(Target.Value <> "-", vbCrLf & Target.Offset(1).Value, Target.Offset(1).Value)

Else 'sinon, pour Val2

If Target.Value <> "" Then Chaine = Target.Value

If Target.Offset(-1).Value <> "" Then Chaine = Target.Offset(-1).Value & IIf(Target.Value <> "", vbCrLf & Chaine, "")

End If

If Chaine <> "" Then

Set Com = .AddComment

Com.Text Chaine

Com.Shape.TextFrame.AutoSize = True

Com.Visible = True '<--- le commentaire reste toujours affiché

End If

End With

End Sub

Ce code me permet de mettre dans un commentaire les valeurs des cellules "Activité midi" et "activité soir"

J'essaie de modifier ce code pour insérer un "-" entre les 2 valeurs mais je n'y arrive pas et si possible que la valeur de "Activité midi" soit en minuscule et la valeur de "Activité soir" soit en majuscule :

  • Si les 2 valeurs sont renseignés, je voudrais donc que soit affiché dans le commentaire "valeur Activité midi" - "valeur activité soir" => ex : c-C
  • Si seulement la valeur de "Activité midi" est renseigné alors soit affiché "valeur Activité midi" - => ex : c-
  • Si seulement la valeur de "Activité soir" est renseigné alors affiché - "valeur activité soir" => ex : - C

De plus je voudrais qu'à la fin du commentaire soit affiché "*" si 1 commentaire existe dans la seconde ligne du résident (par exemple la ligne 57 pour SARICA, la ligne 66 pour DANEL, la ligne 75 pour ARRAMBIDE etc.

Je vous remercie de votre aide précieuse

Cordialement

17classeur1syl.xlsx (740.99 Ko)

Salut sylvainpyc,

quelque chose comme ça ?

Pas trop compris l'utilité de "*" et pas sûr de l'avoir utilisé à bon escient...

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim sData$, iRow%, iIdx8%, iIdx0%
'
iRow = Target.Row
If Target.Count > 1 Or iRow < 56 Or Target.Column > 390 Then Exit Sub
If iRow Mod 9 <> 8 And iRow Mod 9 <> 0 Then Exit Sub
'
Application.EnableEvents = False
'
With IIf(iRow Mod 9 = 8, Target.Offset(-6), Target.Offset(-7))
    .ClearComments
    iIdx8 = IIf(iRow Mod 9 = 8, 0, -1)
    iIdx0 = IIf(iRow Mod 9 = 8, 1, 0)
    If Target.Offset(iIdx8) <> "" Then sData = LCase(Target.Offset(iIdx8))
    If Target.Offset(iIdx8) <> "" Or Target.Offset(iIdx0) <> "" Then sData = sData & "-"
    If Target.Offset(iIdx0) <> "" Then sData = sData & UCase(Target.Offset(iIdx0)) & " *"
    If sData <> "" Then
        .AddComment
        .Comment.Text sData
        .Comment.Shape.TextFrame.AutoSize = True
        .Comment.Visible = True
    End If
End With
'
Application.EnableEvents = True
'
End Sub

A+

Bonjour,

Merci, votre code fonctionne trés bien.

Sauf pour l' "*"

Concernant "*", je voudrais que soit affiché une "*" quand par exemple pour le résident DANEL il y a un commentaire dans la ligne 67 (par ex dans le fichier ci-joint dans la cellule AW67.

J'ai un code ci-dessous qui me permet au clic droit de masquer ou afficher certaines lignes concernant chaque résident.

A l'impression, seules 2 lignes par résident sont affichées et par exemple pour le résident DANEL la ligne 67 sera masquée et l' "*" permettrait aux accompagnateurs de savoir qu'un commentaire caché donne l'explication de la modification de sa présence/absence.

Private Sub Worksheet_BeforeRightClick(ByVal R As Range, Cancel As Boolean)
  If Intersect(R, [B56:B191]) Is Nothing Or (R.Row - 2) Mod 9 Then Exit Sub
  Dim P As Range
  Cancel = True
  Set P = R(3, 1).Resize(7)
  P.EntireRow.Hidden = Not P.EntireRow.Hidden
  If P.EntireRow.Hidden = True Then Exit Sub
  R(4, 1).Resize(3).EntireRow.Hidden = True 'pour cacher
  R(9, 1).EntireRow.Hidden = True
End Sub

J'ai également un autre code qui me permet de repositionner les commentaires si je masque ou affiche des lignes ou des colonnes ce qui modifie l'emplacement des commentaires,j'appele ce code avec la zone de texte "replacer commentaires" en B55

Sub ResetComments()
Dim cmt As Comment
For Each cmt In ActiveSheet.Comments
   cmt.Shape.Top = cmt.Parent.Top + 5
   cmt.Shape.Left = _
      cmt.Parent.Offset(0, 1).Left + 5
Next
End Sub

Serait-il possible aussi svp en cliquant sur la zone de texte en B55 "mis à jour commentaires" d'utiliser votre code pour mettre à jour tous les commentaires de cette feuille ?

J'ai également remarqué que si je supprime une valeur de "activité midi" ou "activité soir" le commentaire se met bien à jour, mais si je supprimer les 2 valeurs en même temps, le commentaire ne se met pas à jour.

Je vous remercie de votre aide

Cordialement

Salut sylvainpyc,

normal que rien ne se passe lorsque tu effaces deux cellules puisque tu veux toi-même l'interdire !

If Target.Count > 1 Or iRow < 56 Or Target.Column > 390 Then Exit Sub

Un changement dans les lignes "cachées" 'Activités' ou 'Présence FH' ou un clic en [B55] met les commentaires des colonnes visibles à jour.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim sData$, x%, y%
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If Not Intersect(Target, Range("B55")) Is Nothing Then
    For x = 56 To 182 Step 9
        For y = Range("C1").Resize(Rows.Count, Columns.Count - 2).SpecialCells(xlCellTypeVisible).Column To Cells(55, Columns.Count).End(xlToLeft).Column
            If Cells(x + 2, y) <> "" Or Cells(x + 6, y) <> "" Or Cells(x + 7, y) <> "" Then Call SetComment(x, y)
        Next
    Next
End If
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

A+

11activites.xlsm (794.10 Ko)

Bonjour,

Les commentaires se mettent bien à jour quand je clique sur B55.

Par contre je voudrais qu'apparaisse une * si il y a un commentaire dans la ligne 58 et non une valeur.

Et quand je mets ce code dans mon fichier, ca ne fonctionne plus et ca arrête les macos ?

Est-ce possible svp ?

Je vous remercie de votre aide

Cordialement

La mis à jour des commentaires est facultatif, je peux les refaire manuellement si c'est cela qui me cause une erreur.

Je voudrais surtout svp que qu'apparaisse une * si il y a un commentaire dans la ligne 58 et non une valeur.

Merci

ca m'inquiète, les macros ne fonctionnent plus

J'ai mis votre code sur une copie du fichier officiel mais depuis les macros ne fonctionnent plus

Même quand j'ouvre le fichier officiel sur lequel je n'ai pas fait de modifs

Vous avez une explication svp ?

3classeur1.xlsm (734.84 Ko)

Salut Sylvain,

je pensais t'avoir envoyé la dernière version. On dirait que non! Je te l'envoie tout à l'heure quand j'aurai accès à l'ordinateur où elle "devrait" se trouver.

Quant à la cause du problème sur celle-ci, je vois, dans 'Stats repas' :

  • qu'il manque la Sub SetComment ;
  • que End Sub a disparu de la Sub Worksheet_SelectionChange !!

A+

Rechercher des sujets similaires à "innserer valeurs commentaire"