Split selon le nombre max de caractères voulu, en tenant compte des retours chariot et des chaînes non-sécables


Contenu du snippet

Private Function SplitNumberChars(ByVal sStr As String, ByVal iCut  As Long, Optional RemoveVbCrLf As Boolean = False, Optional SeparChar As String = "-", Optional bUseMnemonic As Boolean = False) As  String()
    Dim sRet As String, i As Long, lPos As Long, bCR As Boolean, sLine As String
'   vire les VBCRLF et  les ESPACE multiples générés
    If RemoveVbCrLf Then
        sStr = Trim$(Replace(sStr, vbCrLf, " "))
        Do While InStr(1, sStr, "  ") <> 0
            sStr = Replace(sStr, "  ", " ")
        Loop
    Else
        sStr = Replace(sStr, vbCrLf, " " & vbCrLf)
    End If
'   traitement
    sRet = vbNullString
    Do While LenB(sStr) > 0
'       retour chariot le plus loin
        lPos = InStrRev(Left$(sStr, iCut + 2), vbCrLf)
        If lPos = 0 Then
'           y'en a pas? on  cherche l'espace le plus loin
            lPos = InStrRev(Left$(sStr, iCut + 1), " ")
            bCR = False
        Else
            bCR = True
        End If

        If lPos = 0 Then
'           lpos toujours à zéro? donc ligne  non-sécable
            If Len(sStr) > iCut Then
                If RemoveVbCrLf Then
                    sRet = sRet & Left$(sStr, iCut - 1) & SeparChar & vbCrLf
                    sStr = SeparChar & Mid$(sStr, iCut)
                Else
                    sRet = sRet & Left$(sStr, iCut) & SeparChar &  vbCrLf
                    sStr = SeparChar & Mid$(sStr, iCut + 1)
                End If
            Else
                sRet = sRet & sStr & vbCrLf
                sStr = vbNullString
            End If
        Else
            sLine = Left$(sStr, lPos - 1)
            sStr = Right$(sStr, Len(sStr) - Len(sLine) - IIf(bCR, 2, 1))
            sRet = sRet & sLine & vbCrLf
        End If
   Loop
'   pas de  UseMnemonic?....
    If Not bUseMnemonic Then sRet = Replace(sRet, "&", "&&")

'   retour
    SplitNumberChars = Split(sRet, vbCrLf)
End Function


Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.