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)
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