XL 2019 Extraire du texte à partir d'un renvoi de ligne automatique

Winnylourson

XLDnaute Nouveau
Bonjour,

Pour un besoin de routage, je dois mettre sur plusieurs colonne des cellules ayant un renvoi à la ligne automatique.
J'ai essayé la formule =GAUCHE(F5;TROUVE(CHAR(10);F5)-1) mais cela ne donne rien... :(

Pourriez-vous m'aider SVP?

En vous remerciant,

Bonne journée,
 

patricktoulon

XLDnaute Barbatruc
bonsoir à tous
à l’époque on avait une astuce pour ça
mais que veux tu à l'époque on avait pas PQ et tout ces fonctions que l'on a aujourd'hui
mais il y a du vba
et plus tard je l'ai converti en fonction perso
et encore aujourd'hui je suis pas sur que l'on fasse aussi bien

Alors attention c'est pas piqué des verts

tous ceux qui ne sortent jamais des clous et qui aident les vielles dames à traverser passez votre chemin en tournant la tète 🤣 🤣

alors tu ajoute un userform"userform1" dans ton fichier
dans ce userform tu va lui mettre un textbox "textbox1
et c'est tout pas de code... rien !!!!!

maintenant tu va dans un module standard et tu lui colle ce code
VB:
Function getArrayTextRow(cel As Range, index)
    With UserForm1
        With .TextBox1
            .Width = cel.Width
            .Height = cel.Width
            .Font.Size = cel.Font.Size - 1
            .Font.Bold = cel.Font.Bold
            .Value = cel.Value & Application.Rept(vbCrLf, 100)
            'UserForm1.Show 0'c'est pas la peine
            For i = .LineCount - 1 To 1 Step -1
                .CurLine = .LineCount - i
                .SelText = vbCrLf    ' en bloquant cette ligne on a le vrai nombre de saut de ligne
            Next
            t = Split(.Text, vbCrLf)
                End With
UserForm1.Hide
getArrayTextRow = t(index - 1)
  
    End With
End Function
exemple en A1 j'ai
1709590985448.png


allez c'est parti pour une petite formule
en D1 je met
=getArrayTextRow(A$1;LIGNE(1:1))
et j’étends la formule vers le bas

demo.gif


et oui encore fois j'utilise un userform comme module classe ( coquine manie patricktoulonnesque)
et dans la fonction je paramètre
le textbox qui lui est un activX
je lui met le texte de la même manière que dans la cellule
et je je place les sauts de ligne en fonction en fin des curline dans une boucle à reculons

et voilà le tout sans même afficher le userform

LOL!
je t'avais prévenu c'est pas piqué des vers 🤣
seul les vieux roublards exceliens pourront comprendre

edit :pour les versions d'actuelles d'excel
je viens de tester sur 2021
donc
et si vos satanés versions actuelles d'excel vous fait des misères sans le show
VB:
Function getArrayTextRow(cel As Range, index)
    With UserForm1
        .Startupposition = 0
        .Top = -100
        With .TextBox1
            .Width = cel.Width
            .Height = cel.Width
            .Font.Size = cel.Font.Size - 1
            .Font.Bold = cel.Font.Bold
            .Value = cel.Value & Application.Rept(vbCrLf, 100)
            UserForm1.Show 0
            For i = .LineCount - 1 To 1 Step -1
                .CurLine = .LineCount - i
                .SelText = vbCrLf    ' en bloquant cette ligne on a le vrai nombre de saut de ligne
            Next
            t = Split(.Text, vbCrLf)
        End With
        UserForm1.Hide
        getArrayTextRow = t(index - 1)
    End With
Unload UserForm1
End Function
voili voilou ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin