Erreur sur Couleur de chaine de caractères dans cellule
Bonjour à tous,
Je vais essayer d'être le plus clair possible pour décrire mon soucis, à défaut de pouvoir joindre les fichiers complets permettant de lancer la macro.
L'objectif du code est, sur chaque cellule d'une colonne donnée (n° 12) :
- Analyser la chaine de caractère de la cellule
- Identifier une chaine sous la forme "CIT######" , avec # = chiffre, sachant qu'il peut s'y trouver du texte avant, du texte après, et plusieurs CIT dans la meme cellule à identifier.
- Une fois une CIT###### identifiée, colorer le texte "CIT######" en rouge ou en bleu selon l'appartenance de cette chaine de caractère à un tableau unidimensionnel ou non
A la fin du post, vous trouveres un extrait du code utilisé pour cette partie là (analyse, identification, peinture), et en PJ une image détaillant les résultats obtenus ainsi que l'erreur rencontrée.
L'erreur rencontrée est la suivante :
A noter : La valeur de la cellule n'est pas en texte brut, mais est issue d'un autre fichier (=RECHERCHEV(.....)).
- Lorsque dans ma cellule est présent du texte avant mon CIT###### (exemple : "patateCIT123456") : la chaine de caractère "CIT123456" est bien identifiée (vérifié en mode pas à pas) cependant elle n'est pas colorisée (malgré l'execution de la ligne, sans erreur signalée)
- Si je copie-colle (valeurs uniquement) la cellule, cela fonctionne parfaitement, et ma chaine de caractère "CIT123456" est colorée comme il se doit
Note :
- Il me semble que cela ne se produit seulement lorsque du texte se trouve avant un CIT###### ) identifier.
- Figer le texte semble résoudre le soucis, mais je ne peux pas le faire sur mon fichier, et insérer une colonne n'est pas une option possible.
L'exemple ci-dessous vous montre le résultat dans différents cas :
1 - L'erreur décrite ci-dessus : les valeurs de la colonne sont importées d'un autre fichier. La colorisation ne s'effectue pas.
2 - Je copie-colle les valeurs uniquement de la cellule du dessus, et cela fonctionne (et me rajoute un espace avant la chaine de caractère du CIT...)
Les 3 exemples suivants sont fonctionnels, et les valeurs de la colonne à étudier sont directement importées d'un autre fichier (via RECHERCHEV(...))
3 - Fonctionnement OK avec une seule chaine de caractères
4 - Avec 2 chaines de caractères consécutives : OK
5 - Avec 2 chaines de caractères consécutives : OK
Dim CellCIT As String
For i = 4 To Range("A65536").End(xlUp).Row
If IsError(Cells(i, 12).Value) = True Then
CellCIT = ""
Else
CellCIT = Cells(i, 12).Value
End If
n = 1
While Len(CellCIT) > 8
If CellCIT Like "*CIT######*" Then
If n = 1 Then
posCIT = InStr(1, CellCIT, "CIT", 1) 'Recherche de la position de début de texte CITXXXXXXX
Else
posCIT = posCIT + 8 + InStr(1, CellCIT, "CIT", 1)
End If
compCIT = Mid(Cells(i, 12).Value, posCIT, 9) 'Chaine de caractère contenant la première CIT trouvée
If IsError(Application.Match(compCIT, CITArrayOK, 0)) Then
Cells(i, 12).Characters(posCIT, 9).Font.ColorIndex = 3 'Coloriage en rouge sur seulement la chaîne de caractères de la CIT
Else
Cells(i, 12).Characters(posCIT, 9).Font.ColorIndex = 23 'Coloriage en vert sur seulement la chaîne de caractères de la CIT
End If
CellCIT = Mid(CellCIT, posCIT + 9) 'Reboucler pour chercher autre CIT
n = n + 1
Else: CellCIT = ""
End If
Wend
NextJ'espère que j'ai été suffisamment clair, sinon faites moi savoir quels éléments vous aideraient à mieux comprendre.
Merci de votre support,
Bonjour,
il n'est pas possible avec excel de colorier une partie de texte dans une cellule qui contient une formule.
Bonjour h2so4,
Dans les exemples 3, 4 et 5, la cellule contient une formule similaire à celle de l'exemple 1, et cela fonctionne, même avec 2 couleurs différentes (exemple 4), donc du noir et du bleu devrait être faisable aussi, non ?
Merci
Bonjour,
j'ai un doute. Peux-tu montrer un extrait de ton fichier ?
De quelle(s) partie(s) as-tu besoin ?
Le fichier est lourd, rempli d'informations confidentielles, et lié à un autre fichier (dans lequel il va piocher certaines données). Je peux le nettoyer pour te le partager, mais j'aurais besoin de savoir ce qu'il faut conserver.
Merci
Bonjour,
comme selon moi, il n'est pas possible de colorier des parties de texte dans une cellule qui contient une formule sans remplacer la formule par le texte résultant et que tu es parvenu à le faire, je suis très curieux de savoir comment tu y es arrivé.
donc si tu peux mettre un extrait de ton fichier excel dans lequel tu as ces résultats ainsi que la macro qui les a produits, car la macro que tu as mise ne correspond pas aux résultats que tu nous montres.
Bonjour,
je reste curieux de voir comment tu as fait.
Merci
Je suis curieux aussi de savoir !
moi aussi, moi aussi, j'suis très curieux d'savoir !!! car jusqu'à maint'nant, j'ai encore jamais réussi à colorier une partie de cellule qui contient une formule !
mais attention : quand on parle de formule, il s'agit d'une vraie formule, qui commence par le signe « = » ; pas d'une formule où tu as mis devant une apostrophe « ' », ni d'une formule que tu as saisie dans une cellule au format Texte !
dhany
Bonjour,
Désolé du retard. Je n'ai pas assez de temps à disposition pour éluder les fichiers pour fournir un exemple fonctionnel qui ne partage pas d'informations confidentielles.
Cependant, l'exemple fourni dans le message initial fourni toutes les informations.
La cellule contient une formulle de la forme =RECHERCHEV(...) comme présenté ci dessus dans l'exemple 1, qui va chercher une valeur dans un autre fichier, et affiche ainsi du texte "CITXXXXXX" par exemple.
Le code permet de colorer certaines parties de ce texte (ici 9 caractères, à partir de la position définie plus haut posCIT), via la ligne suivante : Cells(i, 12).Characters(posCIT, 9).Font.ColorIndex = 3
Cela colorie bien la partie demandée du résultat de la formule. Si je clique sur la celllule, c'est bien la formule (=RECHERCHEV(...)) qui s'affiche, et non pas du texte en brut.
Si j'ai pu apporter un peu d'eau au moulin...
J'essaierai de faire un fichier épuré dans les prochaines semaines si je trouve le temps, et vous le partagerai.
Bonjour,
je ne parviens pas à reproduire le résultat que tu décris, d'où mon souhait de voir ton fichier ou un fichier dans lequel tu obtiens ce résultat.
Bonjour Da_Co,
je te propose d'essayer ce fichier :
fais Ctrl e ; puis Alt F11 pour voir le code VBA.
qu'en penses-tu ?
dhany
Ah, en effet.
Je viens de jouer avec ton fichier, et de relancer le mien, et je n'arrive pas à reproduire les résultats que j'avais l'autre jour...
Mes données n'étaient pas en texte brut (je n'ai pas modifié le fichier, et le code non plus me semble-t-il).
Est-ce que cela ne serait pas du à, la fois précédente, éventuellement ne pas avoir activé les liaisons par négligence (étant donné que je dois activer les macros, puis les liaisons à l'ouverture du fichier), et donc il considérait cela comme du texte ?
Je me pencherai dessus dans les prochains jours/semaines et tenterait d'identifier ce qui m'a mené a ces résultats la fois précédente, même si cela est du à une erreur ou une négligence.
Merci de votre support !
@Da_Co
tu a écrit :Est-ce que cela ne serait pas dû à la fois précédente, éventuellement ne pas avoir activé les liaisons par négligence (étant donné que je dois activer les macros, puis les liaisons à l'ouverture du fichier), et donc il considérait cela comme du texte ?
1) réponse par rapport à l'activation des macros : ça ne peut pas être ça car l'objectif est de colorer une partie de cellule par macro VBA, donc celle-ci ne peut s'exécuter que si les macros sont activées ; note que colorer une partie de cellule manuellement est impossible, car le contenu de la cellule est la formule et pas le texte qui en résulte : c'est impossible par modif directe dans la cellule, et c'est impossible par modif dans la barre de formule.
2) réponse par rapport aux liaisons du classeur (à l'ouverture ou non) : je ne pense pas que ce soit ça, car même si la cellule contient une formule liée à un autre classeur, il s'agit toujours d'une formule, donc on retombe dans le cas 1) partie 2 : impossible de modifier le texte de la cellule pour en colorer une partie, ni via la touche F2 (modif directe de la cellule), ni via la barre de formule.
pour moi, si une cellule contient une formule, la seule façon de colorer une partie du texte est de transformer le contenu de la cellule :
1) va sur la cellule, puis appuie sur la touche F2 ; appuie sur la touche Début pour placer le curseur de texte au début (donc juste à gauche du signe « = » de la formule) ; tape une apostrophe ➯ c'est du texte dont tu peux colorer immédiatement une partie ; mais bien sûr, ce texte est la formule, pas son résultat.
2) va sur la cellule, puis applique-lui le format Texte ➯ idem qu'avec une apostrophe devant : possibilité de colorer une partie de la formule, pas son résultat.
3) va sur la cellule, puis appuie sur la touche F2 ; appuie sur la touche F9 ➯ le résultat de la formule remplace la formule : c'est donc du texte, dont tu peux colorer une partie ; tu avais peut-être fais cette manip, puis tu as oublié que tu avais appuyé sur F9 ? si oui, tu peux très facilement le vérifier, car ta cellule ne contient plus de formule.
pour l'instant, ma conclusion reste que c'est impossible de colorer une partie de texte qui est le résultat d'une formule ; mais pour cette même cellule qui contient une formule, c'est possible de la colorer en totalité : clique sur la cellule, puis sur l'icône de mise en couleur du texte qui est sur l'onglet Accueil, groupe Police (le « A » qui est juste à droite du pot de peinture).
si jamais tu trouves réellement un moyen, n'oublie pas de nous le dire : j'en serai ravi !
dhany