Après avoir fait plusieurs recherches, je viens vers vous car j'aimerai calculer le nombre de cellule contenant des notes et plus précisément des notes qui contiennent un mot spécifique.
J'espère que cela est possible en passant par un simple calcul dans une cellule au même titre qu'une fonction NB.SI et donc ne pas passer par le codage VBA.
Dim plage As Range
Dim cell As Range
Dim compteur As Integer
Set plage = ActiveSheet.Range("C6:Q6")
compteur = 0
For Each cell In plage
If Not cell.Comment Is Nothing Then
If InStr(1, cell.Comment.Text, "absence", vbTextCompare) > 0 Then
compteur = compteur + 1
End If
End If
Next cell
ActiveSheet.Range("AO6").Value = compteur
Bonjour,
J'ai réussi à faire ce que je voulais faire via ce code.
Sub CountCommentCells()
Dim rng As Range
Dim cell As Range
Dim count As Integer
Dim searchText As String
Dim words() As String
Dim word As Variant
' Plage de cellules à vérifier, changer si besoin
Set rng = ThisWorkbook.Sheets("Feuil1").Range("A1:B10")
' Spécifiez le texte à rechercher dans les commentaires
searchText = "test"
count = 0
' Parcourir chaque cellule de la plage
For Each cell In rng
' Vérifier si la cellule a un commentaire
If Not cell.Comment Is Nothing Then
' Remplacer les retours à la ligne par des espaces
Dim commentText As String
commentText = Replace(cell.Comment.Text, Chr(10), " ")
' Diviser le texte du commentaire en mots
words = Split(commentText, " ")
' Vérifier chaque mot
For Each word In words
If word = searchText Then
count = count + 1
Exit For
End If
Next word
End If
Next cell
MsgBox count & " cellules contiennent '" & searchText & "' dans leur commentaire."
End Sub
d'accords j'explique
1°tu peux m'expliquer pourquoi tu fait des replace sur les saut de ligne
VB:
' Vérifier si la cellule a un commentaire
If Not cell.Comment Is Nothing Then
' Remplacer les retours à la ligne par des espaces
Dim commentText As String
commentText = Replace(cell.Comment.Text, Chr(10), " ")
2°tu peux expliquer pourquoi tu split le texte
Code:
' Diviser le texte du commentaire en mots
words = Split(commentText, " ")
donc dejà
1°la demande c'est pas de compter le nombre de chaines particulières présentes dans les commentaires
mais combien de commentaires contiennent la chaine ce qui n'est pas du tout la même chose
donc ta réponse est déjà a coté
2° et combien même si c’était ça la demande
un simple ubound(split(lecommentaire,chaine) te donnerait le nombre
pas la peine de boucler et et faire des replace et je ne sais quoi qu'est ce
bref si tu a lu le post dans son intégralité tu a constaté que je faisais part à @sylvanu
qu'il brodait un peu trop et lui est suggéré une réduction de code et d'action
plus tard @Cousinhub intervient et donne une solution encore plus simple
c'est pas tout de faire un truc marche(si tant est que la réponse ai un vrai sens par rapport à la demande )
mais en langage orienté object comme VBA il faut surtout ménager les ressources
coder intelligemment ça s’apprend
j’apprécie cependant l'organisation de ton code, certains ne prennent même pas la peine de faire une indentation
J'ai testé mon code et celui-ci retourne le nombre de commentaires qui contiennent le texte.
Je remplace les sauts de ligne par des espaces parce que dans le cas suivant, si le contenu du commentaire se présente comme ceci:
User:
test
le mot "test" n'est pas pris en compte.
Pour le reste, je ne prétends pas que mon code est le meilleur ou le plus performant. Je fais avec mes connaissances et habitudes de programmation. Si mon code peut être amélioré/simplifié, tant mieux, je suis preneur pour m'améliorer. Mon but est d'apporter une aide et un code qui fonctionne. Moi-même parfois, il m'arrive de relire mon code et me rendre compte que je peux l'optimiser. Après, libre au demandeur d'utiliser mon code ou pas, mais au moins il a plusieurs choix.