Extraire code postal cellule

Fermé
Mh - 21 juin 2022 à 16:08
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 - 22 juin 2022 à 13:29
Bonjour,

Je souhaite extraire une chaine de caractères de plusieurs cellules Excel, sachant que je n'ai pas le même nombre de caractères à chaque fois en partant de la fin ou du début Par exemple:
80 RUE EMILE ZOLA 10000 TROYES. Je souhaite extraire le code postal 10000.

Je vous remercie en avance!
A voir également:

2 réponses

jee pee Messages postés 39681 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 2 mai 2024 9 253
21 juin 2022 à 16:24
Bonjour,

Pour récupérer les 3 composants de l'adresse, voir : https://cellulexcel.blogspot.com/p/adresse-decoupage.html
0
brucine Messages postés 14436 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 3 mai 2024 1 842
21 juin 2022 à 17:08
Bonjour,

Un plan B si on ne veut pas écrire une formule un peu complexe via le addin Excel Pack de fonctions XLP et sa fonction EXTRAIRE_MOT, étant admis que le code postal est toujours dans notre exemple le cinquième "mot" (ce qui exclut les voies sans numéro ou les compléments d'adresse du style lieu-dit, résidence....).

La formule citée par jee pee me semble souffrir du même inconvénient, mais en notant que l'adresse y est cette fois-ci déclinée en 7 "mots".

https://www.excel-pratique.com/fr/fonctions-complementaires
https://www.excel-pratique.com/fr/fonctions-complementaires/extraire-mot
0
brucine Messages postés 14436 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 3 mai 2024 1 842 > brucine Messages postés 14436 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 3 mai 2024
21 juin 2022 à 17:14
Le plan C consiste à télécharger la base officielle des codes communes:

https://datanova.laposte.fr/explore/dataset/laposte_hexasmal/download/?format=xls&timezone=Europe%2FBerlin&lang=fr&use_labels_for_header=true

Et à chercher dans toute la colonne C Code_Postal le "texte" que l'on retrouve dans notre cellule.
0
Bonjour, la formule donnée ne fonctionne pas sur mon tableau. J'ai un N/A comme résultat. Sachant que j'ai copié collé la formule en changeant le A2 par ma case avec l'adresse complète.
=STXT(A2;NBCAR(A2)-EQUIV(VRAI;ESTNUM(--(STXT(A2;NBCAR(A2)-LIGNE($1:$255);1)));0)+4;5)
0
jee pee Messages postés 39681 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 2 mai 2024 9 253 > Mh
Modifié le 21 juin 2022 à 18:10
as-tu bien lu le texte et notamment comment valider la formule qui est une formule matricielle : CTRL+MAJ+ENTREE
0
jee pee Messages postés 39681 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 2 mai 2024 9 253 > brucine Messages postés 14436 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 3 mai 2024
Modifié le 21 juin 2022 à 18:07
mauvaise langue ;-) la/es formule/s fonctionne/nt avec
9 bis rue jean lurcat lieudit de la pate de loup  78210 SAINT CYR L'ECOLE    
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 juin 2022 à 18:58
Bonjour,

une autre approche en vba

https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-P

pour l'exemple liste colonne A et code postal colonne B

Option Explicit
'https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-P
Sub extraireValeursNumeriques_DansChaine()
    Dim i As Byte, Nb As Byte
    Dim Cible As String
    Dim Nombre As Double
    Dim j As Integer
    Dim DerniereLigneUtilisee As Long
    DerniereLigneUtilisee = Range("A" & Rows.Count).End(xlUp).Row 'liste colonne A
    For j = 1 To DerniereLigneUtilisee
    Cible = Cells(j, 1)
    'Pour que fonction Val puisse reconnaitre les décimales: Remplacement des
    'virgules par des points
    Cible = Replace(Cible, ",", ".")
    'Pour gérer deux nombres qui se suivent: remplacement des espaces
    'par un caractère Alpha
    Cible = Replace(Cible, " ", "x")
     For i = 1 To Len(Cible)
        If IsNumeric(Mid(Cible, i, 1)) Then
        Nombre = Val(Mid(Cible, i, Len(Cible) - i + 1))
         If Len(Nombre) > 4 Then Cells(j, 2) = Nombre 'code postal en colonne B
        i = i + Len(Str(Nombre)) - 1
        End If
    Next
    Next j
End Sub

0
via55 Messages postés 14406 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 avril 2024 2 703
Modifié le 22 juin 2022 à 13:30
Bonjour à tous

Quitte à passer par du VBA autant peut être utiliser une fonction personnalisée plus courte, basée sur le fait que le code postal est vraisemblablement la seule valeur numérique de longueur 5 caractères :
Fonction personnalisée à mettre dans un module de l'éditeur VBA
S’utilise ensuite selon la syntaxe =codepostal(A1)
Function codepostal(cell As Range)
tablo = Split(cell, " ") ' découpage de la chaîne en fonction des espaces
For n = 0 To UBound(tablo) ' boucle sur les valeurs obtenues
If IsNumeric(tablo(n)) And Len(tablo(n)) = 5 Then codepostal = tablo(n) ' si la valeur est numérique et de longueur 5 elle est retenue
Next
End Function

Cdlmnt
Via
0