FAQ LibreOffice et Apache OpenOfficeConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 359, dernière mise à jour : 15 juillet 2017  Ajouter une question

 

Bienvenue sur la FAQ, elle a été réalisée pour répondre aux questions concernant les suites bureautiques Apache OpenOffice (AOO) et LibreOffice (LibO).

Si vous souhaitez participer pour l'améliorer, pour proposer vos contributions ou si vous constatez des erreurs dans cette page, n'hésitez-pas !!! Participez.


SommaireProgrammation OBasicLes chaines de caractères (6)
précédent sommaire suivant
 

Compter le nombre de caractères dans une chaine.
Utilisez la fonction Len.

Code vb : Sélectionner tout
MsgBox Len("Developpez") 'renvoie 10

Extraire une portion de caractères en partant de la gauche.
Utilisez la fonction Left.
Code vb : Sélectionner tout
1
2
'Renvoie les 3 premiers caractères d'un texte 
MsgBox Left("Developpez", 3) 'renvoie "Dev"

Extraire une portion de caractères en partant de la droite.
Utilisez la fonction Right.
Code vb : Sélectionner tout
1
2
'Renvoie les 3 derniers caractères d'un texte 
MsgBox Right("Developpez", 3) ' renvoie "pez"

Extraire une chaîne de caractères à l'intérieur d'une autre chaîne.
Utilisez la fonction Mid.
Code vb : Sélectionner tout
1
2
3
'5 est la position du caractère qui marque le début de la partie à extraire 
'et 2 correspond au nombre de caractères à renvoyer) 
MsgBox Mid("Vendredi", 5, 2) ' renvoie "re"

Si vous souhaitez récupérer toute la chaîne à partir du 5eme caractère, n'indiquez pas le dernier argument.
Code vb : Sélectionner tout
MsgBox Mid("Vendredi", 5) 'Renvoie "redi"

Renvoyer la position d'une chaîne dans une autre chaîne.
Utilisez la fonction InStr.
Remarque : cette fonction renvoie 0 si aucune occurrence n'est trouvée.

Code vb : Sélectionner tout
1
2
'Renvoie la position de la première occurrence d'une chaîne ("e") 
MsgBox InStr("Developpez", "e") 'renvoie 2

Les arguments de la fonction : InStr(start, string1, string2, compare)
Le premier argument "start" (facultatif) permet de définir la position de départ de la recherche.
Code vb : Sélectionner tout
MsgBox InStr(1, "Developpez", "e") 'renvoie 2

Un autre exemple :
Code vb : Sélectionner tout
1
2
3
Dim x As Integer 
x = InStr(1, "Developpez", "e") + 1 
MsgBox InStr(x, "Developpez", "e") 'renvoie 4

string1 contient la chaîne de caractères qui va être contrôlée.
String2 contient la chaîne à rechercher.
La recherche est sensible à la casse si le dernier argument « compare » (facultatif) est égal à 0, ou omis.
(Casse: signifie que la recherche n'est pas sensible aux majuscules et aux minuscules)
Code vb : Sélectionner tout
1
2
MsgBox InStr(1, "Developpez", "Z", 0) 'renvoie 0 
MsgBox InStr(1, "Developpez", "z", 0) 'renvoie 10

La recherche n'est pas sensible à la casse si le dernier argument « compare » est égal à 1.
Code vb : Sélectionner tout
1
2
MsgBox InStr(1, "Developpez", "z", 1) 'renvoie 10 
MsgBox InStr(1, "Developpez", "Z", 1) 'renvoie 10

Nota :
La fonction Instr peut aussi servir à contrôler si le contenu d'une chaîne est égal à un des mots « cible » défini dans la procédure.
Cet exemple vérifie si le contenu de la cellule A1 est égal à un des 3 mots indiqué dans la variable « Cible ».
(Ne fonctionne pas si la cellule A1 est vide).
Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub RechercheMultiple	 
  Dim Cible As String, strCellule As String 
  Dim Feuille As Object 
  
  Feuille = ThisComponent.getSheets.getByName("Feuille1") 
  'Récupère le contenu de la cellule A1 
  strCellule = Feuille.getCellRangeByName("A1").getString  
  
  Cible = "engrenage,reducteur,courroie" 
  
  If InStr(Cible, strCellule) = 0 Then 
    MsgBox "Non" 
    Else 
    MsgBox "Oui" 
  End If 
End Sub

Remplacer des caractères dans une chaîne.
Code vb : Sélectionner tout
1
2
'mimi est transformé en fifi 
MsgBox Join(Split("mimi", "m"), "f")

Passer l'ensemble d'une chaîne en majuscule.
Utilisez la fonction UCase.
Code vb : Sélectionner tout
MsgBox UCase("Developpez")

Passer l'ensemble d'une chaîne en minuscule.
Utilisez la fonction LCase
Code vb : Sélectionner tout
MsgBox LCase("Developpez")

Extraire un nombre placé au début d'une chaîne de caractère.
Utilisez la fonction Val.
Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
Dim Chaine As String 
Chaine = " 21ieme siècle" 
MsgBox Val(Chaine) ' renvoie 21 
  
Chaine = " siècle 21" 
MsgBox Val(Chaine) ' renvoie 0 
  
Chaine = "123,456" 
MsgBox Val(Chaine) ' renvoie 123456 
  
Chaine = "123.456" 
MsgBox Val(Chaine) ' renvoie 123,456


Supprimer tous les espaces à gauche et à droite d'une chaîne de caractères.
Utilisez la fonction Trim.

Code vb : Sélectionner tout
MsgBox Trim("  Un essai  ")

Utilisez la fonction LTrim pour supprimer tous les espaces à gauche d'une chaîne de caractères.
Utilisez la fonction RTrim pour supprimer tous les espaces à droite d'une chaîne de caractères.

Créer une jonction entre les chaînes contenues dans un tableau.
Utilisez la fonction Join.
]Join (Text As String Array, delimiter)
Text As String Array est le tableau à une dimension contenant les chaînes à joindre.
Delimiter (facultatif) spécifie le séparateur à utiliser entre les éléments du tableau, lors de la jonction. Les éléments sont séparés par un espace si l'argument Delimiter n'est pas spécifié.
Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim Tableau(2) As String 
  
Tableau(0) = "Chaine01" 
Tableau(1) = "Chaine02" 
Tableau(2) = "Chaine03" 
  
'Regroupe les chaînes du tableau, séparés par un point-virgule ";" 
MsgBox Join(Tableau, ";") 
  
'Regroupe les chaînes du tableau sans séparateur 
MsgBox Join(Tableau, "") 
  
'Les éléments sont séparés par un espace si l'argument Delimiter n'est 
'pas spécifié. 
MsgBox Join(Tableau) 
  
'Regroupe les chaînes du tableau et ajout d'un saut de ligne 
'entre chaque élément. 
MsgBox Join(Tableau, Chr(10))

Mis à jour le 26 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  
Sub ExtraireChaine 
  Dim Tableau() As String 
  Dim i As Integer 
  
  'La fonction Split permet d'extraire les données d'une chaine en fonction 
  'du séparateur spécifié. (Espace dans l'exemple) 
  Tableau = Split("Ma Chaine de caractères", " ")  
  
  'Boucle dans le tableau pour visualiser le résultat 
  For i = LBound(Tableau) To UBound(Tableau) 
    MsgBox Tableau(i) 
  Next i 
End Sub

Mis à jour le 3 août 2013 SilkyRoad

Les deux exemples proposés extraient (de la cellule A1) les données numériques contenues dans une chaîne alphanumérique.

Une première possibilité :
La procédure fonctionne même si les sous chaînes alphas et numériques sont accolées.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub extraireValeursNumeriquesCellule_V01()  
  Dim i As Integer  
  Dim Cible As String 
  Dim Nombre As Double  
  
  'Définit la cellule A1 dans la 1ere feuille du classeur 
  Cible = ThisComponent.Sheets(0).getCellRangeByName("A1").String 
  
  'Pour que fonction Val puisse reconnaitre les décimales 
  Cible = Join(Split( Cible , ","), ".") 
  'Pour gérer deux nombres qui se suivent  
  Cible = Join(Split( Cible , " "), "x") 
  
  For i = 1 To Len(Cible)  
    If IsNumeric( Mid( Cible, i, 1) ) Then  
      Nombre = Val( Mid( Cible, i, Len( Cible ) - i + 1 ) )  
      MsgBox Nombre 
  
      i = i + Len( Str(Nombre) ) - 1  
    End If  
  Next  
End Sub

Une deuxième possibilité :
Cette version est utilisable uniquement si chaque donnée numérique est séparée par un espace.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub extraireValeursNumeriquesCellule_V02() 
  'Cette version est utilisable uniquement si chaque élément de la chaine est 
  'séparé par un espace.  
  Dim Tableau() As Variant 
  Dim i As Integer 
  Dim Cible As String 
  
  'Définit la cellule A1 dans la 1ere feuille du classeur 
  Cible = ThisComponent.Sheets(0).getCellRangeByName("A1").String 
  
  Tableau = Split( Cible , " ")  
  
  'Boucle dans le tableau pour visualiser le résultat 
  For i = LBound(Tableau) To UBound(Tableau) 
    'Vérifie si l'élément du tableau est une valeur numériqe 
    If IsNumeric(Tableau(i)) Then MsgBox Tableau(i) 
  Next i 
  
End Sub

Mis à jour le 3 août 2013 SilkyRoad

Cette fonction permet d'appliquer un retour à la ligne dans une chaîne, tous les 30 caractères, sans couper les mots.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub Test 
  MsgBox ScinderChaine ("Le club Developpez.com est le principal site d'entraide des développeurs francophones avec jusqu'à 70 000 " & _ 
    "visites par jour. Le club est fréquenté par 800 000 développeurs (développeurs, chefs de projets, DBA,...) tous les mois. Le club" & _ 
    " vous apporte gratuitement une multitude d'avantages : newsletter, magazine, actualités, cours, tutoriels, articles, FAQ's, tests, " & _ 
    "comparatifs, débats, sondages, outils, sources, composants et exemples de codes, les BLOGs des développeurs, et enfin la TV des " & _ 
    "développeurs. Le club est animé bénévolement par tous les membres du club et en particulier par l'équipe de rédaction du club. " & _ 
    "L'inscription est facile, rapide et gratuite : Inscrivez-vous." , 30 ) 
End Sub 
  
  
Function ScinderChaine( DonneesDeBase As String , NbCar As Integer ) 
  Dim Cible As String  
  Dim Resultat As String , Chaine As String 
  Dim i As Integer , X As Integer 
  
  Cible = DonneesDeBase 
  
  For i = 1 To Len(Cible) 
    X = InStr( NbCar , Cible, " " ) 
  
    If X = 0 Then 
      Chaine = Cible 
      Resultat = Resultat & Chaine 
      Exit For 
    End If 
  
    Chaine = Mid(Cible, 1, X) 
    Resultat = Resultat & Chaine & Chr(10) 
    Cible = Mid( Cible, Len(Chaine) + 1 ) 
  Next 
  
  ScinderChaine = Resultat 
End Function

Mis à jour le 26 août 2013 SilkyRoad

Switch permet d'évaluer l'expression transférée dans la fonction, puis de renvoyer la donnée associée.
Une erreur d'exécution se produit si l'expression n'est pas trouvée.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub ExempleSwitch 
  'Attention la procédure est sensible aux majuscules et minuscules 
  MsgBox Correspondance( "Jour" ) 
End Sub 
  
Function Correspondance (sName As String) As String 
  On Error GoTo Fin 
  Correspondance = Switch(sName = "Jour", "riri" , sName = "Nuit", "fifi" , sName = "Astreinte", "loulou") 
  Exit Function 
  
  Fin: 
  Correspondance = "Indéterminé" 
End Function

Mis à jour le 26 août 2013 SilkyRoad

'Nous pouvons déduire un nombre de caractères par le calcul d'une différence entre longueur de chaîne moins caractère recherché.
'Dans le cas d'une casse sensitive, passer cette fois, par la recherche ASCII.

'Chaine=Ta chaîne principale
'Ch=Ta sous chaise (ou caractère)
'RC=Pour Respecter ou non la Casse dans la fonction Replace prédéfinie en Visual Basic
'si RC=False alors majuscule = minuscule
'si RC=True alors majuscule /= minuscule

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function NbOc4(Ch As String, Chaine As String, Optional RC As Boolean) As Long 
    Dim codasc As Integer 
    Dim i As Integer 
    Dim iCase As Integer 
    'Initialisation 
    iCase = 0 
    If IsMissing(RC) Then RC=False 
    If RC Then 
        'Nous passons par les codes ASCII 
        For i = 1 To Len(chaine) 
        If Asc(Mid(chaine,i,1))=Asc(Ch) Then iCase = iCase+1 
        Next 
        NbOc4=iCase 
        Else 
        NbOc4 = (Len(Chaine) - Len(Replace(Chaine, Ch, ""))) / Len(Ch) 
    End If 
End Function

'Test :
Code vb : Sélectionner tout
1
2
3
4
Sub TestnbOc4CasseSens() 
    MsgBox nbOc4("C","C'est incroyable cette histoire !",True) 
    MsgBox nbOc4("C","C'est incroyable cette histoire !") 
End Sub

Mis à jour le 15 juillet 2017 martinbrait

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2020 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.