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
NextJe 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.ValueAuriez 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.
Bonsoir,
Pour accéder au texte du commentaire :
If cell.Comment.Shape.TextFrame.Characters.Text <> "toto" ThenComment.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.
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
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 SubOn 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 basJe 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.