recopier sous chaine d'une chaine

Bonjour

Voici une nouvelle question envoyée à l'aide du formulaire de demande d'aide (http://fr.libreoffice.org/get-help/poser-une-question/).
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que le demandeur reçoive une copie de votre réponse.

Email:: thierry.rouillon@laposte.net
Sujet:: recopier sous chaine d'une chaine
Question:: Bonjour. Je voudrais extraire la partie numérique d'une chaine dans une colonne A pour la recopier dans la colonne B en vue de faire un tri numérique au lieu d'alpha.
Exemple:
B: 259
Faut-il passer par une macro ? Merci.

Bonsoir,

-----Message d'origine-----
De : demande_aide_fr@libreoffice.org
[mailto:demande_aide_fr@libreoffice.org]
Envoyé : samedi 17 juin 2017 18:21
À : users@fr.libreoffice.org
Objet : [fr-users] recopier sous chaine d'une chaine

Bonjour

Email:: thierry.rouillon@laposte.net
Sujet:: recopier sous chaine d'une chaine
Question:: Bonjour. Je voudrais extraire la partie numérique d'une chaine
dans une colonne A pour la recopier dans la colonne B en vue de faire un
tri numérique au lieu d'alpha.
Exemple:
A: "ma reference 259 G&P"
B: 259
Faut-il passer par une macro ? Merci.

C'est possible en utilisant les expressions régulières:

Vérifier d'abord que dans:
  Outils > Options > LibreOffice Calc > Calcul
la case "Autoriser les expressions régulières dans les calculs" est cochée
(Attention, sur Mac, il me semble que le terme Option est remplacé par
Préférences)

Si A1 contient "ma reference 259 G&P", je décompose le calcul de B1 à B4:

B1: =CHERCHE("[:digit:]";A1) position du premier chiffre
B2: =CHERCHE("[:alpha:]";A1;B1) position du 1er caractère alpha qui suit
B3: =STXT(A1;B1;B2-B1) extraction du nombre sous forme de chaîne
B4: =CNUM(B3) conversion en nombre

On peut bien sûr ensuite regrouper tout ça.
Et je pense qu'on peut faire plus simple, mais je n'ai pas trouvé dans
l'instant, voilà déjà de quoi dépanner, et d'autres auront sûrement de
meilleures idées.

Cordialement,

Michel

PS: Si vous répondez, pensez à utiliser la fonction "répondre à tous" de
votre logiciel de courrier électronique afin que la liste reçoive une copie
de votre réponse.

ma reference 259 G&P

Bonjour,

Je commencerai par tester :

Données > Texte en colonnes

Pas mal. Ça commence a bien donner. J'ai un souci car certains enregistrement se caractérise comme ça:

  "ma reference 259 - G&P"

Dans mon dernier champ j'obtiens "-259"
Je pense qu'en prenant la valeur absolue, ça devrait fonctionner.
Merci.

*Thierry Rouillon *
Chalons en Champagne
tel: 06 08 05 99 74

Je pense que cette fonction crée des colonnes suivant le nombre de mots. Si c'est le cas, le nombre de mots varie.

*Thierry Rouillon *
Chalons en Champagne
tel: 06 08 05 99 74

En

B4: =CNUM(ABS(B3)) conversion en nombre

Ça fonctionne mais si le nombre est suivi d'un point ça ne fonctionne plus. Il faudrait un truc du genre " not digit" pour B2

*Thierry Rouillon *
Chalons en Champagne
tel: 06 08 05 99 74

Bonjour,

en effet, les nombres se promenent d'une colonne à l'autre.

La solution proposée par Michel me semble la plus économique.

L'idéal serait une fonction en Basic pour extraire les données numériques de toute chaine de caractère.
Un simple =extractdigit(A1) suffirait dans ce cas.

Mais je ne sais pas faire :frowning:

LC

Recopier la colonne de laquelle il faut extraire le nombre.

Mettre cette nouvelle colonne en surbrillance puis Édition, « rechercher &
replacer » (ou Ctrl h).

Dans la case rechercher, mettre : [A-Z \-&]{1,}

Rien dans remplacer. Dans « autres options », cocher sélection active
seulement et « expressions régulières » puis clic sur « tout remplacer ».

Le tour est joué !

Dans la formule de Dominique, remplacer A-Z par [:alpha:] pour enlever aussi
les lettres accentuées.
[[:alpha:] \&]{1,}
La formule est concise. C'est son principal avantage. Bravo.

Jacques

Bonjour,

j'arrive après la bataille... ,

moi j'aurais mis : [^0-9]*([0-9]+).* dans la zone rechercher et $1 dans la
zone remplacer :wink: (toujours avec les expressions régulières cochées. et
la sélection active sur la nouvelle colonne.)

Il y a tjrs pleins de moyen d'y arriver :wink:
Yves

La formule d'Yves Dutrieux a le gros avantage sur la mienne de supprimer tout
caractère qui n'est pas numérique.

J'adore la puissance des expressions régulières !

Bonne fin de journée à tous.

La fonction CHERCHE("[:alpha:]";A1;B1)

n'est pas ideal car elle se positionne sur le 1er caractère alpha après les "digits" . S'il y a un . (point) ou un - (tiret) ou un blanc ou une ( on se retrouve embêté avec dans le résultat.

Voili, voila. Mais pour l'instant c'est le mieux qu'on puisse trouver.

*Thierry Rouillon *
Chalons en Champagne
tel: 06 08 05 99 74

Là, c'en est la démonstration.
Quand on songe à ce qu'il faudrait de formules alambiquées pour faire la même chose, c'est un splendide raccourci.

Jacques

Ça pourrait d'ailleurs être assez amusant de faire précisément la même chose
mais uniquement avec des formules.
J'imagine l'usine à gaz...

Bonjour,

un lien vers une ressource correcte, francolecte si possible, pour décoder cette expression régulière –et apprendre à en composer, me serait utile.
L'autoformation a ses limites…

LC

[^0-9]* : les crochets indiquent une plage de caractères (ici 0 à 9)
mais comme j'ai placé le ^ devant, je veux l'inverse. (donc tout ce qui
n'est pas un chiffre) et cela 0 ou n occurences (représenté par l'étoile).

([0-9]+) : Les crochets comme expliqué ci-dessus, permettent de reprendre
les caractères 0 à 9. ceci AU moins 1x (le caractères +)
             Les parenthèses permettent de stocker ce que l'on va trouver
dans une variable ($1 pour la première, $2 pour la seconde , etc)
.* : permet de sélectionner n'importe quel caractère (le point)
et cela 0 ou n fois (représenté par l'étoile).

$1 dans la chaine de remplacement permet de récupérer la première variable
(ici le chiffre)

Yves.

j'oubliais le lien :
https://fr.wikipedia.org/wiki/Expression_régulière

avoir fait du perl aide :wink:
Yves

Bonjour,

un lien vers une ressource correcte, francolecte si possible, pour décoder cette expression régulière –et apprendre à en composer, me serait utile.
L'autoformation a ses limites…

LC

Pour un lien sur un document détaillé (et amendable) :

https://wiki.openoffice.org/wiki/FR/Documentation/Expressions_Regulieres_dans_Writer

Bonjour,

je tiens à vous remercier tous deux.

En quelques minutes, ma compréhension a fait un bond.
J'étais passé à côté de ces ressources.

Lucien