Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nb de cellules contenant un commentaire

7 réponses
Avatar
alex1121
Bonjour, je souhaiterais d=E9terminer dans une plage d=E9finie=20
combien de cellules poss=E8dent un commentaire.

Quelq'un peut il m'aider svp ?

j'ai essay=E9 cette fonction mais ne semble pas fonctionner :

Function SommeSiComm(plage As Range) As Double
On Error Resume Next
For Each cell In plage
com =3D cell.Comment.Text
If com <> "" Then SommeSiComm =3D SommeSiComm + 1
Next
End fonction

Merci d'avance!

7 réponses

Avatar
Denis Michon
bonjour alex1121,

La fonction suivante pourrait faire ... si ce n'était pas de ce "maudit" problème.

Lorsque tu effaces un commentaire d'une plage de cellules, la fonction ne tient pas compte de cet événement. Elle semble
incapable de tenir compte du fait qu'un commentaire ait été effacé. Cependant, si tu supprimes ( menu édition /
supprimer) la cellule contenant un commentaire, le résultat est bon.

Il y a peut être quelqu'un qui y comprend quelque chose ???? Cela mérite une explication !


'------------------------
Public Function NbComment(Rg As Range)
On Error Resume Next
NbComment = Rg.SpecialCells(xlCellTypeComments).Count
End Function
'------------------------


Salutations!


"alex1121" a écrit dans le message de news:0e3e01c39254$0f656fc0$
Bonjour, je souhaiterais déterminer dans une plage définie
combien de cellules possèdent un commentaire.

Quelq'un peut il m'aider svp ?

j'ai essayé cette fonction mais ne semble pas fonctionner :

Function SommeSiComm(plage As Range) As Double
On Error Resume Next
For Each cell In plage
com = cell.Comment.Text
If com <> "" Then SommeSiComm = SommeSiComm + 1
Next
End fonction

Merci d'avance!
Avatar
Daniel.M
Salut Denis,


Lorsque tu effaces un commentaire d'une plage de cellules,
la fonction ne tient pas compte de cet événement. Elle semble
incapable de tenir compte du fait qu'un commentaire ait été
effacé. Cependant, si tu supprimes ( menu édition /
supprimer) la cellule contenant un commentaire, le résultat est bon.

Il y a peut être quelqu'un qui y comprend quelque chose ???? Cela mérite une
explication !




La première manipulation (effacer le commentaire) ne change que des aspects de
formattage (les commentaires en font partie et ne sont pas directement reliée au
moteur de calcul d'Excel).

La deuxième manipulation change le contenu et le moteur de calcul d'Excel le
perçoit comme un changement.

En conclusion, je crois que c'est le même problème que lorsqu'il s'agit de
compter le nombre de cellules ROUGES d'une plage. Le changement d'une cellule
rouge en jaune ne fait pas en sorte d'"invoquer" le moteur de calcul d'Excel
(donc une fonction VBA ne mettrait pas à jour son résultat).

Salutations,

Daniel M.

Avatar
Denis Michon
Bonjour Daniel,

Merci pour tes commentaires.

Le point que je voulais souligner est si tu effaces un commentaire(non supprimer) et que tu double-cliques dans la
cellule où l'usager a placé la formule faisant référence à la fonction, le résultat est faux. À la limite, même si tu
écrivais dans une autre cellule la même fonction contenant la même référence (après avoir effacé un commentaire) , la
réponse obtenue serait fausse.

Je comprends l'allusion que tu fais au formatage "couleur" d'une cellule et le fait qu'une fonction personnalisée même
volatile ne réponde pas à la modification de formatage. Sauf que dans ce cas, même lorsque la fonction répond, elle le
fait de façon inappropriée.

Et pour compléter le tableau, je viens de copier cette fonction dans un module standard d'un nouveau classeur. Lorsque
j'entre dans une cellule la formule suivante : =NbComment(C4:C9) , J'obtiens la réponse suivante : 6 . Et pourtant ce
classeur n'a jamais reçu le moindre commentaire.

'---------------------
Public Function NbComment(Rg As Range)
On Error Resume Next
NbComment = Rg.SpecialCells(xlCellTypeComments).Count
End Function
'---------------------


Et pour en finir, si tu exécutes cette procédure appelant cette même fonction, on obtient le bon résultat peu importe la
façon dont on efface le commentaire.


'-------------------
Sub Mescommentaires()

a = NbComment(Range("A1:A6"))

End Sub
'-------------------


Salutations!

P.S. Je devais être absent du cours lorsque le prof. en a parlé !! ;-))






"Daniel.M" a écrit dans le message de news:
Salut Denis,


Lorsque tu effaces un commentaire d'une plage de cellules,
la fonction ne tient pas compte de cet événement. Elle semble
incapable de tenir compte du fait qu'un commentaire ait été
effacé. Cependant, si tu supprimes ( menu édition /
supprimer) la cellule contenant un commentaire, le résultat est bon.

Il y a peut être quelqu'un qui y comprend quelque chose ???? Cela mérite une
explication !




La première manipulation (effacer le commentaire) ne change que des aspects de
formatage (les commentaires en font partie et ne sont pas directement reliée au
moteur de calcul d'Excel).

La deuxième manipulation change le contenu et le moteur de calcul d'Excel le
perçoit comme un changement.

En conclusion, je crois que c'est le même problème que lorsqu'il s'agit de
compter le nombre de cellules ROUGES d'une plage. Le changement d'une cellule
rouge en jaune ne fait pas en sorte d'"invoquer" le moteur de calcul d'Excel
(donc une fonction VBA ne mettrait pas à jour son résultat).

Salutations,

Daniel M.

Avatar
AV
Artisanat local :

Function NB_COMMENT(plg As Range)
Application.Volatile
z = 0
For Each c In plg
On Error Resume Next
x = c.Comment.Text
If Err.Number = 0 Then z = z + 1
Next
NB_COMMENT = z
End Function

Dans le module de la feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub

AV
Avatar
Alex1121
Merci pour ta réponse!
Quand je fais édition supprimer sur les cellules qui ne
contiennent pas de commentaires, miracle le résultat est
correct!
Grande fut ma deception quand j'ai constaté que ma plage
de cellule originale comprise entre A1:A10 était devenue
A10 aprés suppression des cellules A1:A9
Cela revient donc à appliquer la formule seulement sur les
cellules contenant les commentaires donc cela ne me sert
pas!

Merci quand même de ton aide et n'hésite pas à m'écrire si
tu as une illumination, moi je suis à court d'idées!

Salutations!


Alexis

-----Message d'origine-----
bonjour alex1121,

La fonction suivante pourrait faire ... si ce n'était pas
de ce "maudit" problème.


Lorsque tu effaces un commentaire d'une plage de
cellules, la fonction ne tient pas compte de cet

événement. Elle semble
incapable de tenir compte du fait qu'un commentaire ait
été effacé. Cependant, si tu supprimes ( menu édition /

supprimer) la cellule contenant un commentaire, le
résultat est bon.


Il y a peut être quelqu'un qui y comprend quelque
chose ???? Cela mérite une explication !



'------------------------
Public Function NbComment(Rg As Range)
On Error Resume Next
NbComment = Rg.SpecialCells(xlCellTypeComments).Count
End Function
'------------------------


Salutations!


"alex1121" a écrit dans le message de
news:0e3e01c39254$0f656fc0$

Bonjour, je souhaiterais déterminer dans une plage définie
combien de cellules possèdent un commentaire.

Quelq'un peut il m'aider svp ?

j'ai essayé cette fonction mais ne semble pas
fonctionner :


Function SommeSiComm(plage As Range) As Double
On Error Resume Next
For Each cell In plage
com = cell.Comment.Text
If com <> "" Then SommeSiComm = SommeSiComm + 1
Next
End fonction

Merci d'avance!


.



Avatar
Daniel.M
Salut Denis,

1. Le problème d'Alex
Tu as raison. Mes commentaires sur l'absence de m-à-j des résultats de la
fonction
s'appliquaient mieux à la question directe de Alex. D'ailleurs, Alex pourrait
utiliser le code suivant (qui n'utilise pas On Error Resume Next, plutôt lent).
Mais ça ne règle pas son problème d'absence de resynch (pour les raisons
invoquées dans mon msg précédent).

Public Function CompteCommentaires(Plage As Range) As Long
Dim C As Range, i As Long
For Each C In Plage
If C.NoteText <> "" Then i = i + 1
Next C
CompteCommentaires = i
End Function


2. Ça n'explique pas tes résultats. :-(

Je crois qu'il faut chercher à savoir si "on a le droit" d'invoquer une méthode
SpecialCells à l'intérieur d'une fonction VBA personnalisée LORSQU'on invoque
cette fonction à partir d'une feuille de calcul.

Pour l'avoir lu quelques fois, les commandes FIND souffrent également de ce
problème (dans les versions d'avant Excel 2002). Ce que tu décris correspond à
cette forme de limitation (fonctionne si appelé d'une Sub, mais fonctionne pas
dans le contexte d'une fonction personnalisée). Le contexte d'une fonction VBA
ne permet l'usage de certaines méthodes (de la même manière, tu ne peux pas
assigner une valeur à une autre cellule dans ces fonctions): SpecialCells doit
faire partie de celle-ci.

Je me demande donc si la méthode SpecialCells est exécutée!

Il semble que non. Fais le test suivant:

Une plage qui ne contient aucun commentaire.
Une formule qui réfère à cette plage.
Aussi, garde la Sub MesCommentaires()
Enlève (ou mets en commentaire!) l'instruction On Error Resume Next dans ta
function NbComment.

Ainsi, tu t'aperçois que ça ne déclenche pas d'erreur lorsque la fonction est
invoquée directement de la feuille de calcul. Pourtant, ça déclenche une erreur
lorsque la Sub MesCommentaires est exécutée. Ça c'est mauvais signe.

Salutations,

Daniel M.
Avatar
Denis Michon
Bonjour Daniel,


Merci pour tes excellents commentaires...en espérant avoir classé cette information dans un bon "tiroir mémoire" pour la
prochaine fois !

;-)

Bonne journée,


Salutations!



"Denis Michon" a écrit dans le message de news:STWib.160327$
Bonjour Daniel,

Merci pour tes commentaires.

Le point que je voulais souligner est si tu effaces un commentaire(non supprimer) et que tu double-cliques dans la
cellule où l'usager a placé la formule faisant référence à la fonction, le résultat est faux. À la limite, même si tu
écrivais dans une autre cellule la même fonction contenant la même référence (après avoir effacé un commentaire) , la
réponse obtenue serait fausse.

Je comprends l'allusion que tu fais au formatage "couleur" d'une cellule et le fait qu'une fonction personnalisée même
volatile ne réponde pas à la modification de formatage. Sauf que dans ce cas, même lorsque la fonction répond, elle le
fait de façon inappropriée.

Et pour compléter le tableau, je viens de copier cette fonction dans un module standard d'un nouveau classeur. Lorsque
j'entre dans une cellule la formule suivante : =NbComment(C4:C9) , J'obtiens la réponse suivante : 6 . Et pourtant ce
classeur n'a jamais reçu le moindre commentaire.

'---------------------
Public Function NbComment(Rg As Range)
On Error Resume Next
NbComment = Rg.SpecialCells(xlCellTypeComments).Count
End Function
'---------------------


Et pour en finir, si tu exécutes cette procédure appelant cette même fonction, on obtient le bon résultat peu importe la
façon dont on efface le commentaire.


'-------------------
Sub Mescommentaires()

a = NbComment(Range("A1:A6"))

End Sub
'-------------------


Salutations!

P.S. Je devais être absent du cours lorsque le prof. en a parlé !! ;-))






"Daniel.M" a écrit dans le message de news:
Salut Denis,


Lorsque tu effaces un commentaire d'une plage de cellules,
la fonction ne tient pas compte de cet événement. Elle semble
incapable de tenir compte du fait qu'un commentaire ait été
effacé. Cependant, si tu supprimes ( menu édition /
supprimer) la cellule contenant un commentaire, le résultat est bon.

Il y a peut être quelqu'un qui y comprend quelque chose ???? Cela mérite une
explication !




La première manipulation (effacer le commentaire) ne change que des aspects de
formatage (les commentaires en font partie et ne sont pas directement reliée au
moteur de calcul d'Excel).

La deuxième manipulation change le contenu et le moteur de calcul d'Excel le
perçoit comme un changement.

En conclusion, je crois que c'est le même problème que lorsqu'il s'agit de
compter le nombre de cellules ROUGES d'une plage. Le changement d'une cellule
rouge en jaune ne fait pas en sorte d'"invoquer" le moteur de calcul d'Excel
(donc une fonction VBA ne mettrait pas à jour son résultat).

Salutations,

Daniel M.