Chaîne de caractères après caractères gras

Fermé
yoakim - 8 août 2017 à 17:54
eriiic Messages postés 24596 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2024 - 9 août 2017 à 14:17
Bonjour,

Je souhaite isoler en A2 une chaîne de caractères située après un ou plusieurs mots de longueur différente en caractère gras dans A1.

Merci pour votre aide à ce sujet :)

Cordialement,

Yoakim
A voir également:

4 réponses

via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 729
8 août 2017 à 18:32
Bonjour Yoakim,

Avec cette fonction personnalisée :
Function après_gras(plage As Range)
  For Each c In Range(plage, [A65000].End(xlUp))
    For i = 1 To Len(c)
       If c.Characters(Start:=i, Length:=1).Font.Bold = True Then x = i
    Next
  Next
  retour = Right(plage, Len(plage) - x)
  après_gras = retour
End Function


Fonction à mettre dans un module de l'éditeur VBA (ALT+F11 pour ouvrir l'éditeur - puis Insertion - Module - copier-coller la fonction dans la page blanche et fermer l'éditeur

La fonction s'utilise avec la syntaxe =après_gras(adresse cellule à traiter), exemple : =après_gras(A1)

Cdlmnt
Via
0
Bonjour Via,

Merci beaucoup pour votre aide ! La fonction a l'air top, mais ne fonctionne malheureusement pas tout à fait correctement :(

Elle n'a pas l'air de tenir compte du gras, mais me copie la cellule en ignorant seulement les 9 premiers caractères ?

Test fait sur plusieurs lignes...

Cordialement,

Yoakim
0
eriiic Messages postés 24596 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2024 7 235
Modifié le 9 août 2017 à 10:05
Bonjour,

la fonction de via un peu remaniée :
Function après_gras(phrase As Range)
    Dim c As Range, i As Long, flag1 As Boolean, flag2 As Boolean
    For i = 1 To Len(phrase)
        flag1 = phrase.Characters(Start:=i, Length:=1).Font.Bold
        If flag1 Then
            flag2 = True
        Else
            If flag2 Then Exit For
        End If
    Next
    If flag2 Then après_gras = Mid(phrase, i) Else après_gras = ""
End Function

Le passage de la totalité de la cellule en gras/non gras avec Ctrl+g n'est pas détecté. On pourrait y remédier en la rendant volatile, mais je trouve dommage de toutes les recalculer à la moindre action. Dans ce cas revalider la cellule.
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
Bonjour Eriic,

Merci beaucoup !

La cellule A2 est en erreur #NOM? après insertion de la fonction ?

Merci

Yoakim
0
eriiic Messages postés 24596 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2024 7 235
9 août 2017 à 11:33
Parce que tu ne l'as sans doute pas mise dans un module Standard, sinon déposer le fichier.
0
Yoakim14360 Messages postés 2 Date d'inscription mercredi 9 août 2017 Statut Membre Dernière intervention 9 août 2017
9 août 2017 à 12:11
Merci Eriic,

Je ne vois pas, donc je dépose le fichier :)

Merci beaucoup !
0
eriiic Messages postés 24596 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2024 7 235
9 août 2017 à 12:13
le lien ?
0
Yoakim14360 Messages postés 2 Date d'inscription mercredi 9 août 2017 Statut Membre Dernière intervention 9 août 2017 > eriiic Messages postés 24596 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2024
9 août 2017 à 14:00
Désolé,

Voici le lien https://we.tl/LAN8Iq9FyB

Cordialement,
0
eriiic Messages postés 24596 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2024 7 235
9 août 2017 à 14:17
xlsx...
Si tu ne mets pas le code de la macro ça marche moins bien forcément.
Je ne comprend pas pourquoi tu l'as bien fait avec la fonction de via puisque tu l'as testée et que là tu ne le fais pas (?!?)

A voir ton fichier remplace la dernière ligne par :
If flag2 Then après_gras = Application.Trim(Mid(phrase, i)) Else après_gras = ""

(suppression des espaces inutiles)
0