Commentaire automatisé - Excel

Bonjour,

Je souhaite ajouter des commentaires automatiquement dans des cellules. J'ai 1 onglet "Joueur 1" sur lequel j'alimente les cellules B18 à M26 grâce aux données de l'onglet "Base de données Intervenants" en utilisant la formule suivante :

=SIERREUR(INDEX('Base de données Intervenants'!$F$4:$F$31; EQUIV(1;('Joueur 1'!$B$2='Base de données Intervenants'!$D$4:$D$31) * ('Joueur 1'!B$10='Base de données Intervenants'!$A$4:$A$31) * ('Joueur 1'!$A18='Base de données Intervenants'!$C$4:$C$31);0));"-")

J'aimerais maintenant ajouter des commentaires toujours dans les cellules B18 à M26 de l'onglet Joueur 1 en remontant cette fois l'information de la colonne G de l'onglet Base de données Intervenants, si les conditions de mon INDEX EQUIV sont réunies.

Etant Niveau 0 en macro, je tente ma chance ici !

Merci merci :)

Bonjour,

par exemple comme ça ;

=SIERREUR(INDEX('Base de données Intervenants'!$F$4:$F$31; SI(('Joueur 1'!$B$2='Base de données Intervenants'!$D$4:$D$31) * ('Joueur 1'!B$10='Base de données Intervenants'!$A$4:$A$31) * ('Joueur 1'!$A18='Base de données Intervenants'!$C$4:$C$31)>=1;"mon commentaire");"-")

A voir si ça correspond à ce qu'il vous faut.

En fait je veux que ça ajoute un commentaire à la cellule.

J'ai réussi à faire une macro qui ajoute un commentaire mais ça m'écrit la formule en commentaire au lieu de renvoyer la valeur calculée par la formule. Comment faire pour que ça exécute la formule au lieu de l'écrire ?

Ma macro est :

Sub AjoutCommentaire()
Dim rng As Range
Dim Formule As String

Formule = "=INDEX('Base de données Intervenants'!$G$4:$G$31; EQUIV(1;('Joueur 1'!$B$2='Base de données Intervenants'!$D$4:$D$31) * ('Joueur 1'!B$10='Base de données Intervenants'!$A$4:$A$31) * ('Joueur 1'!$A18='Base de données Intervenants'!$C$4:$C$31);0))"

' Spécifiez la cellule où ajouter le commentaire
Set rng = Range("B18")

' Vérifiez si la feuille est protégée et si oui, désactivez la protection avant d'ajouter le commentaire
If rng.Worksheet.ProtectContents Then
rng.Worksheet.Unprotect
End If

' Supprimez tous les commentaires de la cellule
rng.ClearComments

' Ajoutez le commentaire avec la formule
rng.AddComment Text:="" ' Ajoutez un commentaire vide
rng.comment.Text Text:=Formule
End Sub

Bonsoir,

Pour que la formule donne un résultat, il faut la placer dans une cellule ou utiliser l'instruction "Evaluate"

        a$ = Evaluate("=" & Formule) ' Evaluation de la formule
        ' Ou
        Cells(Ligne, colonne).Formula = "=" & Formule

Ensuite on utilise le résultat pour le placer dans le commentaire

With .Cells(Ligne, colonne)
      .AddComment (a$) ' ou (Cells(ligne,colonne)).value
            With .Comment
                 .Visible = False
                 With .Shape
                      .Width = 130 ' Taille du commentaire
                      .Height = 15
                 End With
            End With
End With

A voir si cela répond à votre demande

Bonne soirée

Eric

Merci beaucoup ça m'a bien aidée.

La macro fonctionne mais ça renvoie toujours le même commentaire puisque la formule est en dur.

J'imagine qu'il n'y a pas moyen de variabiliser les cellules dans la ligne : Formule = "=INDEX('Base de données Intervenants'!$G$4:$G$31, MATCH(1, ('Joueur 1'!$B$2='Base de données Intervenants'!$D$4:$D$31) * ('Joueur 1'!B$10='Base de données Intervenants'!$A$4:$A$31) * ('Joueur 1'!$A$18='Base de données Intervenants'!$C$4:$C$31), 0))" Pour que ça change B10 à C10 puis C11 puis C12... et A18 en A19, A20... ?

Sub AjoutCommentaire()
Dim rng As Range
Dim Formule As String
Dim valeurFormule As Variant
Dim cell As Range

Formule = "=INDEX('Base de données Intervenants'!$G$4:$G$31, MATCH(1, ('Joueur 1'!$B$2='Base de données Intervenants'!$D$4:$D$31) * ('Joueur 1'!B$10='Base de données Intervenants'!$A$4:$A$31) * ('Joueur 1'!$A$18='Base de données Intervenants'!$C$4:$C$31), 0))"

' Spécifiez la plage où vous souhaitez ajouter le commentaire (B18 à M26)
Set rng = Range("B18:M26")

' Vérifiez si la feuille est protégée et si oui, désactivez la protection avant d'ajouter le commentaire
If rng.Worksheet.ProtectContents Then
rng.Worksheet.Unprotect
End If

' Parcours chaque cellule de la plage
For Each cell In rng
valeurFormule = Application.Evaluate(Formule)
If IsError(valeurFormule) Then
cell.ClearComments ' Supprime le commentaire existant s'il y en a un
Else
If cell.comment Is Nothing Then
cell.AddComment.Text Text:=CStr(valeurFormule)
cell.comment.Visible = False ' Cacher le commentaire par défaut
Else
cell.comment.Text Text:=CStr(valeurFormule)
End If
End If
Next cell
End Sub

Bonjour

Il suffit de faire un Replace dans la formule avec les nouvelles références.

Pour remplacer "$B10" par "$C10" :

Formule=Replace(formule,"$B10","$C10") ' Remplace toutes les occurrences

Ou construire la formule avec des variables

Var1="$G$4:$G$31"

Var2="$B$2"

Var3="$D$4:$D$31"

Var4="B$10"

Var5="$A$4:$A$31"

Var6="$A$18"

Var7="$C$4:$C$31"

Formule = "=INDEX('Base de données Intervenants'!" & Var1 & ", MATCH(1, ('Joueur 1'!" & Var2 & "='Base de données Intervenants'!" & Var3" & ") * ('Joueur 1'!" & Var4 & "='Base de données Intervenants'!" & Var5 & ") * ('Joueur 1'!" & Var6 & "='Base de données Intervenants'!" & Var7 & "), 0))"

En fonction de la position on modifie chaque variable avant de reformuler.

Avec la fonction Adress on peut redéfinir les variables

Var?? = cell.Address ' Renvoie l'adresse de la cellule au format "$A$18" par exemple

Ne connaissant par la façon dont fonctionne ton appli, a toi de voir comment organiser tout ça.

Ps : Concernant l'évaluation de la formule, un test d'erreur s'impose :

On Error Resume  Next
valeurFormule = Application.Evaluate(Formule)
i=Err.Number
On Error Goto 0
If i<>0 Then
     MsgBox "Formule incorrecte", vbCritical, "Erreur"
     Exit Sub
End If
' Suite

La fonction IsError ne suffit pas, elle renvoie uniquement le type d'erreur suite à l'évaluation.

Mais si la formule est incorrecte il y aura plantage (mauvaise formulation, +256 caractères ...)

A+

Eric

Un grand merci Eric pour ton aide !

J'ai réussi à faire fonctionner la macro en utilisant une logique différente sans variable. J'ai maintenant une nouvelle question :) Est-il possible d'automatiser une macro dès qu'il y a une modification dans la colonne G de l'onglet Base de données Intervenants ?

J'ai tenté d'ajouter ça au début de ma macro mais ça ne fonctionne pas :(

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Base de données Intervenants" And Not Intersect(Target, Sh.Range("G:G")) Is Nothing Then
Application.EnableEvents = False

Dim rng As Range
Dim Formule As String
Dim valeurFormule As Variant
Dim cell As Range

Set rng = Target••••ˇˇˇˇ

Ma macro qui fonctionne est :

Sub AjoutCommentaire()
Dim rng As Range
Dim Formule As String
Dim valeurFormule As Variant
Dim cell As Range

' Spécifiez la plage où vous souhaitez ajouter le commentaire (B18 à M26)
Set rng = Range("B18:M26")

' Vérifiez si la feuille est protégée et si oui, désactivez la protection avant d'ajouter le commentaire
If rng.Worksheet.ProtectContents Then
rng.Worksheet.Unprotect
End If

' Parcours chaque cellule de la plage
For Each cell In rng
Formule = "=IF(COUNTIF('Base de données Intervenants'!$F$4:$F$31, " & cell.Address & ") > 0, INDEX('Base de données Intervenants'!$G$4:$G$31, MATCH(" & cell.Address & ",'Base de données Intervenants'!$F$4:$F$31, 0)), """")"
valeurFormule = Application.Evaluate(Formule)

If valeurFormule <> "" Then
If cell.comment Is Nothing Then
cell.AddComment Text:=CStr(valeurFormule)
cell.comment.Visible = False ' Cacher le commentaire par défaut
Else
cell.comment.Text Text:=CStr(valeurFormule)
End If
Else
cell.ClearComments ' Supprime le commentaire existant s'il y en a un
End If
Next cell
End Sub

Salut

Je n'utilise jamais "Intersect ..."

Je préfère être plus concret et vérifier le contenu de la cellule (ou des) par son type ou par la fonction CountA

if VarType(Cells(1, 1)) = 0 then ... '  La cellule est Empty

ou

If Application.WorksheetFunction.CountA(Range(Cells(1, 1), Cells(1, 10))) = 0 Then  ' La plage est vide

Sur le net, tu trouvera toutes les informations sur ces fonctions

Rechercher des sujets similaires à "commentaire automatise"