Extraire code postal cellule

Mh -  
via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   -
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!

2 réponses

  1. jee pee Messages postés 31877 Date d'inscription   Statut Modérateur Dernière intervention   9 977
     
    Bonjour,

    Pour récupérer les 3 composants de l'adresse, voir : https://cellulexcel.blogspot.com/p/adresse-decoupage.html
    0
    1. brucine Messages postés 24812 Date d'inscription   Statut Membre Dernière intervention   4 165
       
      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
    2. brucine Messages postés 24812 Date d'inscription   Statut Membre Dernière intervention   4 165 > brucine Messages postés 24812 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    3. Mh
       
      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
    4. jee pee Messages postés 31877 Date d'inscription   Statut Modérateur Dernière intervention   9 977 > Mh
       
      as-tu bien lu le texte et notamment comment valider la formule qui est une formule matricielle : CTRL+MAJ+ENTREE
      0
    5. jee pee Messages postés 31877 Date d'inscription   Statut Modérateur Dernière intervention   9 977 > brucine Messages postés 24812 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      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