excel-commentaire calculé sur cellule

« Forum technique (liste des messages)123

10/02-2004 à 10:16Bonjour,
questions sous excel,qui peut me dire comment je peux insérer un commentaire sur une cellule mais qui soit un calcul qui transforme une somme Euros en Francs en posant la souris sur la cellule. Soit en insérant un commentaire calculé.
Merci de vos réponses.


11/02-2004 à 00:25Salut

Je met le format Euro dans la cellule A1 et je crée un commentaire dans la cellule A1
Je crée un bouton Mise à jour avec la macro suivante :

Sub Macro_Commentaire()
'
' Macro_Commentaire Macro en franc belge
' Macro enregistrée le 11/02/04 par Guy Meurisse
'
Montant_EURO = Range("A1")
Montant_FB = Format((Montant_EURO * 40.3399), "#,##0")
Range("A1").Comment.Text Text:=Montant_FB & " FB"

End Sub

Chaque fois que tu modifie la cellule A1, il faut cliquer sur le bouton Mise à jour
Le tout est trouver un moyen de faire exécuter la macro à chaque modification de la cellule.

A+

Guy


----------
Guy


excel-commentaire calculé sur cellule
11/02-2004 à 01:48à placer dans le code de la feuille concernée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Var As String, c As Integer
c = VarType(Target)
If c > 6 Then
Var = CStr(Target.Address)
ActiveSheet.Range(Var).ClearComments
Else
Var = CStr(Target.Address)
Call Macro_Commentaire(Var)
End If
End Sub


et dans un module

Sub Macro_Commentaire(Var)
Dim Montant_EURO As String, Montant_FB As String
Montant_EURO = Range(Var)
Montant_FB = Format((Montant_EURO * 40.3399), "#,##0")
ActiveSheet.Range(Var).ClearComments
ActiveSheet.Range(Var).AddComment "Montant en FB: " & CStr(Montant_FB) & " FB"
End Sub


chaque fois qu'une valeur est modifiée dans la feuille de calcul la Macro_Commentaire est appellée et exécutée, s'il fallait traiter


----------
Bipbipcoyote image


11/02-2004 à 01:50différentes feuilles il suffit de recopier la procédure du dessus dans le code de la feuille voulue (à traiter). Ce qui rend la "fonction" un peu plus polyvalente


----------
Bipbipcoyote image


11/02-2004 à 09:20Bonjour,
et merci à vous deux de vos réponses, mais je ne sais pas très bien programmer en VBA voire pratiquement pas, si je comprends bien coyote surdoué, je dois créer un code de programme dans la feuille et en plus un module qui remet à jour ce commentaire chque fois que les cellule sont modifiées ? Je ne sais pas si je vais y arriver !! est-ce que tu aurais déjà testé ce que tu me réponds ?
En tout cas merci m fois image

excel-commentaire calculé sur cellule
11/02-2004 à 10:13Bonjour Coyote,
Suite à ta réponse je viens de créer le code dans la feuille concernée où je veux ce résultat, mais le code à créer dans le module ? où je le place à la suite du code que je viens de créer ? Je sais je suis pas douée, mais je ne connais pas grand chose à la programmation VBA (pour dire rien!), alors j'attends ta réponse et je te remercie vivement. A+

11/02-2004 à 11:45tu dois aller dans le menu insertion - module ou tu fais un clic droit dans la petite fenêtre VBA VBA Project - Insertion - module et tu copie le code dans la fenêtre qui s'ouvre à droite


----------
Bipbipcoyote image


11/02-2004 à 12:02oui, j'ai testé.... et c'est ainsi que je me rends compte que la fonction est valide pour toutes les cellules. Ce qui paradoxalement risque de ne pas convenir... car je suppose que ce calcul tu ne le fais que dans une colonne bien déterminée et non pas sur toute la feuille... on peut donc pour contrer cela, tester l'adresse de target... on va admettre que tes calculs ont lieu dans la colonne C uniquement. De plus, j'ai une erreur si on efface purement et simplement le contenu de la cellule (ah ah cette valeur null, que ferait on de nos longues soirées d'hiver sans elle)

alors la colonne C sera decelée grâce à
Mid(Var, 2, 1) = "C"
et la valeur null sera traitée avec
If Target = "" Then
ActiveSheet.Range(Var).ClearComments
Exit Sub
End If

donc le code à placer dans le code de la feuille, complet et définitif (j'espère) est

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Var As String, c As Integer
c = VarType(Target)
Var = CStr(Target.Address)
If Target = "" Then
ActiveSheet.Range(Var).ClearComments
Exit Sub
End If
If c > 2 And c < 6 And Mid(Var, 2, 1) = "C" Then
Call Macro_Commentaire(Var)
Else
ActiveSheet.Range(Var).ClearComments
End If
End Sub


----------
Bipbipcoyote image


excel-commentaire calculé sur cellule
11/02-2004 à 12:02à l'avenir , restes dans le même post ...
oui, j'ai testé.... et c'est ainsi que je me rends compte que la fonction est valide pour toutes les cellules. Ce qui paradoxalement risque de ne pas convenir... car je suppose que ce calcul tu ne le fais que dans une colonne bien déterminée et non pas sur toute la feuille... on peut donc pour contrer cela, tester l'adresse de target... on va admettre que tes calculs ont lieu dans la colonne C uniquement. De plus, j'ai une erreur si on efface purement et simplement le contenu de la cellule (ah ah cette valeur null, que ferait on de nos longues soirées d'hiver sans elle)

alors la colonne C sera decelée grâce à
Mid(Var, 2, 1) = "C"
et la valeur null sera traitée avec
If Target = "" Then
ActiveSheet.Range(Var).ClearComments
Exit Sub
End If

donc le code à placer dans le code de la feuille, complet et définitif (j'espère) est

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Var As String, c As Integer
c = VarType(Target)
Var = CStr(Target.Address)
If Target = "" Then
ActiveSheet.Range(Var).ClearComments
Exit Sub
End If
If c > 2 And c < 6 And Mid(Var, 2, 1) = "C" Then
Call Macro_Commentaire(Var)
Else
ActiveSheet.Range(Var).ClearComments
End If
End Sub


----------
Bipbipcoyote image


11/02-2004 à 13:18Re-bonjr Coyote,
En recopiant le module, que j'ai écrit à la suite du code de la feuille, qui est donc le module de macro_commentaire, j'ai eu une erreur de compilation sur cette ligne, donc la lgne qui suit et qui se trouve avant le End Sub ? peux-tu me dire pourquoi ?
ActiveSheet.Range(Var).AddComment"Montant en F:& CStr(Montant_F)&"F"Autre chose je suis peut-être exigeante, mais cela me permettrait de savoir à quoi correspond la lgne de programme, pourrais-tu reprendre ta programmation et me porter en commentaire avant chque lgne, ce qui découle de chque lgne de programme. Je ne sais pas si tu me suis !
C'est ce que j'avais fait en formation, sur une application que l'on m'avait programmé et ceci me permet de pouvoir modifier un élément si il y a lieu de le modifier, mais si tu ne sais pas ce que ta ligne de programme va t'exécuter ceci est + compliqué. Encore merci et excuses-moi de prendre sur ton temps.
image

11/02-2004 à 13:39REbonjr Coyote,
Et bien ta formule fonctionne très bien j'ai trouvé l'erreur de recopie que j'avais faite et j'ai rectifié, seulement et encore une Question, je ne sais pas
1>>comment mettre la formule pour arrondir à 2 décimale derrière la virgule ,(je n'ai pas su porter la formule d'arrondi),
2>>que le calcul se fasse sur toutes les cellules de la colonne D
3>>si cela pouvait être en rouge !
Je pense que je suis exigeante mais tant qu'à faire autant que ce soit parfait, en tout cas Chapeau à toi COYOTE et merci mille fois !!!!!!!!

excel-commentaire calculé sur cellule
11/02-2004 à 15:35remplaces le module par... les4 lignes TextFrame sont personnalisables
- 3 = rouge
- Bold = gras
, tu laisses ou tu supprimes la ligne (j'ai mis italique , on ne va pas bouder son plaisir, mais c'est peut être moins lisible quoique, j'ai utilisé une taille de caractère à 14 points [:D] )
Pour l'arrondi, il suffisait de changer le modèle de format de Montant_FB

Sub Macro_Commentaire(Var)
Dim Montant_EURO As String, Montant_FB As String
Montant_EURO = Range(Var)
Montant_FB = Format((Montant_EURO * 40.3399), "###0.00")
ActiveSheet.Range(Var).ClearComments
ActiveSheet.Range(Var).AddComment "Montant en FB: " & CStr(Montant_FB) & " FB"

ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.ColorIndex = 3
ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.Bold = True
ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.Italic = True
ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.Size = 14

End Sub


----------
Bipbipcoyote image


11/02-2004 à 15:55avec les commentaires maintenant ....il suffit de recopier le tout dans VBE, les commentaires seront en vert

'cette procédure est une procédure standard
'le paramètre le plus important est Target
'qui correspond à la cellule en cours
Private Sub Worksheet_Change(ByVal Target As Range)
'je désigne 2 variables, les noms importe peu
'par contre le type est important
Dim Var As String, c As Integer
'je détermine le type de donnée que contient target
'ça peut être un chiffre, un caractère, une date, autre
'comme je ne veux que traiter les chiffres, il est important
'd'obtenir ce paramètre, sinon ça bug dans la formule de
'multiplication, forcément. On ne multiplie pas une lettre
c = VarType(Target)
'ensuite, il me faut l'adresse de la cellule, pour ne
'traiter que la colonne C et aussi pour paramètrer
'le commentaire correspondant, si je traite D3, je dois
'bien sûr traiter le commentaire de D3 et pas de D6
Var = CStr(Target.Address)
'ici, il faut que je prévois le cas où on remet la cellule à blanc,
If Target = "" Then
' j'enlève le commentaire tout simplement
ActiveSheet.Range(Var).ClearComments
'et je sors de la procédure, je n'ai plus rien à y faire
Exit Sub
End If
'si la cellule est de type chiffre, bon là je renvois vers l'aide
'places toi sur le mot VarType (plus haut)
'tu verras que 2 est un integer, 6 un double, etc
'je teste aussi si dans l'adresse de target, si j'ai la lettre D
'pour que notre procédure ne traite que cette colonne
If c > 2 And c < 6 And Mid(Var, 2, 1) = "D" Then
'j appelle la macro mise dans le module et je lui transmets Var
Call Macro_Commentaire(Var)
Else
'si cela ne correspond pas, je nettoie les commentaires
'si on arrive jusqu ici, remarques que la procédure va
'se terminer toute seule
ActiveSheet.Range(Var).ClearComments
End If
End Sub


Sub Macro_Commentaire(Var)
'ici on entre dans la procédure et l'on est
'accompagné avec notre adresse Var, exemple $D$4
Dim Montant_EURO As String, Montant_FB As String
'on remplit la variable avec le contenu de Var
Montant_EURO = Range(Var)
'on fait le calcul on formate le résultat à 2 décimales
Montant_FB = Format((Montant_EURO * 40.3399), "###0.00")
'on doit enlever éventuellement un ancien commentaire
'avant de pouvoir le remplacer sinon bug assuré
ActiveSheet.Range(Var).ClearComments
'on ajoute le commentaire à la cellule , enfin !
ActiveSheet.Range(Var).AddComment "Montant en FB: " & CStr(Montant_FB) & " FB"
'on formate le commentaire, d'abord la couleur exemple 3=rouge, 5=bleu
ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.ColorIndex = 3
'on place en gras
ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.Bold = True
'on place en italique, pourquoi pas
ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.Italic = True
'on place en taille 14, pour les mal-voyants, ce qui est louable
ActiveSheet.Range(Var).Comment.Shape.TextFrame.Characters.Font.Size = 14

End Sub


----------
Bipbipcoyote image


11/02-2004 à 15:58

'traiter que la colonne C et aussi pour paramètrer

il faut bien sûr lire 'traiter que la colonne D et aussi pour paramètrer


----------
Bipbipcoyote image


excel-commentaire calculé sur cellule
11/02-2004 à 16:00

'places toi sur le mot VarType (plus haut)

il faut compléter par :
' et fais F1


----------
Bipbipcoyote image


11/02-2004 à 16:01Coyote tu es GGGénial ,
ça fonctionne à merveille, mais si je n'avais pas copié textuellement ce que u m'as donné je n'y serais pas arrivé seule.
Bravo et encore merci , peut être à une autre fois pour autre chose.

12/02-2004 à 17:04Re-bonjour Coyotte,
Alors j'ai été un peu trop vite en testant le programme car il y a un bug qui se produit quand je recopie vers le bas la cellule où j'ai le commentaire, car comme il s'agit d'un solde, je ne le recalcule en le copiant vers le bas, que lorsque je mets de nouvelles écritures ? le bog se produit donc sur la ligne :
Erreur d'éxecuton 13 Incompatibilité de type :
If Target = "" Then
Donc j'ai encore besoin de vous !!!!
Que dois-je faire ?
Merci Coyotte.........A+

excel-commentaire calculé sur cellule
12/02-2004 à 19:41héhé, ok... je n'avais pas testé la recopie.... bon, on s'y prend différemment, car en fait, Target est valable pour une seule cellule car si on envoit seulement la sélection Target vaut par exemple $D$10 et le code fonctionne mais lorsque tu fais une sélection multiple (comme lorsque tu veux recopier vers le bas) Target vaut par exemple $D$10:$D$20 et donc ça bugge parce que l'on ne peut pas vérifier si plusieurs cellules en même temps sont égales à "" , on doit boucler sur les différentes cellules... donc voilà, j'ai modifié le code pour qu'il boucle sur chaque cellule et ma foi, s'il n'y a qu'une seule cellule, il boucle 1 fois (CQFD)...bref ! je vois à tes yeux ronds que tu ne comprends pas... [:D] [:D] je suis moi même épaté lorsque je me relis [:D] ...bref, je remets le nouveau code des 2 procédures ci-dessous...testes le ....et viens réclamer si tu trouves d'autres anicorches..

Private Sub Worksheet_Change(ByVal Target As Range)
'je désigne 2 variables, les noms importe peu
'par contre le type est important
Dim Var As Range, c As Integer
'je détermine le type de donnée que contient target
'ça peut être un chiffre, un caractère, une date, autre
'comme je ne veux que traiter les chiffres, il est important
'd'obtenir ce paramètre, sinon ça bug dans la formule de
'multiplication, forcément. On ne multiplie pas une lettre
For Each Var In Range(Target.Address)
c = VarType(Var)
'ensuite, il me faut l'adresse de la cellule, pour ne
'traiter que la colonne D et aussi pour paramètrer
'le commentaire correspondant, si je traite D3, je dois
'bien sûr traiter le commentaire de D3 et pas de D6
'Var = CStr(Target.Address)
'ici, il faut que je prévois le cas où on remet la cellule à blanc,
If Var = "" Then
' j'enlève le commentaire tout simplement
ActiveSheet.Range(Var).ClearComments
'et je sors de la procédure, je n'ai plus rien à y faire
Exit Sub
End If 'si la cellule est de type chiffre, bon là je renvois vers l'aide
'places toi sur le mot VarType (plus haut), fais F1
'tu verras que 2 est un integer, 6 un double, etc
'je teste aussi si dans l'adresse de target, si j'ai la lettre D
'pour que notre procédure ne traite que cette colonne
If c > 2 And c < 6 And Mid(Var.Address, 2, 1) = "D" Then
'j appelle la macro mise dans le module et je lui transmets Var
Call Macro_Commentaire(Var)
Else 'si cela ne correspond pas, je nettoie les commentaires
'si on arrive jusqu ici, remarques que la procédure va
'se terminer toute seule
ActiveSheet.Range(Var.Address).ClearComments
End If
Next
End Sub


Sub Macro_Commentaire(Var)
'ici on entre dans la procédure et l'on est
'accompagné avec notre adresse Var, exemple $D$4
Dim Montant_EURO As String, Montant_FB As String
'on remplit la variable avec le contenu de Var
Montant_EURO = Var
'on fait le calcul on formate le résultat à 2 décimales
Montant_FB = Format((Montant_EURO * 40.3399), "###0.00")
'on doit enlever éventuellement un ancien commentaire
'avant de pouvoir le remplacer sinon bug assuré
ActiveSheet.Range(Var.Address).ClearComments
'on ajoute le commentaire à la cellule , enfin !
ActiveSheet.Range(Var.Address).AddComment "Montant en FB: " & Chr(13) & CStr(Montant_FB) & " FB"
'on formate le commentaire, d'abord la couleur exemple 3=rouge, 5=bleu
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.ColorIndex = 3
'on place en gras
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.Bold = True
'on place en italique, pourquoi pas
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.Italic = True
'on place en taille 14, pour les mal-voyants, ce qui est louable
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.Size = 14
ActiveSheet.Range(Var.Address).Comment.Shape.Height = 40
ActiveSheet.Range(Var.Address).Comment.Shape.Width = 120
End Sub


----------
Bipbipcoyote image


12/02-2004 à 19:53ça devient meilleur, je retrouve moi même les bugs [:D] .... voici la dernière version, car il faut prévoir aussi que tu vas remettre les cellules à rien en utilisant la multi sélection....donc je place une seconde boucle sur une variable Var1

Private Sub Worksheet_Change(ByVal Target As Range)
'je désigne 3 variables, les noms importe peu
'par contre le type est important
Dim Var As Range, Var1 As Range, c As Integer
'on doit boucler même si une seule cellule est à considérer
'car Target peut aussi bien contenir $D$3 que $D$3:$D
For Each Var In Range(Target.Address)
'je détermine le type de donnée que contient target
'ça peut être un chiffre, un caractère, une date, autre
'comme je ne veux que traiter les chiffres, il est important
'd'obtenir ce paramètre, sinon ça bug dans la formule de
'multiplication, forcément. On ne multiplie pas une lettre
c = VarType(Var)
'ensuite, il me faut l'adresse de la cellule, pour ne
'traiter que la colonne D et aussi pour paramètrer
'le commentaire correspondant, si je traite D3, je dois
'bien sûr traiter le commentaire de D3 et pas de D6
'Var = CStr(Target.Address)
'ici, il faut que je prévois le cas où on remet la cellule à blanc,
If Var = "" Then
' j'enlève le commentaire tout simplement
For Each Var1 In Range(Target.Address)
ActiveSheet.Range(Var1.Address).ClearComments
Next
'et je sors de la procédure, je n'ai plus rien à y faire
Exit Sub
End If 'si la cellule est de type chiffre, bon là je renvois vers l'aide
'places toi sur le mot VarType (plus haut), fais F1
'tu verras que 2 est un integer, 6 un double, etc
'je teste aussi si dans l'adresse de target, si j'ai la lettre D
'pour que notre procédure ne traite que cette colonne
If c > 2 And c < 6 And Mid(Var.Address, 2, 1) = "D" Then
'j appelle la macro mise dans le module et je lui transmets Var
Call Macro_Commentaire(Var)
Else 'si cela ne correspond pas, je nettoie les commentaires
'si on arrive jusqu ici, remarques que la procédure va
'se terminer toute seule
ActiveSheet.Range(Var.Address).ClearComments
End If
Next
End Sub



----------
Bipbipcoyote image


13/02-2004 à 08:34Bonjour Coyotte,
Pris connaissance ce matin de ta réponse et je t'en remercie, j'ai de nouveau un bug que je n'avais pas avant au niveau du format ? auparavant il fonctionnait très bien!
Je t'ai donc fait la copie ci-dessous car moi j'ai des Francs et je désire le format que j'indique. Alors que se passe t'il ? et d'autre part, dans la cellule correspondante il se met $D$40 D car je suis bien col D et 40 je suis sur la cellule 40 ?
Pourtant j'ai vérifié que j'ai transcris comme tu l'as porté sur le message ?
En tout cas c'est drôlement compliqué de programmer !! Je ne pense pas en faire ma tasse de thé !
Encore merci si tu peux voir cela (suis un peu enm....... non ?)

Sub Macro_commentaire(Var)
Dim Montant_Euro As String, Montant_F As String
Montant_Euro = Var
Montant_F = Format((Montant_Euro * 6.55957), "##,##0.00")
ActiveSheet.Range(Var.Address).ClearComments
ActiveSheet.Range(Var.Address).AddComment "Montant en F : " & Chr(13) & CStr(Montant_F) & "F"
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.ColorIndex = 3
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.Bold = True
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.Italic = True
ActiveSheet.Range(Var.Address).Comment.Shape.TextFrame.Characters.Font.Size = 14
ActiveSheet.Range(Var.Address).Comment.Shape.Height = 40
ActiveSheet.Range(Var.Address).Comment.Shape.Width = 120
End Sub
image

Merci de vous identifier

« Forum technique (liste des messages)123

44 Enregistrements / Page 1/2