Mise en forme cellule Excel

Résolu
Fianchetto Messages postés 41 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 14 décembre 2006 - 23 nov. 2006 à 17:27
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 - 24 nov. 2006 à 15:47
Bonjour à tous,

je cherche à pouvoir effectuer une mise en forme assez avancée d'une cellule Excel via le code VBA. Cela inclut principalement des :
- sauts à la ligne,
- tabulations,
- alignements (gauche, droite),
- choix du gras, italique, souligné.
Pour le retour chariot, Chr(10) fait bien l'affaire, pour les tabulations je n'ai pas trouvé la commande alors je passe par des espaces. Pour l'alignement et le choix du gras, mon problème pour une fonction comme : MaCellule.Font.FontStyle "Bold" c'est qu'elle met toute la cellule à gras. Il existe donc la fonction MaCellule.Characters(debut, longueur).Font.FontStyle "Bold" qui permet de passer seulement les caractères choisis en gras. Mais je ne peux pas savoir les variables debut et longueur à l'avance ! Mais je sais quelle partie du texte je souhaite changer.

Bref, je cherche une astuce du genre html comme mon texte à mettre en gras.

Quelqu'un aurait il une idée ? Merci d'avance

10 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
24 nov. 2006 à 13:50
J'ai pas essayé, mais ça ne marche pas quelque chose dans ce genre:

Dim TaString As String
Dim TaStringBold As String
Dim debut As Integer
Dim longueur As Integer


TaString = Range("TaCellule").Value
debut = InStr(1, TaString, TexteAMettreEnGrasQuiEstToujoursIdentique1 , vbTextCompare)
longueur = Len(TexteAMettreEnGrasQuiEstToujoursIdentique1)
Range("O2").Characters(debut, longueur).Font.FontStyle = "Bold"

TaString = Range("TaCellule").Value
debut = InStr(1, TaString, TexteVariableAMettreEnGras , vbTextCompare)
longueur = Len(TexteVariableAMettreEnGras )
Range("O2").Characters(debut, longueur).Font.FontStyle = "Bold"

TaString = Range("TaCellule").Value
debut = InStr(1, TaString, TexteAMettreEnGrasQuiEstToujoursIdentique2 , vbTextCompare)
longueur = Len(TexteAMettreEnGrasQuiEstToujoursIdentique2 )
Range("O2").Characters(debut, longueur).Font.FontStyle = "Bold"

 Drikce 06
3
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
23 nov. 2006 à 17:33
Salut pour bold essaye de voir avec la fonction InStr() et pour la tabulation VbTab.

 Drikce 06
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
23 nov. 2006 à 17:42
Private Sub CommandButton1_Click()


Dim TaString As String
Dim TaStringBold As String
Dim debut As Integer
Dim longueur As Integer


TaString = Range("O2").Value  'ici "salut les gens"
TaStringBold = "les"
debut = InStr(1, TaString, TaStringBold, vbTextCompare)
longueur = Len(TaStringBold)
Range("O2").Characters(debut, longueur).Font.FontStyle = "Bold"


End Sub

 Drikce 06
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 nov. 2006 à 18:49
Salut,

je confirme, vbTab pour la Tabulation mais PAS Chr(10) pour le saut de ligne, c'est vbCrLf
Chr(10) = nouvelle lignealors que vbCrLf Chr(10) + Chr(13) nouvelle ligne + retour chariot

Pour l'alignement, gras, italique, etc...  rien ne vaut un enregistrement en direct grâce à l'enregistreur de macro.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Fianchetto Messages postés 41 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 14 décembre 2006
24 nov. 2006 à 13:43
Ok, merci à vous pour les précisions notamment sur les vbCrLf et vbTab.
Je n'avais pas pensé à la solution de Drike pour la recherche dans une chaine de caractères avec InStr, donc c'est un bon point. Mais seulement pour les chaines fixes en fait.Le top serait d'avoir des expressions régulières, mais je ne crois pas que VB puisse le faire. A savoir ce que je cherche à faire par exemple, c'est mettre en gras une partie d'un  texte de ce genre :


<hr />


texte normal texte normal texte normal texte normal texte normal texte normal



TexteAMettreEnGrasQuiEstToujoursIdentique1 TexteVariableAMettreEnGras TexteAMettreEnGrasQuiEstToujoursIdentique2
texte normal texte normal texte normal texte normal texte normal texte normal



<hr />




Pour prendre un exemple bidon, on pourrait avoir cela :
texte normal : Bonjour Monsieur
TexteAMettreEnGrasQuiEstToujoursIdentique1 : Aujourd'hui n'oubliez pas notre rdv à
TexteVariableAMettreEnGras : Saint Cuq les deux Eglises à 14h30
TexteAMettreEnGrasQuiEstToujoursIdentique2 : chez notre client.

C'est pourquoi je peux difficilement passer par l'enregistreur de macro et par la fonction InStr( sauf si celle-ci accepte des caractères génériques). Je sèche un peu ...
0
Fianchetto Messages postés 41 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 14 décembre 2006
24 nov. 2006 à 14:04
oui tu as peut etre raison ... en fait

debut = InStr(1, TaString, TexteVariableAMettreEnGras , vbTextCompare)
devrait ressemble a quelque chose dans le genre :
debut = InStr(1, TaString, mavariable1 & " et " & mavariable2 , vbTextCompare)

par contre, je dois faire cela sur plusieurs centaines (ptet milliers) de lignes de mon tableau Excel, et chaque ligne ayant une cellule contenant le texte bien compliqué qui précede, ca risque de pas être du gateau, vu toutes les opération de recherche InStr faisant intervenir des variables !

Merci
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
24 nov. 2006 à 14:14
Ce sera mieux sous forme de sub que tu appelles quand tu veux :

Private Sub CommandButton1_Click()


Call StringBold(Range("A1"), Range("A1").Value, "bonjour")


End Sub


Sub StringBold(ByVal RangeCellule As Range, ByVal TaString As String, ByVal TaStringBold As String)


Dim debut As Integer
Dim longueur As Integer


debut = InStr(1, TaString, TaStringBold, vbTextCompare)
longueur = Len(TaStringBold)
RangeCellule.Characters(debut, longueur).Font.FontStyle = "Bold"


End Sub





 Drikce 06
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
24 nov. 2006 à 14:17
Ce qui te donne pour l'exemple du haut:

Private Sub CommandButton1_Click()

Call StringBold(Range("A1"), Range("A1").Value, "TexteAMettreEnGrasQuiEstToujoursIdentique1")
Call StringBold(Range("A2"), Range("A2").Value, "TexteVariableAMettreEnGras ")
Call StringBold(Range("A3"), Range("A3").Value, "TexteAMettreEnGrasQuiEstToujoursIdentique2 ")

End Sub
Sub StringBold(ByVal RangeCellule As Range, ByVal TaString As String, ByVal TaStringBold As String)

Dim debut As Integer
Dim longueur As Integer

debut = InStr(1, TaString, TaStringBold, vbTextCompare)
longueur = Len(TaStringBold)
RangeCellule.Characters(debut, longueur).Font.FontStyle = "Bold"

End Sub

 Drikce 06
0
Fianchetto Messages postés 41 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 14 décembre 2006
24 nov. 2006 à 15:45
Oui je pensais passer par des procedures Sub histoire de ne pas reécrire toujours la même chose. Merci pour l'aide
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
24 nov. 2006 à 15:47
De rien! @+

 Drikce 06
0
Rejoignez-nous