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

Ludovic 500

Grand Maître
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 :

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

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à?)
 

zeb

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

zeb

Modérateur
Meilleure réponse
(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 :
Code:
Sub Pourquoi_cela_ne_marche_t_il_pas()
    Range("A1").Value = "Ludovic"
    Range("A2").Value = "500"

    Range("A3").Formula = "=A1 & "" "" & A2"
    Range("A4").Value = Range("A1").Text & " " & Range("A2").Text

    Range("A3").Characters(9).Font.FontStyle = "Italique"
    Range("A4").Characters(9).Font.FontStyle = "Italique"
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.
 

Ludovic 500

Grand Maître
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 :

[cpp]Sub Pourquoi_faut_t_il_un_bouton()
Dim deb As Long
Dim longueur As Long
deb = Range("b2").Value 'résultat de la formule =nbcar(a1)+1
longueur = Range("b3").Value 'résultat de la formule =nbcar(b1)+1

Range("A4").Value = Range("a1").Text & " " & Range("b1").Text 'a1=Recherchev(F1;D1:E3;2)

Range("A4").Characters(deb, longueur).Font.FontStyle = "Italique" 'Résultat obtenu OK
End Sub[/cpp]


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
 

zeb

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

Bon, maintenant, pourquoi faut-il ajouter 1 ?

[fixed]Ludovic
----^--
1234567[/fixed]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 ?
 

Ludovic 500

Grand Maître
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
 

Ludovic 500

Grand Maître
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
 

zeb

Modérateur
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 . 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: )
 

zeb

Modérateur
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 :

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

- Confucius

A moi donc... :merci:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 147
Messages
6 718 339
Membres
1 586 417
Dernier membre
Fpfrlrlr
Partager cette page
Haut