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.
- Quelles sont les fonctions disponibles pour manipuler les chaînes de caractères ?
- Comment extraire les données séparées par un espace dans une chaine de caractères ?
- Comment extraire les données numériques dans une chaîne alphanumérique ?
- Comment scinder les phrases longues sans couper les mots ?
- Comment utiliser la fonction Switch afin de renvoyer une donnée associée à une expression ?
- Comment compter un nombre de caractères/mots identiques dans une chaîne ?
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)) |
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 |
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 |
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 |
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 |
'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 |
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 çaLes 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 © 2024 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.