Se connecter avec
S'enregistrer | Connectez-vous
Votre question
Résolu

Police de caractères différentes pour le résultat dans une cellule

Dernière réponse : dans Programmation
Partagez
5 Novembre 2009 10:23:55

Bonjour,

J'ai parcouru pas mal de sujets sur le forum, mais je n'ai pas trouvé ce que je cherche, peut-être est-ce tout simplement impossible.

Je travaille sur un fichier Excel à plusieurs onglets, dont les deux premiers servent à renseigner différents champs dans les onglets suivants, tels que client, interlocuteur, date, diverses références, etc, en remplissant directement des cellules, ou en passant par des menus déroulants.

Les autres onglets étant automatiquement renseignés selon les différents cas qui peuvent se présenter, et imprimés quand tout est renseigné, en cliquant sur un bouton, ce qui en même temps enregistre-sous le fichier vers un dossier et sous dossier, en fonction de l'année en cours et du nom du client, et d'une référence unique ; tout cela fonctionne très bien.

Mon soucis et que sur deux lignes faisant appel à la référence "Nom interlocuteur" précédée de la mention "Madame" ou "Monsieur" (issue d'un menu déroulant dans le premier onglet), je veux faire apparaitre le résultat dans une seule cellule sous la forme :
Monsieur Dupont. : (soit le nom de l'interlocuteur en italique)

N'ayant pas trouvé de solution propre pour l'instant, je travaille sur des cellules cote-à-cote, mais ça n'est pas génial car je dois jouer sur les décalages et les alignements droite et gauche....

J'ai trouvé sur le net une formule vb que j'ai adaptée et qui s'exécute sans erreur, mais je ne vois pas le résultat sur la cellule traitée, voici la macro :

  1. Sub mise_en_forme_du_texte()
  2. '
  3. ' mise_en_forme_du_texte Macro
  4. ' Macro enregistrée le 04/11/2009 par Lulu
  5. '
  6. Sheets("Rapport").Select
  7. Dim debut As String
  8. Dim longueur As String
  9. debut = [i54].Value 'nombre de caractère de Madame ou Monsieur
  10. longueur = [i55].Value 'nombre de caractère du nom de l'interlocuteur
  11. [b53].Characters(Start:=debut, Length:=longueur).Font.FontStyle = "Italique"
  12. '
  13. End Sub


Ma question : existe-t-il un moyen simple de parvenir à mes fins? je suis sous office 2003 (ça a peut-être son importance)
soit par VB, soit par formule directement sur excel?

Edit : remise en forme de mon message (c'est mieux là?)
9 Novembre 2009 16:29:02

>Zeb : il est toujours pas correct mon premier post?
m
0
l
a b L Programmation
9 Novembre 2009 17:13:40

Oups, je t'ai raté. Je regarde.
[T'as vu, mon méchant message a disparu ;)  ]
m
0
l
Contenus similaires

Meilleure solution

a b L Programmation
9 Novembre 2009 17:31:09

(C'est bien compliqué ton code.)

Alors, c'est bien embêtant, mais le changement de style ne marche pas sur des cellules calculées :/ 

Etudie puis exécute ce petit code, dans un classeur vide :
  1. Sub Pourquoi_cela_ne_marche_t_il_pas()
  2. Range("A1").Value = "Ludovic"
  3. Range("A2").Value = "500"
  4.  
  5. Range("A3").Formula = "=A1 & "" "" & A2"
  6. Range("A4").Value = Range("A1").Text & " " & Range("A2").Text
  7.  
  8. Range("A3").Characters(9).Font.FontStyle = "Italique"
  9. Range("A4").Characters(9).Font.FontStyle = "Italique"
  10. End Sub
C'est pas cool, hein ?

Sinon, tu vois grâce à cette exemple comment faire, mais statiquement. Si tu changes une valeur dans A1 ou A2, la valeur dans A4 ne changera pas dynamiquement. A toi de voir.
partage
9 Novembre 2009 19:30:47

Merci Zeb, j'arrive à faire quelque chose avec la ligne 9, mais pourquoi dois-je passer par un bouton associé à une macro? pas moyen de faire autrement?

autre chose, quand je fais compter le nombre de caractères dans une cellule (résultat d'une formule ou non), et que je veux utiliser ce comptage pour créer un point de départ et une longueur pour la mise en italique, je suis obligé de rajouter 1 à la valeur trouvée pour que ça fonctionne : le premier caractère est le caractère 0?

voici le code auquel j'arrive :

  1. Sub Pourquoi_faut_t_il_un_bouton()
  2. Dim deb As Long
  3. Dim longueur As Long
  4. deb = Range("b2").Value 'résultat de la formule =nbcar(a1)+1
  5. longueur = Range("b3").Value 'résultat de la formule =nbcar(b1)+1
  6.  
  7. Range("A4").Value = Range("a1").Text & " " & Range("b1").Text 'a1=Recherchev(F1;D1:E3;2)
  8.  
  9. Range("A4").Characters(deb, longueur).Font.FontStyle = "Italique" 'Résultat obtenu OK
  10. End Sub



Je voudrais insérer une image pour l'exemple, mais je ne sais plus comment faire...

en tous cas merci ça montre que c'est possible
m
0
l
a b L Programmation
9 Novembre 2009 21:05:13

  1. deb = Range("b2" ).Value 'résultat de la formule =nbcar(a1)+1
  2. longueur = Range("b3" ).Value 'résultat de la formule =nbcar(b1)+1
:pfff:  Et si tu essayais ça :
  1. longueur = Len(Range("A1").Text)+1

_____________________

Bon, maintenant, pourquoi faut-il ajouter 1 ?

Ludovic
----^--
1234567
Et si je me permettais de t'appeler Ludo ?
Je vais donc mettre les dernières lettres de ton prénom en italique.
Je compte donc 4 lettres pour L-U-D-O.
Et je mets en italique … partir de la cinquième (4+1).

Cela te paraît-il logique maintenant ?
m
0
l
10 Novembre 2009 07:54:24

ok, je ne maitrise pas vb, quand je veux modifier des trucs, j'enregistre une macro approchante, puis je me débrouille avec le peu que je comprends du code ;) 

j'avais bien fait une formation de trois jours à visual basic dans mon ancienne entreprise il y a 4 ou 5 ans, mais je n'ai jamais eu l'occasion de m'entrainer dessus, et depuis, j'ai forcément tout oublié [:spamafote]

déclarer mes "constantes" (deb & longueur) en début reste obligatoire, si j'applique ton code, non?

compris pour le caractère de départ, mais pourquoi sur le nombre de caractères à mettre en italique, faut-il aussi ajouter 1 (je confirme que j'ai bien compté l'espace) :??: 

PS : oui tu peux m'appeler Ludo, il n'y a aucun problème.

Edit : le caractère supplémentaire à ajouter au nombre de caractères à mettre en italique semble provenir de l'espace que tu ajoutes entres les deux expression ; si je le supprime et que je le rajoute à la fin de la première expression sur excel, c'est bon, et plus logique pour moi
m
0
l
10 Novembre 2009 09:16:00

Bon, j'arrive donc à faire ce que je veux, en ayant rajouté la partie de code au début de la macro qui imprime plusieurs feuilles du classeur... et ça marche

c'est pas dynamique, mais c'est bon et ça reste en forme après l'application de mes macro impression et enregistrer sous
m
0
l
a b L Programmation
10 Novembre 2009 11:56:57

Citation :
ok, je ne maitrise pas vb, quand je veux modifier des trucs, j'enregistre une macro approchante, puis je me débrouille avec le peu que je comprends du code ;) 
C'est exactement ce que je conseille à tous de faire ici. Mais pour ça, il faut un peu de jugeote, savoir lire (l'aide), et faire pleins de tests.
__________________________________

Viens ici avec ton code le plus horrible, nous t'apprendrons à en faire du code propre et efficace.
Mais si c'est moi qui répond, tu n'auras pas toujours la solution directe, mais plutôt un exercice à étudier pour comprendre comment faire.
(Oui, je sais je suis pénible, mais j'assume :sol:  )
m
0
l
10 Novembre 2009 13:58:07

:jap:  bien Maître :jap: 

;) 
m
0
l
a b L Programmation
10 Novembre 2009 14:12:16

Sans prétention aucune, j'aime ta réponse au ton con-ascendant associé à deux petits chinois, car j'applique ici un vieux précepte confucéen :

Citation :
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.

- Confucius


A moi donc... :jap: 
m
0
l
10 Novembre 2009 14:51:50

quant à l'aide en ligne de microsoft, ben je la trouve :/ 
m
0
l