[Basic] Conversion de chaine compatible Nom d'objet

Bonjour,

Existe-t-il une fonction Basic de traitement de chaine de caractère qui rend une chaine de caractères conforme aux /noms d'objets/ comme dans TextTable.Name : supprime les espaces, caractères accentués, ... ?

Merci

Excellent ce document, Jean-François :
https://documentation.libreoffice.org/assets/Uploads/Documentation/en/MACROS/RefCards/LibOBasic-5-ExecLib-Flat-A4-EN-v101.pdf

https://documentation.libreoffice.org/assets/Uploads/Documentation/en/MACROS/RefCards/LibOBasic-2-Overview-Flat-Letter-EN-v110.pdf

Mais je ne retrouve pas la page source de ce document...

Bonjour,

Mais je ne retrouve pas la page source de ce document...

envoyé en MP.

Voir aussi ici :
https://documentation.libreoffice.org/en/english-documentation/macro/

Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,

Stéphane,

Existe-t-il une fonction Basic de traitement de chaine de caractère qui rend une chaine de caractères conforme aux /noms d'objets/ comme dans TextTable.Name : supprime les espaces, caractères accentués, ... ?

non, rien de tout prêt dans la bibliothèque d'exécution.

Voici une fonction TitleCase qui va te permettre de démarrer :

8< --------------------------------------------------------

Function TitleCase(ByRef pStr As String) As String
'Converts a string into titlecase.
'eg: "test the o'connors and the mac-addamses" -> "Test The O'Connors And The Mac-Addamses"
'Input:
'-- pStr: the string to process
'Output: the processed string

  Dim l_Str As String 'output buffer
  Dim l_StrUC As String 'temporary version with uppercase chars
  Dim l_SplitChars As String 'chars where to split the titles
  Dim l_arrItems As Variant 'array of title items
  Dim l_StrTmp As String 'temporary buffer
  Dim l_CurSplit As String 'a splitting character
  Dim j As Long
  Dim i As Long

  If (pStr = "") Then
    l_Str = pStr
  Else
    'set the splitting chars set
    l_SplitChars = " '’-" & Chr(160) 'Chr(160) = unbreakable space
    
    'process the input string for each splitting character
    l_Str = LCase(pStr)
    l_Str = UCase(Left(l_Str, 1)) & Right(l_Str, Len(l_Str) - 1)
    For i = 1 to Len(l_SplitChars)
      l_CurSplit = Mid(l_SplitChars, i, 1)
      l_arrItems = Split(l_Str, l_CurSplit)
      If (UBound(l_arrItems) > 0) Then
        l_StrTmp = ""
        l_Str = ""
        For j = 0 to UBound(l_arrItems)
          'set 1st char uppercase
          l_StrUC = UCase(Left(l_arrItems(j), 1)) & Right(l_arrItems(j), Len(l_arrItems(j)) - 1)
          'add the split char if it is the first char
          If (j > 0) Then
            l_StrTmp = l_StrTmp & l_CurSplit & l_StrUC
          Else
            l_StrTmp = l_StrTmp & l_StrUC
          End If
        Next
        'update the string to process
        l_Str = l_Str & l_StrTmp
      End If
    Next
  End If
  
  TitleCase = l_Str
End Function 'TitleCase

Sub _TitleCase_Test()

  Print TitleCase("test the o'connors and the mac-addamses")

End Sub '_TitleCase_Test

----------------------------------------------------- >8

Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,

Bonjour,

Mais je ne retrouve pas la page source de ce document...

envoyé en MP.

Merci mais je ne demandais pas les documents sources de ces PDF...

Voir aussi ici :
https://documentation.libreoffice.org/en/english-documentation/macro/

Voilà ce que j'attendais, la page Web source où ces documents PDF (trouvés en direct par Google) (et d'autres ?) peuvent être téléchargés. :slight_smile:

Merci