Modification du formatage de caractères dans une cellule

Fermé
CMO7884 - Modifié le 17 déc. 2019 à 10:03
yg_be Messages postés 22763 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mai 2024 - 17 déc. 2019 à 15:05
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:
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:

4 réponses

yg_be Messages postés 22763 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mai 2024 1 480
Modifié le 17 déc. 2019 à 11:57
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?
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 explicit
en 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) <> ""
0
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?
0
yg_be Messages postés 22763 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mai 2024 1 480
17 déc. 2019 à 13:58
as-tu essayé ma première suggestion?
pour partager un fichier, il suffit de le mettre à disposition sur internet (cjoint.com, google drive, ...), puis de publier le lien ici.
0
Oui, mais le problème reste le même.

Ci dessous le lien vers le fichier exemple.

https://www.cjoint.com/c/ILrnbCSNMzr
0
yg_be Messages postés 22763 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mai 2024 1 480
17 déc. 2019 à 14:53
j'ai testé ton fichier, j'obtiens des résultats encore pire. par exemple, ceci
devient cela:
0
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...
0
yg_be Messages postés 22763 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mai 2024 1 480
17 déc. 2019 à 15:05
Eh bien, je dirais que Microsoft non plus n'a pas bien compris, et que Excel ne se comporte pas correctement.
0