Conserver la mise en forme dans le commentaire déjà saisi

klin89

XLDnaute Accro
Bonsoir le forum,

A l'ouverture du fichier saisir klin89 dans l'inputbox ----> Workbook_Open()-----> Rien à craindre (Code de Job75 décliné)

Dans le module de la feuille "2012", j'ai placé cette macro qui colorie successivement (3 couleurs) le montant déjà saisi, puis ajoute un commentaire.
Dans l'ajout du commentaire, à chaque début de ligne figure le montant inséré de la target, or j'aimerais que ce montant conserve la couleur attribué lors du double clic.

Actuellement, seule la couleur au dernier double clic (dernier ajout dans le commentaire) est conservée.
Comment puis-je conserver les couleurs initialement appliquées.

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Change la couleur de la cellule au double-clic
If Intersect(Target, Range("B3:M" & Range("A65536").End(xlUp).Row - 3)) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Application.EnableEvents = False
Cancel = True
With Target.Font
  Select Case .ColorIndex
    Case Is = xlAutomatic
        .ColorIndex = 5 'Bleu
    Case 5
        .ColorIndex = 3 'rouge
    Case Else
        .ColorIndex = xlAutomatic 'noir
  End Select
  .Bold = IIf(.ColorIndex = xlAutomatic, 0, 1)
End With
If Target.NoteText = "" Then Target.AddComment: Pos = 1 ' Création commentaire
If Pos <> 1 Then
  Pos_dernier_vblf_commentaire = InStrRev(Target.Comment.Text, vbLf)
  Pos = InStrRev(Target.Comment.Text, vbLf, Pos_dernier_vblf_commentaire) + 1
End If
  With Target.Comment
    .Text Text:=.Text & Format(Target.Value, "# ##0.00 €") & " modifié par " & NomUtilisateur & " le : " & Date & " à " & Time & vbLf
    .Visible = True
    .Shape.DrawingObject.AutoSize = True
    .Visible = False
  End With
  lg = Len(Target.Comment.Text)
  lg1 = Len(Target.Text) + 3
  coul = Target.Font.ColorIndex
  With Target.Comment.Shape.TextFrame
    .Characters(Start:=1, Length:=lg).Font.Name = "Verdana"
    .Characters(Start:=1, Length:=lg).Font.Size = 12
    .Characters(Start:=1, Length:=lg).Font.ColorIndex = 1
    .Characters(Start:=1, Length:=lg).Font.Bold = False
    .Characters(Start:=1, Length:=lg).Font.Italic = False
    .Characters(Start:=Pos, Length:=lg1).Font.Bold = True
    .Characters(Start:=Pos, Length:=lg1).Font.ColorIndex = coul
  End With
Application.EnableEvents = True
End Sub

Worksheet_Change est construit sur le même modèle.
Je ne vois pas comment procéder, j'ai pensé à splitter le commentaire, chercher les positions et les couleurs du premier caractère de chaque ligne de commentaire, les placer dans 2 variables tableau puis après je me perds :confused:

Pouvez-vous m'aider ?
Klin89
 

Pièces jointes

  • Addcomment.zip
    35.5 KB · Affichages: 33
Dernière édition:

klin89

XLDnaute Accro
Re : Conserver la mise en forme dans le commentaire déjà saisi

Bonjour et Excel-lente année à tous :)

Je résume :
Dans la feuille "2012", au double clic le montant figurant dans la cellule change de couleur et doit venir s'insérer dans le commentaire et garder sa couleur, le commentaire gardant aussi sa mise en forme initiale :p

Dans le Worksheet_BeforeDoubleClick, j'ai intégré 2 variables tableau :
tbl = Split(Target.Comment.Text, vbLf)
Qui splitte le commentaire.
tblLignes(1 To UBound(tbl) + 1, 1 To 5)
Qui reprend chaque ligne du commentaire en question.

Le problème vient de cette instruction qui est sensée me renvoyer la couleur du 1er caractère de chaque ligne du commentaire initial.
'la couleur du caractère en question
tblLignes(i + 1, 5) = Target.Comment.Shape.TextFrame.Characters(tblLignes(i + 1, 1), 1).Font.ColorIndex

Cela fonctionne, sauf qu'au 3ème double-clic, la valeur renvoyée est égale à 74 :(
et donc un bug se produit ici :
VB:
With Target.Comment.Shape.TextFrame
    .../...
   For m = LBound(tblLignes, 1) To UBound(tblLignes, 1) - 1
    .Characters(Start:=tblLignes(m, 1), Length:=tblLignes(m, 2)).Font.Bold = True
    .Characters(Start:=tblLignes(m, 1), Length:=tblLignes(m, 2)).Font.ColorIndex = tblLignes(m, 5)
   Next m
   .../... 
End With
Alors qu'il n'y a que 3 index de couleurs possibles : Rouge =3, Bleu =5, noir =1

Faire les essais dans les cellules possédant un commentaire, sinon autre bug (je verrai plus tard).
Ne faut t-il pas intégrer l'opérateur Mod dans la syntaxe, mais je ne sais pas faire.

Pouvez-vous me venir en aide ?
Klin89
 

Pièces jointes

  • AddcommentV1.xls
    101 KB · Affichages: 68

david84

XLDnaute Barbatruc
Re : Conserver la mise en forme dans le commentaire déjà saisi

Bonsoir Klin89,
je n'ai pas le temps tout de suite mais déjà, histoire de comprendre ce que tu veux : est-ce que le but de la manœuvre est d'attribuer à la cellule nouvellement placée dans le commentaire la couleur de la cellule sur laquelle tu as cliqué ? Si ce n'est pas cela, merci d'expliquer le résultat attendu.
A+
 

klin89

XLDnaute Accro
Re : Conserver la mise en forme dans le commentaire déjà saisi

Salut David :)

Il me semble avoir trouvé :
en rajoutant ceci avant Next i
Code:
If tblLignes(i + 1, 5) = 74 Then tblLignes(i + 1, 5) = 1

VB:
'Dans le module de la feuille "2012"
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
.../...
   'la couleur du caractère en question
    tblLignes(i + 1, 5) = Target.Comment.Shape.TextFrame.Characters(tblLignes(i + 1, 1), 1).Font.ColorIndex
    If tblLignes(i + 1, 5) = 74 Then tblLignes(i + 1, 5) = 1
Next i
.../...

Pour comprendre double-clic successivement sur les cellules contenant un commentaire pour voir le résultat souhaité.
Les montants s'afficheront successivement dans le commentaire avec la mise en forme de la cellule cliquée (couleur de la Font)

Klin89
 

david84

XLDnaute Barbatruc
Re : Conserver la mise en forme dans le commentaire déjà saisi

Re
Même en faisant du pas à pas, je n'arrive pas à m'expliquer comment
tblLignes(i + 1, 5) = Target.Comment.Shape.TextFrame.Characters(tblLignes(i + 1, 1), 1).Font.ColorIndex
peut prendre la valeur 74.
Il y a visiblement quelque chose que je n'ai pas compris dans le déroulement de la macro.
Peut-être qu'en y revenant demain à tête reposée je comprendrai, mais là je ne me l'explique pas.
A+
 

klin89

XLDnaute Accro
Re : Conserver la mise en forme dans le commentaire déjà saisi

re david,

Moi aussi, j'ai du mal à l'expliquer :

Avec cette instruction :
tblLignes(i + 1, 5) = Target.Comment.Shape.TextFrame.Characters(tblLignes(i + 1, 1), 1).Font.ColorIndex Mod 56

tblLignes(i + 1, 5) prend la valeur 18 soit 74 - 56
56 comme le nombre de couleurs

Klin89
 

david84

XLDnaute Barbatruc
Re : Conserver la mise en forme dans le commentaire déjà saisi

Re klin89,
c'est pour cela qu'avant de trouver une solution "à l'arrache", je pense qu'il vaut mieux tenter de comprendre ce qui se passe.
La solution sera alors plus sure.
Je regarde de mon côté si j'arrive à comprendre ce qui créé ce phénomène.
A+
 

david84

XLDnaute Barbatruc
Re : Conserver la mise en forme dans le commentaire déjà saisi

Re Klin89,
Si je passe le Cancel à False en fin de procédure, la 3ème ligne de commentaire n'affiche plus "200 €" mais "200,00 € modifié par Romain le : 02/01/2012 à 10:12:33". C'est ce qui explique à mon avis la valeur 74 trouvée.
Est-ce volontaire cet affichage ?
A+
 

klin89

XLDnaute Accro
Re : Conserver la mise en forme dans le commentaire déjà saisi

re,

J'ai trouvé l'origine du Bug :p

Ci dessous, il faut remplacer la constante xlAutomatic par 1 soit l'index de la couleur noir.
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Change la couleur de la cellule au double-clic
If Intersect(Target, Range("B3:M" & Range("A65536").End(xlUp).Row - 3)) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Application.EnableEvents = False
Cancel = True
With Target.Font
  Select Case .ColorIndex
    Case Is = xlAutomatic ' à remplacer par 1
        .ColorIndex = 5 'Bleu
    Case 5
        .ColorIndex = 3 'rouge
    Case Else
        .ColorIndex = xlAutomatic 'noir à remplacer par 1
  End Select
  .Bold = IIf(.ColorIndex = xlAutomatic, 0, 1) 'à remplacer par 1
End With
If Target.NoteText = "" Then Target.AddComment: Pos = 1 ' Création commentaire
.../...

tblLignes(i + 1, 5) = Target.Comment.Shape.TextFrame.Characters(tblLignes(i + 1, 1), 1).Font.ColorIndex
renvoie 1 et non plus 74

Tout cela ne me dit pas comment on arrivait à la valeur 74 :confused:
J'ai vraiment trouvé au hazard :eek:

Klin89
 

Efgé

XLDnaute Barbatruc
Re : Conserver la mise en forme dans le commentaire déjà saisi

Bonjour klin89, Bonjour david84 :),

J'ai suivi ce fil avec interet et passé, disons une paire d'heure, sur le sujet (en particulier la BeforeDoubleClick) .
Je suis très étonné que tout cela fonctionne :rolleyes:
@klin89
Pourrais-tu mettre un fichier qui te semble OK ?
Cela me permetrais de mieux comprendre l'utilisation et surtout le fonctionnement....:D

En espérant ton retour.

Cordialement
 

klin89

XLDnaute Accro
Re : Conserver la mise en forme dans le commentaire déjà saisi

Salut Efgé,

Feuille "2012", le code est en chantier d'où un peu le bazar.

Explications :
Le but est d'afficher dans l'étiquette du commentaire ce type d'annotation :
35,00 € modifié par Romain le lundi 2 janvier 2012 à 21:08:33
35,00 € modifié par Romain le lundi 2 janvier 2012 à 21:09:45
35,00 € modifié par Romain le lundi 2 janvier 2012 à 21:09:48
Le double-clic alterne la couleur de la font du montant inscrit dans la target, simultanément retranscrit dans le commentaire accompagné du prénom de la personne qui a ouvert le fichier avec date et heure de la modification effectuée.
Le prénom est défini par la variable public NomUtilisateur (voir Workbook_Open())

Dans l'étiquette du commentaire, je cherche aussi à remplacer le terme "modifié" par différents termes selon la couleur du montant adjacent.
(rouge = "non débité" , bleu = "débité", noir = "inscrit")---> Voir à définir les termes exacts

Ce code, je vais le placer aussi dans le Worksheet_Change

Je t'envoie le fichier, cliques sur les cellules où figurent déjà un commentaire sinon bug (j'ai pas fini)
Klin89

Pour répondre à David :
Le fichier est destiné à un ami qui a du mal à me définir ces besoins, d'où peut-être une confusion dans les explications.:rolleyes:
Le commentaire serait sensé ne contenir que 3 lignes
L'alternance serait plutôt noir, rouge, bleu
le Worksheet_Change afficherait l'annotation en noir et le Worksheet_BeforeDoubleClick alternerait le rouge puis le bleu, enfin je vois les choses comme cela : il est certain que ce code couleur a une signification.
 

Pièces jointes

  • AddcommentV2.xls
    109 KB · Affichages: 84
Dernière édition:

david84

XLDnaute Barbatruc
Re : Conserver la mise en forme dans le commentaire déjà saisi

Re, bonsoir Efgé:)
Actuellement, le double-clic Fait passer alternativement la police de la cellule du bleu au rouge puis au noir.
Cette alternance de couleur ne semble pas actuellement fonction d'un autre paramètre.
Quel est donc à terme le but de la manœuvre et quel est la signification de ces couleurs ?
A+
 

klin89

XLDnaute Accro
Re : Conserver la mise en forme dans le commentaire déjà saisi

Bonsoir à tous,

L'effet recherché était la mise en forme des différentes lignes du commentaire inséré.
L'évènement Worksheet_Change insère le commentaire
L'évènement Worksheet_BeforeDoubleClick vient le compléter.

Reste à peaufiner.

Klin89
 

Pièces jointes

  • AddcommentV3.xls
    139.5 KB · Affichages: 58

Discussions similaires

Statistiques des forums

Discussions
314 634
Messages
2 111 438
Membres
111 136
dernier inscrit
Ahmad Ibnou