Modification du formatage de caractères dans une cellule
CMO7884
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai créé une macro pour me simplifier la vie sur une action récurrente lors d'un traitement de données sur un fichier Excel:
Je dois comparer des données texte entre 2 cases (version d'origine, et version mise à jour). Une fois les différences entre les 2 versions identifiées, je dois mettre la version N-1 en gras barré et couleur, et la version N en gras et couleur.
Afin de me simplifier la vie, j'ai créé une macro VBA qui contrôle chacun des caractères d'une cellule, et qui les bascule vers le format désiré (gras/barré/couleur, ou gras/couleur) si le caractère est en gras (lors du contrôle des données on n'a plus qu'à mettre les données en gras, cela permet de gagner pas mal de temps).
J'ai donc fait le code suivant:
Le soucis est que j'ai un bug récurrent dans une condition particulière. Lorsque dans une cellule j'ai un mix de caractère en gras et en normal, et que le premier caractère de la cellule est gras, le changement de formatage du premier caractère, change la mise en forme des caractères suivants sans que ça soit demandé.
Si les caractères en gras sont noyés au milieu du texte pas de problème. Si toute la cellule est en gras, pas de problème non plus.
Est ce que quelqu'un aurait déjà vu ce bug ou aurait une idée dans quel sens chercher une solution pour ce problème (en dehors de mettre un espace en normal devant le texte ;-) ).
Version Office: Office 2010
Version Excel : 14.0.7190.5000 (32 bit)
Christophe
J'ai créé une macro pour me simplifier la vie sur une action récurrente lors d'un traitement de données sur un fichier Excel:
Je dois comparer des données texte entre 2 cases (version d'origine, et version mise à jour). Une fois les différences entre les 2 versions identifiées, je dois mettre la version N-1 en gras barré et couleur, et la version N en gras et couleur.
Afin de me simplifier la vie, j'ai créé une macro VBA qui contrôle chacun des caractères d'une cellule, et qui les bascule vers le format désiré (gras/barré/couleur, ou gras/couleur) si le caractère est en gras (lors du contrôle des données on n'a plus qu'à mettre les données en gras, cela permet de gagner pas mal de temps).
J'ai donc fait le code suivant:
lbl1: car = 1 nbcar = Len(Cells(l, c)) 'Cells(l, c).Select While car < nbcar + 1 If Cells(l, c).Characters(Start:=car, Length:=1).Font.Bold = True Then With Cells(l, c).Characters(Start:=car, Length:=1).Font .Strikethrough = True .Color = -2778277 End With End If car = car + 1 Wend car = 1 nbcar = Len(Cells(l, c + 1)) 'Cells(l, c + 1).Select While car < nbcar + 1 If Cells(l, c + 1).Characters(Start:=car, Length:=1).Font.Bold = True Then Cells(l, c + 1).Characters(Start:=car, Length:=1).Font.Color = -2778277 End If car = car + 1 Wend l = l + 1 If Cells(l, 1) <> "" Then GoTo lbl1
Le soucis est que j'ai un bug récurrent dans une condition particulière. Lorsque dans une cellule j'ai un mix de caractère en gras et en normal, et que le premier caractère de la cellule est gras, le changement de formatage du premier caractère, change la mise en forme des caractères suivants sans que ça soit demandé.
Si les caractères en gras sont noyés au milieu du texte pas de problème. Si toute la cellule est en gras, pas de problème non plus.
Est ce que quelqu'un aurait déjà vu ce bug ou aurait une idée dans quel sens chercher une solution pour ce problème (en dehors de mettre un espace en normal devant le texte ;-) ).
Version Office: Office 2010
Version Excel : 14.0.7190.5000 (32 bit)
Christophe
A voir également:
- Modification du formatage de caractères dans une cellule
- Suivi de modification word - Guide
- Formatage clé usb - Guide
- Formatage pc - Guide
- Caractères ascii - Guide
- Aller à la ligne dans une cellule excel - Guide
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peux-tu partager un fichier pour pouvoir facilement tester?
as-tu essayé en forçant aussi le changement de format pour les caractères non gras?
ou, comme tu le suggères, de mettre un espace normal devant le texte, et de le retirer ensuite?
en passant, deux suggestions:
- ajouter
- au lieu de
il est préférable de faire ainsi:
peux-tu partager un fichier pour pouvoir facilement tester?
as-tu essayé en forçant aussi le changement de format pour les caractères non gras?
With Cells(l, C).Characters(Start:=car, Length:=1).Font If .Bold = True Then .Strikethrough = True .Color = -2778277 Else .Strikethrough = False .Color = 0 ' ??? End If End With
ou, comme tu le suggères, de mettre un espace normal devant le texte, et de le retirer ensuite?
en passant, deux suggestions:
- ajouter
option expliciten début de module
- au lieu de
lbl1: ' ... If Cells(l, 1) <> "" Then GoTo lbl1
il est préférable de faire ainsi:
Do ' ... Loop While Cells(l, 1) <> ""
Bonjour,
Rajouter un espace en VBA, on perd le formatage quand on a les différents formats dans la cellule.
Le rajouter à la main, vu le volume de données à traiter et le risque en cas de plantage si on en a oublié un (perte intégrale des données), cette solution n'est pas envisageable (la solution ne doit pas générer une charge supplémentaire pour les utilisateurs).
J'ai fait un fichier exemple avec le code incriminé, comment peut-on l'envoyer ici?
Rajouter un espace en VBA, on perd le formatage quand on a les différents formats dans la cellule.
Le rajouter à la main, vu le volume de données à traiter et le risque en cas de plantage si on en a oublié un (perte intégrale des données), cette solution n'est pas envisageable (la solution ne doit pas générer une charge supplémentaire pour les utilisateurs).
J'ai fait un fichier exemple avec le code incriminé, comment peut-on l'envoyer ici?
Oui, mais le problème reste le même.
Ci dessous le lien vers le fichier exemple.
https://www.cjoint.com/c/ILrnbCSNMzr
Ci dessous le lien vers le fichier exemple.
https://www.cjoint.com/c/ILrnbCSNMzr
C'est exactement les problèmes que j'ai, on perd le formatage des caractères de la cellule.
Vu qu'à la base on fait un traitement caractère par caractère, je n'arrive pas à comprendre comment sont liées entre eux les autres caractères, et que le changement de format de l'un implique des changements sur les autres...
Vu qu'à la base on fait un traitement caractère par caractère, je n'arrive pas à comprendre comment sont liées entre eux les autres caractères, et que le changement de format de l'un implique des changements sur les autres...