XL 2013 Mettre en gras un mot et l'associer au résultat d'une cellule (style concatener) avec VBA

jptaz15

XLDnaute Nouveau
Bonjour,

J'ai un code me permettant (en A1) de mettre en gras le mot "Résultat : " et de l'associer au résultat d'une cellule si cette cellule est remplie (ex : Résultat : 30 dossiers).

Mon premier problème est le suivant : si j'indique une valeur dans la cellule (F1) le mot "résultat : " devient en gras et le reste en format normal. Or, si je change la valeur de F1, tout le texte se met en gras. Je n'arrive pas à trouver ce que je manque...

La 2e chose que je me demande est la suivante : Si je souhaite reproduire cette démarche, mais pour plusieurs cellules (F2, F3, F4, etc) avec un résultat en A2, A10, A11, etc) (toujours avec le mot Résultat : en gras. qu'elle serait la meilleure chose à faire?

voici mon code et un fichier test

VB:
Private Sub Worksheet_Calculate()
Dim str1 As String, str2 As String
    str1 = "Resultats : "
    str2 = Range("E1")
       
   If (Range("f1")) = Empty Then
   Range("A1").Value = ""
   'MsgBox "cell f1 is empty"
      
    Else
   
    Range("A1").Value = str1 & str2  'concatenate strings
    Range("A1").Characters(1, 9).Font.Bold = True
      
    End If



End Sub

Ps : j'utilise la fonction Calculate, car la valeur de la Cellule sera obtenue à l'aide d'une formule et fonction Change ne fonctionne qu'avec une entrée manuelle.

merci d'avance pour votre aide
 

Pièces jointes

  • test gras.xlsm
    17.4 KB · Affichages: 12
Dernière édition:

jptaz15

XLDnaute Nouveau
Bonsoir

Pourquoi ne pas simplement utiliser un format personnalisé*?
Comme celui-ci (à mettre dans le champ Type)
"Résultat: "0

*: Clic-droit->Format de cellule->Nombre/Personnalisé
Merci pour ta réponse, mais je ne semble pas en mesure de mettre en gras le mot Résultat seulement et de laisser le reste en format normal. De plus je n'aurai pas seulement des nombres à écrire. À moins que je m'y prenne mal...
 

Staple1600

XLDnaute Barbatruc
Re

Et si vraiment du VBA il faut dégoupiller, alors je pourrai pondre un truc de ce genre au débotté ;)
Code:
Private Sub Worksheet_Change(ByVal T As Range)
If T.Address = "$E$1" Then
x = T.Value2
If Len(x) Then
Application.EnableEvents = False
[A1].Value = "Résultat: " & x
[A1].Characters(1, 10).Font.Bold = -1
[A1].Characters(11, 9 * 9).Font.Bold = 0
Application.EnableEvents = True
End If
End If
End Sub
 

jptaz15

XLDnaute Nouveau
Re

Et si vraiment du VBA il faut dégoupiller, alors je pourrai pondre un truc de ce genre au débotté ;)
Code:
Private Sub Worksheet_Change(ByVal T As Range)
If T.Address = "$E$1" Then
x = T.Value2
If Len(x) Then
Application.EnableEvents = False
[A1].Value = "Résultat: " & x
[A1].Characters(1, 10).Font.Bold = -1
[A1].Characters(11, 9 * 9).Font.Bold = 0
Application.EnableEvents = True
End If
End If
End Sub
Merci ça fonctionne très bien! Si je souhaite utiliser la fonction Worksheet_Calculate() quels changement dois-je apporter au code? J'obtiens l'erreur variable objet ou variable de bloc With non défini...

merci encore

JP
 

jptaz15

XLDnaute Nouveau
Re

Et pourquoi la procédure Change ne te suffit pas?
En fait, la valeur de la cellule $E$1 sera extraite d'une base de donnée en fonction d'un numéro de dossier. Je voudrais ensuite que la procédure automatise cela pour différentes données afin de créer un rapport client.
Pour la procédure Change, cette dernière ne fonctionne pas si la valeur de la cellule est le résultat d'une formule. C'est la raison pour laquelle j'utilise la procédure Calculate. :)
 

Discussions similaires