Figer la position d'un commentaire

Bonjour,

Je suis accompagnateur qui fait partie d'une équipe éducative qui accompagne des personnes handicapés dans un Foyer d'hébergement.

J'ai créé un fichier pour gérer les présences des résidents au foyer et aux repas.

Voici mon problème :

J'ai un feuille "Stats repas" pour saisir les informations concernant leurs présences et faire des calculs selon ces infos.

J'ai un code qui fonctionne bien qui permet par résident au clic droit :

  • de masquer certaines lignes et d'en afficher que 2 pour consultation
  • et au prochain clic droit d'afficher certaines lignes pour mettre à jour les infos
  • certaine lignes n'apparaissent jamais (formules pour calcul pour d'autres feuilles)
CODE ci dessous :
Private Sub Worksheet_BeforeRightClick(ByVal R As Range, Cancel As Boolean)
    If Intersect(R, [B56:B182]) 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
    Cancel = True
End Sub

Je masque aussi les colonnes correspondant aux dates passées pour imprimer le planning des semaines à venir.

J'ai un autre code (qui fonctionne bien) qui permet d'insérer sur la 1ère ligne des résidents dans un commentaire les informations saisies dans les lignes "activités midi" et "activités soir" du résidents ce qui nous permet de voir si le résident est absent au repas quand ces 2 lignes sont masquées (expliqué ci-dessus).

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

Donc quand je masque des colonnes ou que je masque/affiche des lignes par résidents, les commentaires se déplacent

Je voudrais donc que la position des commentaires restent fixe à côté de la cellule concernée comme par exemple la cellule AS74 et non comme la cellule AY119

Je voudrais en fait en vba reproduire ce qui est fait quand on fait un clic droit sur le commentaire et que l'on sélectionne "format de commentaire" => "propriétés" => "Déplacer sans dimensionner avec les cellules"

Pouvez-vous m'aider svp ?

Je vous remercie beaucoup

Voici ci-joint le fichier reprenant une copie de ma feuille

Cordialement

Bonjour,

Essaie cette procédure pour réinitiliaser la position de tes commentaires.

je te laisse le soin de la mettre en œuvre dans ton fichier.

Cdlt.

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

Merci beaucoup,

ca fonctionne parfaitement

Puis-je me permettre de vous poser une autre question 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

Rechercher des sujets similaires à "figer position commentaire"