Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Calculer nombre de note avec "texte"

Mate59

XLDnaute Junior
Bonjour à tous,

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.

Merci d'avance pour vos réponses
 
Solution
VB:
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.

Merci à tous pour vos réponses!

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mate,
Un essai en PJ où on recherche toutes les cellules contenant "toto" avec :
VB:
=NB.SI(A:J;"*toto*")
Les "*" signifie tout caractère, donc on cherche "n'importe quoi" puis "toto" puis "n'importe quoi"
 

Pièces jointes

  • Mate.xlsx
    8 KB · Affichages: 1

Franc58

XLDnaute Occasionnel
Salut, une suggestion vba:

VB:
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
 

patricktoulon

XLDnaute Barbatruc
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

voila ce que voulait dire ma métaphore
 

Franc58

XLDnaute Occasionnel
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.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…