[Résolu] Extraire une chaîne numérique d'une alphanumérique
Modérateur : Vilains modOOs
Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
-
- Fraîchement OOthentifié
- Messages : 1
- Inscription : 03 févr. 2007 18:21
[Résolu] Extraire une chaîne numérique d'une alphanumérique
Bonjour,
J'ai dans un tableau une liste d'adresses dans une cellule sur une seule colonne (une adresse par cellule).
Je souhaiterais extraire une chaine numérique (code postal) d'une chaine alphanumerique (adresse) exemple :
10 rue du General de Gaulle 75000 Paris, je voudrais isolé le 75000 dans une nouvelle colonne
Quelle formule pourrais-je utiliser ?
Merci d'avance
OOo 2.0.4 + Win XP SP2
J'ai dans un tableau une liste d'adresses dans une cellule sur une seule colonne (une adresse par cellule).
Je souhaiterais extraire une chaine numérique (code postal) d'une chaine alphanumerique (adresse) exemple :
10 rue du General de Gaulle 75000 Paris, je voudrais isolé le 75000 dans une nouvelle colonne
Quelle formule pourrais-je utiliser ?
Merci d'avance
OOo 2.0.4 + Win XP SP2
OO 2.0.4
Wondows XP
Wondows XP
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Bonsoir et bienvenue,
La fonction GAUCHE, décrite ici sur le site de Christian :
http://christianwtd.free.fr/index.php?r ... 1#FnGAUCHE devrait répondre à ton attente.
La fonction GAUCHE, décrite ici sur le site de Christian :
http://christianwtd.free.fr/index.php?r ... 1#FnGAUCHE devrait répondre à ton attente.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
Bonjour
Je ne vois pas comment une seule fonction pourrait résoudre ton problème ?
Ci-dessous une procédure en trois étapes : Cherche-Remplace / Enregistrement / Ouverture qui devrait répondre à la question...
Le principe sera d'utiliser le cherche-remplace pour insérer un point-virgule devant et derrière le code postal. Ensuite, on enregistre la feuille au format texte, puis on ouvre ce nouveau fichier : un dialogue permet alors de séparer les colonnes en fonction du séparateur choisir (le point virgule en l'occurrence).
Concrètement :
1) Edition / Rechercher
Rechercher
Remplacer
et cliquer sur "Autres options" pour cocher la case "Expressions régulières"
Puis, faire "Remplacer tout".
Avec cette commande on recherche une série de 5 chiffres, que l'on remplace par elle-même (&) précédée et suivie du point-virgule.
2) Fichier / Enregistrer sous / Type : Texte CSV (.csv)
Séparateur de champ : ;
Séparateur de texte : supprimer celui proposé
Fichier / Fermer
3) Fichier / Ouvrir / Type : Texte CSV (.csv)
Choisir le fichier texte que l'on vient de créer.
Un dialogue s'ouvre qui permet de définir le séparateur de colonne, choisir le ";"
Je ne vois pas comment une seule fonction pourrait résoudre ton problème ?
Ci-dessous une procédure en trois étapes : Cherche-Remplace / Enregistrement / Ouverture qui devrait répondre à la question...
Le principe sera d'utiliser le cherche-remplace pour insérer un point-virgule devant et derrière le code postal. Ensuite, on enregistre la feuille au format texte, puis on ouvre ce nouveau fichier : un dialogue permet alors de séparer les colonnes en fonction du séparateur choisir (le point virgule en l'occurrence).
Concrètement :
1) Edition / Rechercher
Rechercher
Code : Tout sélectionner
[:digit:]{5}
Code : Tout sélectionner
;&;
Puis, faire "Remplacer tout".
Avec cette commande on recherche une série de 5 chiffres, que l'on remplace par elle-même (&) précédée et suivie du point-virgule.
2) Fichier / Enregistrer sous / Type : Texte CSV (.csv)
Séparateur de champ : ;
Séparateur de texte : supprimer celui proposé
Fichier / Fermer
3) Fichier / Ouvrir / Type : Texte CSV (.csv)
Choisir le fichier texte que l'on vient de créer.
Un dialogue s'ouvre qui permet de définir le séparateur de colonne, choisir le ";"
-
- Membre OOrganisé
- Messages : 66
- Inscription : 10 janv. 2006 21:33
bonjour
une autre possiblité ...mais pas plus simple ... ;o)
Si les adresses sont dans la colonne A, chaque mot étant séparé par un espace et en supposant que le nom des rues ne contienne pas des données numériques supérieures à 4 caractères...
Tu saisies en B1:
Tu étires la formule vers la droite, jusqu'en L1 par exemple.
Ensuite étire les formules (de B1 à L1) vers le bas.
Reformate les colonnes B à L au format numérique.
ensuite en M1, tu saisies
=MAX(B1:L1)
que tu étires vers le bas.
bonne soirée
michel
une autre possiblité ...mais pas plus simple ... ;o)
Si les adresses sont dans la colonne A, chaque mot étant séparé par un espace et en supposant que le nom des rues ne contienne pas des données numériques supérieures à 4 caractères...
Tu saisies en B1:
Code : Tout sélectionner
=SI(ESTERREUR(CNUM(SI(COLONNE()-1>NBCAR($A1)-NBCAR(SUBSTITUE($A1;
" ";""));DROITE($A1;NBCAR($A1)-TROUVE("^^";SUBSTITUE($A1;
" ";"^^";NBCAR($A1)-NBCAR(SUBSTITUE($A1;" ";"")))));SI(COLONNE()-1=1;
STXT($A1;1;TROUVE("^^";SUBSTITUE($A1;" ";"^^";1))-1);STXT($A1;TROUVE("^^";SUBSTITUE($A1;" ";"^^";COLONNE()-2))+1;TROUVE("^^";SUBSTITUE($A1;" ";"^^";COLONNE()-1))-TROUVE("^^";
SUBSTITUE($A1;" ";"^^";COLONNE()-2))-1)))));0;
CNUM(SI(COLONNE()-1>NBCAR($A1)-NBCAR(SUBSTITUE($A1;" ";""));DROITE($A1;NBCAR($A1)-TROUVE("^^";
SUBSTITUE($A1;" ";"^^";NBCAR($A1)-NBCAR(SUBSTITUE($A1;" ";"")))));SI(COLONNE()-1=1;STXT($A1;1;TROUVE("^^";
SUBSTITUE($A1;" ";"^^";1))-1);STXT($A1;TROUVE("^^";SUBSTITUE($A1;" ";"^^";COLONNE()-2))+1;TROUVE("^^";SUBSTITUE($A1;" ";"^^";COLONNE()-1))-TROUVE("^^";SUBSTITUE($A1;" ";"^^";COLONNE()-2))-1)))))
Tu étires la formule vers la droite, jusqu'en L1 par exemple.
Ensuite étire les formules (de B1 à L1) vers le bas.
Reformate les colonnes B à L au format numérique.
ensuite en M1, tu saisies
=MAX(B1:L1)
que tu étires vers le bas.
bonne soirée
michel
OOo 2.1 & WinXP(sp2)
-
- GourOOu
- Messages : 9628
- Inscription : 18 sept. 2006 09:40
- Localisation : France
Bonsoir,
Pour ma part, j'utiliserai la formule suivante :
Avant toute chose, il faut que Calc soit prêt à accepter les expressions régulières dans les formules ; pour cela, menu Outils->Options->OOoCalc->Calculs coche Autoriser les caractères génériques dans les formules.
Ton texte étant en A1, cette formule en B1 te donne le code postal en opérant de la façon suivante :
La fonction va rechercher le texte en A1, puis cherche un chiffre de 0 à 9 depuis le premier quart de l'adresse (pour zapper le numéro de rue) et en extrait les 5 caractères suivant.
A +
EDIT : tu récupère là du texte ; si il te faut un nombre, rajoute une fonction CNUM pour convertir ce texte en nombre :
Etant entendu qu'avec cette dernière formule tu as un nombre, les codes postaux commençant par zéro commencerons alors par le premier chiffre significatif (5000 pour 05000 par ex.) à moins d'avoir formater tes cellules en nombres avec un format défini par l'utilisateur du type
EDIT 2 : si tu as des chiffres dans ton adresse (159, rue du 11 Novembre 99999 Saturne) il te faudra adapter la fonction NBCAR qui détermine le début de la recherche : NBCAR(A1)/2 pour chercher à partir de la moitié de l'adresse. Attention : si c'est ta ville qui comporte trop de caractères (57,rue Foch 00000 La-lune-notre-satellite) tu tombe dans le piège inverse, la moitié de cette adresse étant après le code postal...
Pour ma part, j'utiliserai la formule suivante :
Code : Tout sélectionner
=STXT(A1;CHERCHE("[0-9]";A1;NBCAR(A1)/4);5)
Ton texte étant en A1, cette formule en B1 te donne le code postal en opérant de la façon suivante :
La fonction va rechercher le texte en A1, puis cherche un chiffre de 0 à 9 depuis le premier quart de l'adresse (pour zapper le numéro de rue) et en extrait les 5 caractères suivant.
A +
EDIT : tu récupère là du texte ; si il te faut un nombre, rajoute une fonction CNUM pour convertir ce texte en nombre :
Code : Tout sélectionner
=CNUM(STXT(A1;CHERCHE("[0-9]";A1;NBCAR(A1)/4);5))
Code : Tout sélectionner
00 000
Dernière modification par Jeff le 04 févr. 2007 21:20, modifié 2 fois.
-
- Membre OOrganisé
- Messages : 66
- Inscription : 10 janv. 2006 21:33
-
- GourOOu
- Messages : 9628
- Inscription : 18 sept. 2006 09:40
- Localisation : France
Allez, juste pour le plaisir, une dernière formule, qui résiste aux 2 exemples impropables (rue du 11 novembre à Saturne, et la ville la-lune-notre-satellite) :
Celle-ci cherche depuis le milieu de l'adresse, et si une erreur est retournée, elle recherche alors depuis le premier quart de l'adresse...
Code : Tout sélectionner
=SI(ESTERREUR(CNUM(STXT(A1;CHERCHE("[0-9]";A1;NBCAR(A1)/2);5))); CNUM(STXT(A1;CHERCHE("[0-9]";A1;NBCAR(A1)/4);5));CNUM(STXT(A1;CHERCHE("[0-9]";A1;NBCAR(A1)/2);5)))
Dernière modification par Jeff le 05 févr. 2007 13:01, modifié 1 fois.
-
- GourOOu
- Messages : 9628
- Inscription : 18 sept. 2006 09:40
- Localisation : France
Et pour finir en beauté, il faut utiliser l'expression régulière donnée par Pierre-Yves Samyn, afin que la recherche ne se fasse que sur 5 chiffres consécutifs :
A utiliser selon mon post du 04/02 à 20:47 (ne plus tenir compte du EDIT2 du-dit message)
Merci de mettre [Résolu] dans ton titre en cliquant sur Editer de ton premier message si tel est le cas
Code : Tout sélectionner
=STXT(A1;CHERCHE("[:digit:]{5} ";A1;1);5)
Merci de mettre [Résolu] dans ton titre en cliquant sur Editer de ton premier message si tel est le cas
Dernière modification par Jeff le 05 févr. 2007 13:03, modifié 1 fois.