Microsoft 365 Cellules comportant un commentaire

Willmaz

XLDnaute Nouveau
Bonjour,

J'espère que vous ne souffrez pas trop des fortes chaleurs!
Toujours aussi médiocre en programmation VBA, (j'ai progressé en Excel basique grace à vous tous!) je souhaite réaliser un petit programme qui me parait tout simple, mais à mon niveau déjà compliqué!
Je souhaite faire en sorte que ce programme teste s'il y a un X dans ma colonne F et si c'est le cas, vérifier que dans la cellule qui comporte ce "X" il y ait bien un commentaire. S'il y en a pas, afficher en face dans la colonne G un message et mettre une MFC sur la cellule concernée. En revanche, dès que le commentaire est renseigné, le message et la MFC doivent disparaitre.
Je joins un petit exemple pour que mes explications soient plus claires.

Cordialement,
 

Pièces jointes

  • Equipe de france.xlsx
    18.3 KB · Affichages: 5
Solution
Bonjour Willmaz, sylvanu,
on ne peut pas détecter en VBA la suppression d'un commentaire.
Bien sûr que si, il suffit de faire tourner une macro en arrière-plan :
VB:
Sub ArrierePlan()
'menu Exécution => Réinitialiser pour arrêter la macro
Dim t#, tablo, resu(), i&
ThisWorkbook.Saved = False
Do
    t = Timer + 0.5
    While Timer < t And t < 86400: DoEvents: Wend 'attente de 0,5 seconde
    If Not ThisWorkbook.Saved Then
        With Feuil1.[A1].CurrentRegion.Columns(6) 'CodeName de la feuille à adapter
            tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
            ReDim resu(1 To UBound(tablo), 1 To 1)
            For i = 2 To UBound(tablo)
                If tablo(i, 1) <> "" And .Cells(i).Comment...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Willmaz,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    DL = Range("A65500").End(xlUp).Row
    If Not Intersect(Target, Range("F2:F" & DL)) Is Nothing Then
         On Error GoTo Fin:
         Application.EnableEvents = False: Application.ScreenUpdating = False
        If Target = "X" And Range(Target.Address).Comment Is Nothing Then
            Cells(Target.Row, "G") = "Pas de commentaire."
        Else
            Cells(Target.Row, "G") = ""
        End If
    End If
Fin:
Application.ScreenUpdating = True: Application.EnableEvents = True
End Sub
par contre lorsqu'on rajoute un commentaire là où il en fallait un, il faut revalider la cellule où il y a le X pour effacer le texte en colonne G, car on ne peut pas détecter en VBA la suppression d'un commentaire.
 

Pièces jointes

  • Equipe de france.xlsm
    21.4 KB · Affichages: 3

Willmaz

XLDnaute Nouveau
Bonjour,

Tout d'abord merci pour cette réponse!
Le code fonctionne partiellement:
-Premièrement, il ne fonctionne qu'à l'ajout d'un nouveau "X" et dans ce cas il ajoute bien un message dans la cellule adjacente. Cependant, il ne vérifie pas les "X" déjà présents et donc ne met pas le message même s'ils ne comportent pas de commentaires.
-Deuxièmement, lorsque j'ajoute un commentaire dans les cellules avec un "X", j'ai beau revalider la cellule, remettre un "X" ou faire quoique se soit, le message dans la cellule adjacente ne disparait pas... .

Cordialement,
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
C'est ce que j'avais précisé. Mais cela permettait d'être rapide. Une sorte de compromis.
Il vous suffisait de repartir de ce canevas, en changeant les règles. :)

En PJ une autre approche qui peut se révéler plus lente si la feuille a beaucoup de lignes.
On exécute une macro dès qu'on clique sur une cellule de F:G ou qu'on modifie une valeur dans F.
Et cette macro ne se contente pas d'examiner la cellule concernée mais balaie toute la liste, donc reteste le contexte de chaque cellule et applique les règles, d'où potentiellement un aspect un peu plus lent.
A tester.
 

Pièces jointes

  • Equipe de france V2.xlsm
    25 KB · Affichages: 3

Willmaz

XLDnaute Nouveau
Effectivement ça rame un petit peu, lol. Mais j'ai toujours un bug, car j'ai le message même quand la cellule comporte un commentaire... Et même quand le commentaire existe avant de taper "X"...
1658826372815.png
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Il existe un cas où cela se produit, et je l'ai expliqué :
On exécute une macro dès qu'on clique sur une cellule de F:G ou qu'on modifie une valeur dans F.
Donc si après une modif vous cliquez autre part qu'en E:F, ça ne marche pas.
En PJ on éxécute la macro dès qu'on clique ou modifie dans tout A:G. Mais ça ramera encore plus.
Mais ça je l'ai aussi expliqué:
car on ne peut pas détecter en VBA la suppression d'un commentaire.
Donc il y a des choses impossibles à faire.
 

Pièces jointes

  • Equipe de france V3.xlsm
    25 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour Willmaz, sylvanu,
on ne peut pas détecter en VBA la suppression d'un commentaire.
Bien sûr que si, il suffit de faire tourner une macro en arrière-plan :
VB:
Sub ArrierePlan()
'menu Exécution => Réinitialiser pour arrêter la macro
Dim t#, tablo, resu(), i&
ThisWorkbook.Saved = False
Do
    t = Timer + 0.5
    While Timer < t And t < 86400: DoEvents: Wend 'attente de 0,5 seconde
    If Not ThisWorkbook.Saved Then
        With Feuil1.[A1].CurrentRegion.Columns(6) 'CodeName de la feuille à adapter
            tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
            ReDim resu(1 To UBound(tablo), 1 To 1)
            For i = 2 To UBound(tablo)
                If tablo(i, 1) <> "" And .Cells(i).Comment Is Nothing Then resu(i, 1) = "Pas de commentaire"
            Next
            .Columns(2) = resu 'restitution
        End With
        ThisWorkbook.Saved = True 'évite le recalcul
    End If
Loop
End Sub
Elle est lancée automatiquement à l'ouverture par cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ArrierePlan" 'lance le processus
End Sub
Pour tester modifiez la colonne F du fichier joint.

A+
 

Pièces jointes

  • Equipe de france(1).xlsm
    25.4 KB · Affichages: 1

Willmaz

XLDnaute Nouveau
Bonjour job75,

Ça fonctionne... à 99% lol. le seul bug vient peut être de chez moi? Je me suis rendu compte d'une chose, le code fonctionne pour des "notes" mais pas pour les "commentaires". Sur la capture ci-dessous la petite marque rouge est une note et la ça fonctionne. La marque violette est un commentaire et la ça ne fonctionne pas...

1658840358520.png
 

Willmaz

XLDnaute Nouveau
Merci à tous les deux en tout cas, en réadaptant le code à mes besoins (classeur plus gros avec une dizaine de feuilles) j'active la macro à l'ouverture de la feuille concernée et comme les X ne sont pas saisis manuellement mais induits par formule sur une autre feuille, j'ai supprimé la boucle. Ça fonctionne parfaitement merci encore!
 

Discussions similaires

Statistiques des forums

Discussions
314 667
Messages
2 111 705
Membres
111 264
dernier inscrit
Monnoye