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

yoakim -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

4 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  2. Yoakim
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. Yoakim
       
      Bonjour Eriic,

      Merci beaucoup !

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

      Merci

      Yoakim
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Parce que tu ne l'as sans doute pas mise dans un module Standard, sinon déposer le fichier.
      0
  4. Yoakim14360 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci Eriic,

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

    Merci beaucoup !
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      le lien ?
      0
      1. Yoakim14360 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Désolé,

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

        Cordialement,
        0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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