Commentaire de cellule contient

Bonjour à tous sur le forum

Je rencontre un problème en VBA,

Je voudrais faire en sorte que si une cellule a pour commentaire "toto", alors elle n'est pas écrite, ou plutôt, si c'est différent de "toto" c'est écrit.

Actuellement ma macro récupère des ID si deux valeurs de feuilles différentes sont égales :

    Set FacturéA = Sheets("Facturation").Range("B1:" & Sheets("Facturation").Cells(Rows.Count, 1).End(xlUp).Address)
    Set FacturéB = Sheets("decomission").Range("A1:" & Sheets("decomission").Cells(Rows.Count, 1).End(xlUp).Address)

    For Each cell In FacturéA   
        If Application.CountIf(FacturéB, cell.Value) = 1 Then
        Sheets("Anomalies").Range("B65000").End(xlUp)(2).Value = cell.Value
        Else       
        End If
    Next

Je souhaiterais ajouter un détail : si cette valeur compté 2 fois a pour commentaire en FacturéB "toto" alors elle n'est pas considérée.

J'ai essayé avec ceci mais ca n fonctionne pas

 
'If Application.CountIf(FacturéB, cell.Value) = 1 Then
If FacturéB.Comment.Text <> "toto" Then
'Sheets("Anomalies").Range("B65000").End(xlUp)(2).Value = cell.Value

Auriez vous une solution ?

Je vous remercie par avance

Salut,

Ta demande n’est pas extrêmement claire et en plus il n’y a pas de fichier modèle !! Ce n’est pas évident de t’aider

J’ai créé le fichier ci-joint afin de voir comment fonctionnaient les macros avec les commentaires et je me suis rendu compte qu’il y a un problème lorsqu’une cellule n’en comporte justement pas. Regarde la solution trouvée pour contourner le problème.

Si ça t’aide, tant mieux, sinon fourni-moi ton fichier.

Cordialement.

26classeur1.xlsm (17.80 Ko)

Bonsoir,

Pour accéder au texte du commentaire :

If cell.Comment.Shape.TextFrame.Characters.Text <> "toto" Then

Comment.Text définit le texte du commentaire, mais ne le renvoie pas.

cell est une variable représentant une seule cellule, tu dois t'assurer avant qu'elle contient un commentaire...

Cordialement.

Bonjour à tous sur le forum

Merci de votre aide Yvouille et MFerrand

Yvouille : Je suis désolé que ma demande ne soit pas claire

Je joint un fichier "non confidentiel" où j'ai tenté de reproduire la macro existante, mais il y a une erreur ((que je n'ai pas sur mon véritable Excel), lors de l'exécution de la macro, celle-ci s'arrête si elle a trouvé 1 valeur au lieu de vérifier toutes les autres valeurs). Dans ce nouveau fichier donc, le résultat que je souhaite obtenir est "B" en B2, "C" en B3 et que "A" ne soit pas écrit car il contient le commentaire "toto", si il n'y avait pas de commentaire ou que ce commentaire est différent de "toto" alors "A" serait écrit.

Je crois que je ne suis toujours pas très claire .. j'espère que tu me comprendras.

MFerrand : j'ai essayé ta commande mais ca n'a pas fonctionné, je doit mal m'y prendre

J'ai ajouté cette commande à l'Excel que je joint.

Je vous remercie beaucoup de m'aider !

Au plaisir de vous relire

14eldewen.xlsm (20.04 Ko)

Bonjour,

Comme je l'ai dit, je t'ai fourni une syntaxe de commande permettant d'accéder à un commentaire, mais en l'absence de commentaire, il y aura nécessairement erreur ! Il ne faut donc l'appliquer qu'après avoir testé qu'un commentaire est bien présent dans la cellule.

Je dois dire que ce n'est pas vraiment évident !!

Mets la macro suivante dans ton fichier et lance-la :

Sub test()
    Dim c As Range, deco As Range
    Set deco = Worksheets("decomissioned").Range("A1:A8")
    For Each c In deco
        If Not Intersect(deco.SpecialCells(xlCellTypeComments), c) Is Nothing Then
            MsgBox "Commentaire " & c.Address(False, False) & " : " & Chr(10) _
             & c.Comment.Shape.TextFrame.Characters.Text
        End If
    Next c
End Sub

On affecte la plage en colonne A de ta feuille à la variable deco.

On parcourt cette plage cellule pr cellule.

A chaque cellule, on teste si elle contient un commentaire en regardant si l'intersection de cette cellule avec la plage regroupant les cellules de deco contenant un commentaire est définie : si elle l'est, c'est que la cellule sur laquelle on est contient un commentaire.

Dans ce cas, on peut accéder au commentaire (texte) par le texte inséré dans la forme attachée au commentaire et qui permet de l'afficher.

Cela n'exclut cependant pas tout risque d'erreur : si deco ne contient aucun commentaire, cela provoquera une erreur. Tu peux éventuellement élargir la plage avec laquelle on teste l'intersection, de façon à être sûr que cette dernière contienne au moins un commentaire. Mais si le risque qu'il n'y ait aucun commentaire ne peut être surmonté de cette façon, il faudra alors mettre la commande sous gestion d'erreur, de façon que la procédure puisse se poursuivre...

Cordialement.

MFerrand,

J'ai essayé de tourner ton code dans tous les sens pour ce que je souhaite mais je n'y suit pas arrivé

Je ne souhaite pas de MsgBox qui est gênante sur un fichier contenant des centaines de lignes ayant des commentaires environ 1 ligne sur 3.

Comme je ne suit pas compréhensible quand je m'exprime ni Français ni en VBA, je vais essayer en algo :

Si "valeur" apparait dans feuil1 range x : jusqu en bas et dans feuil2 range x : jusqu en bas
     Et Si commentaire "valeur" dans feuil2 <> toto
Alors Ecrire "valeur" dans feuil3 range x : jusqu en bas

Je suis désolé de ne pas réussir à me faire comprendre.

Je vous remercie par avance.

Cordialement.

Bonsoir,

Je comprends très bien ce que tu cherches, je ne cherches pas à t'apporter une solution toute faite pour résoudre ton problèmes (sur lequel je ne me suis pas penché globalement par ailleurs). J'interviens juste sur le point de ta problématique que tu exprimes par :

Et Si commentaire "valeur" dans feuil2 <> toto

(bien que jusqu'à présent il ne me semblait pas qu'il s'agissait de la feuille (= plusieurs millions de cellules) mais de chaque cellule testée tour à tour).

Bref : il s'agit bien de tester le contenu d'un commentaire dans ton propos ! Et c'est bien strictement dans ce cadre que j'interviens pour te dire :

1) Pour pouvoir tester le contenu d'un commentaire à un endroit donné (une cellule), il faut d'abord tester l'existence d'un commentaire à cet endroit.

2) Si l'existence d'un commentaire est établie, pour tester son contenu, il faut accéder à son texte...

Cette double nécessité exige l'utilisation de syntaxes dans la manipulation des objets concernés, qui permettent de répondre à ces deux questions sans déclencher d'erreur.

D'où le bout de code "démo" établi sur ton petit fichier modèle visant à démontrer qu'avec tu peux parcourir une plage de cellule, détecter celles qui contiennent un commentaire, accéder au texte de ce commentaire, sans erreur durant le déroulement de cette opération.

Ce qui est de nature à te fournir des éléments de syntaxe à utiliser pour mener à bien ton opération...

Si tu ne comprends pas la nécessité de se pencher sur la syntaxe permettant de réaliser chaque bout élémentaire d'opération, c'est que tu n'as pas encore commencé à travailler sérieusement en VBA...

Cordialement.

Rechercher des sujets similaires à "commentaire contient"