XL 2016 Figer la position de la fenêtre de commentaire dans une zone de la feuille de calcul visible.

babast_s

XLDnaute Nouveau
Bonjour à tous,

Je cherche à délimiter une zone sur ma feuille de calcul pour afficher les images que j'intègre dans les commentaires des diverses cellules.
Le souci c'est lors de l'intégration de l'image, la dimension de la fenêtre de commentaire reste, mais pas sa position sur la feuille de calcul.
De ce fait les trois quart de l'affichage des image se font or de l’écran, il faut donc se déplacer sur la feuille de calcule alors que je n'ai pas besoin de le faire.
Il existe peut être une autre solution, mais or de ma connaissance pour le moment.

Merci pour votre aide, bonne journée, babast.

exemple.jpg
 

Phil69970

XLDnaute Barbatruc
Bonjour Babast_s, Job75, le forum

Il y a quelques temps j'avais posté ceci :

Essaye ce code dans un nouveau fichier vierge :
Avec ta souris fait défiler la feuille et après clic et recommence .... et observe

VB:
'Dans un module
Sub Commentaire()
With Range("J3")
    .ClearComments
    .AddComment
    .Comment.Visible = True
    .Comment.Text Text:="C'est super:" & Chr(10) & "Test"   'Le texte du commentaire
    '.Comment.Shape.Top = Range("J13").Top                  'Ne sert pas ici
    .Comment.Shape.Left = Range("J13").Left
    DerLigVisible = Split(ActiveWindow.VisibleRange.Address, "$")(4)
    EcartLigne = DerLigVisible - 16
    .Comment.Shape.Top = Range("J" & EcartLigne).Top
    .Comment.Shape.OLEFormat.Object.Font.Bold = True    'Police en gras
    .Comment.Shape.OLEFormat.Object.Font.ColorIndex = 5 'Couleur de la police
    .Comment.Shape.Fill.ForeColor.SchemeColor = 47      'Orange
    .Comment.Shape.TextFrame.AutoSize = True
End With
End Sub

'**********
'Dans le code de la feuille

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Commentaire
End Sub

@Phil69970
 

babast_s

XLDnaute Nouveau
Bonjour job75,

Merci pour cette information, mais il doit bien avoir une solution pour que l'image ne sois pas couper. Ou bien afficher l'image souhaiter lier à une cellule dans une zone de la feuille de calcul.

Merci, babast.
PS: Phil69970, je testerai tout à l'heure, merci pour ton poste.
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Pour afficher une image dans une feuille. Ici les positions / dimensions sont celles d'une cellule, mais ça se modifie selon le besoin.
D'ailleurs ce codes est peut-être adaptable avec celui de Job75 en utilisant la Shape du Commentaire.
VB:
Sub InsererImage()
    Dim NomCompletImage As String
    Dim Sh As Shape
    Dim Left As Integer
    Dim Top As Integer
    Dim Width As Integer
    Dim Height As Integer
   
    Left = [F5].Left
    Top = [F5].Top
    Width = [F5].Width
    Height = [F5].Height
   
    On Error Resume Next
    ActiveSheet.Shapes("MonImage").Delete
    On Error GoTo 0
   
    Set Sh = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Left, Top, Width, Height) 'left, top, width, heigth
    Sh.Name = "MonImage"

    NomCompletImage = "H:\Téléchargements\20200805_161153.jpg"
    Sh.Fill.UserPicture NomCompletImage
End Sub
 

job75

XLDnaute Barbatruc
il doit bien avoir une solution pour que l'image ne sois pas couper.
Oui bien sûr mais il faut alors sélectionner la cellule ou faire un double-clic dessus.

Placez donc dans le code de la feuille ces macros :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not ActiveCell.Comment Is Nothing Then ActiveCell.Comment.Shape.Top = 15
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not ActiveCell.Comment Is Nothing Then Cancel = True: ActiveCell.Comment.Shape.Top = 15
End Sub
Bonjour Phil69970, Dudu2.
 

Dudu2

XLDnaute Barbatruc
Sinon, c'est possible de placer une image dans la Shape du Commentaire, par exemple:
Dans un module:
VB:
Sub Commentaire(ByVal Target As Range)
    Static PreviousTarget As Range

    If Not PreviousTarget Is Nothing Then PreviousTarget.Comment.Delete
    Set PreviousTarget = Target
    
    With Target
        .ClearComments
        .AddComment
        .Comment.Visible = True
        With Target.Comment.Shape
            .Height = 120
            .Width = 240
            
            '------------------------------------------------------
            'Par rapport à la cellule active et au Visible Range
            'd'où il faut retirer la dernière ligne et colonne qui
            'sont incluses dans le Visible Range mais pas forcément
            'complètement visibles
            '------------------------------------------------------
            .Top = Target.Top
            'If .Top + .Height > ActiveWindow.VisibleRange.Height + ActiveWindow.VisibleRange.Top Then .Top = Target.Top - .Height
            If .Top + .Height > ActiveWindow.VisibleRange.Height _
                                - Rows(ActiveWindow.VisibleRange.Row + ActiveWindow.VisibleRange.Rows.Count - 1).Height _
                                + ActiveWindow.VisibleRange.Top Then .Top = Target.Top - .Height
            
            .Left = Target.Left + Target.Width
            'If .Left + .Width > ActiveWindow.VisibleRange.Width + ActiveWindow.VisibleRange.Left Then .Left = Target.Left - .Width
            If .Left + .Width > ActiveWindow.VisibleRange.Width _
                                - Columns(ActiveWindow.VisibleRange.Column + ActiveWindow.VisibleRange.Columns.Count - 1).Width _
                                + ActiveWindow.VisibleRange.Left Then .Left = Target.Left - .Width
            
            '--------------------------------
            'Au centre de la fenêtre Excel
            '--------------------------------
            '.Top = ActiveWindow.VisibleRange.Top + (ActiveWindow.VisibleRange.Height - .Height) / 2
            '.Left = ActiveWindow.VisibleRange.Left + (ActiveWindow.VisibleRange.Width - .Width) / 2
            
            .Fill.UserPicture "H:\Téléchargements\20200805_161153.jpg"
        
            '.Comment.Text Text:="C'est super:" & Chr(10) & "Test"   'Le texte du commentaire
            '.OLEFormat.Object.Font.Bold = True    'Police en gras
            '.OLEFormat.Object.Font.ColorIndex = 5 'Couleur de la police
            '.Fill.ForeColor.SchemeColor = 47      'Orange
            '.TextFrame.AutoSize = True
        End With
    End With
End Sub

Dans le code de la feuille:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        Application.EnableEvents = False
        Call Commentaire(Target)
        Application.EnableEvents = True
    End If
End Sub
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Ok, donc ce n'est qu'une question de placement en fonction de la hauteur et largeur de l'image pour qu'elle reste dans l'écran
VB:
With Target.Comment.Shape
            .Height = 120
            .Width = 240
            
            'Par rapport à la cellule active
            '-------------------------------
            .Top = Target.Top
            If .Top + .Height > ActiveWindow.VisibleRange.Height + ActiveWindow.VisibleRange.Top Then .Top = Target.Top - .Height
            .Left = Target.Left + Target.Width
            If .Left + .Width > ActiveWindow.VisibleRange.Width + ActiveWindow.VisibleRange.Left Then .Left = Target.Left - .Width
            
            'Au centre de la fenêtre Excel
            '--------------------------------
            '.Top = ActiveWindow.VisibleRange.Top + (ActiveWindow.VisibleRange.Height - .Height) / 2
            '.Left = ActiveWindow.VisibleRange.Left + (ActiveWindow.VisibleRange.Width - .Width) / 2

Je corrige mon post #7
 

Dudu2

XLDnaute Barbatruc
Encore que le VisibleRange est un peu trompeur car il inclut la dernière ligne et colonne visibles mais pas forcément complètement visibles. Il faut donc par précaution en retirer les largeur et hauteur pour être sûr de rester dans la partie visible de la fenêtre Excel.
VB:
With Target.Comment.Shape
            .Height = 120
            .Width = 240
           
            '------------------------------------------------------
            'Par rapport à la cellule active et au Visible Range
            'd'où il faut retirer la dernière ligne et colonne qui
            'sont incluses dans le Visible Range mais pas forcément
            'complètement visibles
            '------------------------------------------------------
            .Top = Target.Top
            'If .Top + .Height > ActiveWindow.VisibleRange.Height + ActiveWindow.VisibleRange.Top Then .Top = Target.Top - .Height
            If .Top + .Height > ActiveWindow.VisibleRange.Height _
                                - Rows(ActiveWindow.VisibleRange.Row + ActiveWindow.VisibleRange.Rows.Count - 1).Height _
                                + ActiveWindow.VisibleRange.Top Then .Top = Target.Top - .Height
           
            .Left = Target.Left + Target.Width
            'If .Left + .Width > ActiveWindow.VisibleRange.Width + ActiveWindow.VisibleRange.Left Then .Left = Target.Left - .Width
            If .Left + .Width > ActiveWindow.VisibleRange.Width _
                                - Columns(ActiveWindow.VisibleRange.Column + ActiveWindow.VisibleRange.Columns.Count - 1).Width _
                                + ActiveWindow.VisibleRange.Left Then .Left = Target.Left - .Width
           
            '--------------------------------
            'Au centre de la fenêtre Excel
            '--------------------------------
            '.Top = ActiveWindow.VisibleRange.Top + (ActiveWindow.VisibleRange.Height - .Height) / 2
            '.Left = ActiveWindow.VisibleRange.Left + (ActiveWindow.VisibleRange.Width - .Width) / 2

je (re) corrige le post #7.
 

babast_s

XLDnaute Nouveau
Merci, à tous pour vos réponses, mais j'avoue être un peu perdu, je vous joints un modèle afin que vos bonnes âmes regardent mon fichier afin de comprendre plus facilement mon souci.
j'ai tenter vos explications, mais je ne suis pas encore assez chevronné pour la mise en application.

Encore merci à vous, babast.
 

Pièces jointes

  • Modèles babast.xlsx
    333.6 KB · Affichages: 13
  • Sans titre-1.jpg
    Sans titre-1.jpg
    78.9 KB · Affichages: 11

Dudu2

XLDnaute Barbatruc
Il faut que tu aies un affichage dynamique de l'image, c'est à dire programmé (*) sur un évènement(**) car si tu prédéfinis l'image dans le commentaire, à l'affichage l'image sera toujours identiquement placée et ne pourra pas s'adapter au scroll horizontal ou vertical définis à l'utilisation.
(*) en VBA capable d'analyser les paramètres image et écran pour positionner l'image correctement.
(**) Les seuls évènements exploitables sont le Selection_Change(), Click(), DblClick() sur la feuille.
Je ne connais pas d'évènement déclenché à l'affichage d'un commentaire.
 

Dudu2

XLDnaute Barbatruc
La seule chose que je peux te proposer c'est de corriger la position du commentaire contenant l'image lorsqu'on sélectionne la cellule ce qui implique un clic souris ou un déplacement curseur, alors que l'affichage par défaut du commentaire se fait sans cela et sur un simple "mouse over" que je ne sais pas intercepter.
Edit: en fait il est possible d'analyser la position du curseur toutes les 1 secondes et déterminer sur quelle cellule il se trouve, mais c'est une solution un peu sophistiquée qui n'est sans doute pas à appliquer ici.
 
Dernière édition:

job75

XLDnaute Barbatruc
Merci, à tous pour vos réponses, mais j'avoue être un peu perdu, je vous joints un modèle afin que vos bonnes âmes regardent mon fichier afin de comprendre plus facilement mon souci.
On a tous compris votre souci mais vous vous n'avez pas essayé de comprendre mon pos #6 !!!

Votre fichier avec les 2 macros dans le code de la feuille (clic droit sur l'onglet et Visualiser le code).
 

Pièces jointes

  • Modèles babast(1).xlsm
    338.7 KB · Affichages: 12

Discussions similaires

Statistiques des forums

Discussions
312 034
Messages
2 084 808
Membres
102 676
dernier inscrit
LN6