MFC partie de texte

Fermé
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 - Modifié par Mabelle60 le 20/05/2016 à 10:45
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 - 27 mai 2016 à 22:25
Bonjour tout le monde.
Je récupère via macro une ligne de tableau type suivi d'action (tableau de 41 colonnes) sur une feuille nommée 'TABLEAU' que je transpose dans une autre feuille nommée 'FICHE' pour une meilleur lisibilité car souvent, quand tu arrives au bout de la ligne, tu ne te souviens plus du début...
ma macro est sous format fiche.(cells).value = tableau.(cells).value

Dans certaines cases de mon tableau, j'ai une valeur entre crochets '[]'. Cette valeur à un nb de caractères variable et n'est pas toujours à la même place dans la cellule du tableau .

Ce que je souhaiterais faire, c'est changer le format (couleur & gras) de cette valeur entre crochets qui se trouve dans les cellules de ma nouvelle feuille 'FICHE'.
Je ne peux utiliser le copié/collé puisque mes cellules de départ son uniques et celles de destination fusionnées.
Je n'ai pas forcement besoin d'un macro cellule par cellule

Une macro du type
pour chaque cellule de la feuille
si la cellule contient [ et ]
change le format de [ à ] (crochets compris ou pas)


me conviendrait également mais j'analyserais volontiers les 2 méthodes et appliquerais la moins lourde

Merci de votre aide.

2 réponses

Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181
20 mai 2016 à 11:22
Bonjour,

Pour résoudre une partie du problème, n'oublie pas que tu peux enregistrer en macro des opérations que tu fais manuellement.
C'est ce que je ferais pour la modification partielle de format et en recherchant via Ctrl+F les caractères "[" et "]"
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
Modifié par Mabelle60 le 25/05/2016 à 22:51
Bonjour Arkana0 et merci pour le temps consacré à mon pb.
Et désolé pour le temps, mais occupé à d'autres tâches...
J'utilise effectivement la même méthode lorsque je n'ai pas trop de temps pour développer une macro à partir de mes seules connaissances.
Mais cela ne fonctionne pas dans ce cas puisque la méthode recherche ne fait que afficher les cellules comportant la valeur cherchée sans les identifier dans la macro, ni localiser la place du crochet dans le texte.
Mais c'est bien une piste que j’approfondirais en essayant de la cumuler à la méthode proposée par via55.
0
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 704
20 mai 2016 à 17:54
Bonjour Mabelle

Exemple de macro à adapter à tes besoins
Sub crochets()
Dim c As Range
On Error Resume Next ' gestion de l'erreur pas de [] dans la cellule - passe à la suivante
For Each c In sheets("FICHE").Range("A1:Y200") 'plage à traiter A ADAPTER
deb = Application.WorksheetFunction.Search("[", c) ' emplacement du 1er crochet
fin = Application.WorksheetFunction.Search("]", c) ' emplacement du 2eme crochet
    With c.Characters(Start:=deb, Length:=fin - deb + 1).Font ' selection des caractères entre crochets, crochets compris
        .FontStyle = "Gras" ' met en gras
        .Color = -16776961 ' met en rouge
    End With
Next c
End Sub


Cdlmnt
Via
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
Modifié par Mabelle60 le 25/05/2016 à 22:44
Bonjour et Merci Via55 pour le temps consacré à mon pb.
et désolé pour le tps de réponse mais occupé à autre chose entre temps..
1 bonne nouvelle et 1 moins bonne
la bonne, c'est que, effectivement le texte entre crochet dans mes cellules est bien passé en rouge et gras
La moins bonne c'est, que de manière aléatoire, j'ai d'autres cellules qui vont avoir tout ou partie du texte qui passe en rouge et gras (totalement pour les formats date ou nombre) et en partie pour le texte.
Tantôt la première lettre, tantôt un groupe de lettres au milieu ou à la fin de mon texte...
Comme je sais dans quelles cellules je peux potentiellement avoir des '[' & ']' ,je vais essayer d'adapter avec un range(mes cellules) histoire de voir si ça passe mieux..
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
Modifié par Mabelle60 le 26/05/2016 à 12:40
Bonjour Via55
Donc pour reprendre ...
je suis parvenu à intégrer la plage dédiée dans le Range... Pas compliqué.
Si il n'y a pas de crochets dans ma cellule, automatiquement la première lettre en gras et rouge.
A partir du moment ou la macro trouve un crochet, 2 options:
Option 1 elle trouve des crochets et là ça fonctionne, elle réévalue deb et fin
Option 2 elle ne trouve pas de crochets et elle applique la même valeur de deb et fin à la cellule suivante.
Comme le crochet ne peux jamais être en début de phrase, je vais essayer d'intercaler une fonction if.
0
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 704 > Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017
Modifié par via55 le 26/05/2016 à 13:19
Bonjour Mabelle

Oui tu peux mettre par exemple un If deb>1 Then avant le With (et le End If après le End with)

Cdlmnt
Via
0
Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
27 mai 2016 à 22:25
Bonjour Via55
Bon en fait, le If...end if n'a rien changé. Effectivement, je n'avais plus la première lettre en gras rouge, mais l'option 2 persistait (applique la même valeur à deb et fin pour la cellule suivante si pas de crochets)

Pour contourner, j'ai inséré une réinitialisation (deb=0 & fin=0) avant chaque déclaration

Maintenant, je me suis rendu compte que certaines de me cellules comportaient plusieurs groupes de [] et je vais m'atteler à essayer de mettre chaque groupe entre [] sous le même format.
0