Récupérer Code postal parmis une adresse complète

Résolu
Bonjour,
J'ai vu sur ce sujet la réponse à ma question sur OO Calc. J'aimerais trouver l'équivalent sur Excel :-)
https://forum.openoffice.org/fr/forum/viewtopic.php?f=4&t=3729

J'ai une liste d'adresse en colonne A :

203 rue Victor Hugo 75000 Paris
5 avenue des lilas 59000 LILLE
1860 boulevard d Jean de La fontaine 31000 TOULOUSE
etc...

J'aimerais récupérer le code postal uniquement.
Cette formule le fait très bien sous Calc :
STXT(A1;CHERCHE("[0-9]";A1;NBCAR(A1)/4);5)

Sous Calc "[0-9]" permet de chercher soit 0 soit 1 soit 2 etc... Je n'ai pas trouvé comment reproduire cela sur Excel

Merci d'avance

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour

    A tester avec une formule matricielle
    https://www.cjoint.com/c/HCCpQMBVHET
    1. Bonsoir
      Merci pour la réponse, j'ai en effet trouvé sur un autre sujet comment faire autrement avec formule matricielle mais aussi sans.
      https://forums.commentcamarche.net/forum/affich-2514762-excel-chaine-de-caracteres

      Mais j'ai tout de même posé la question car cette formule est beaucoup plus simple et la possibilité de chercher plusieurs valeur, comme dans l'exemple [0-9], pourrait m'être très utile sur d'autres utilisations.

      Merci
    2. Contributeur
      Bonjour,

      avec "[0-9]" j'ai l'impression qu'OO accepte les expressions régulières (REGEX).
      Là il est en avance sur excel qui les ignore totalement (hors vba).
      eric
    3. Bonjour
      C'est exactement ce que je voudrais savoir, est-ce possible ou non ?
    4. Contributeur
      Bonjour,

      je t'ai répondu : non, sauf vba.
      cs_Le Pivert t'a fait une proposition en vba en dessous...
      eric
    5. Bonjour

      Comme tu avais écrit "j'ai l'impression", je ne savais pas si tu étais sûr de ta réponse.
      En effet, il y a plein d'autres moyens de le faire sinon :
      - formule matricielle et VBA https://cellulexcel.blogspot.com/p/adresse-decoupage.html
      - formule non matricielle https://www.cjoint.com/c/HDbkUmxjwDd
      ou encore https://forums.commentcamarche.net/forum/affich-2514762-excel-chaine-de-caracteres

      Donc il est bien impossible sous Excel d'utiliser les expressions régulières dans les formules

      Merci
  2. Contributeur
    Bonjour,

    en suivant le site indiqué ici:

    https://forums.commentcamarche.net/forum/affich-35285266-recuperer-code-postal-parmis-une-adresse-complete#2

    code vba:

    Option Explicit
    Dim Var As Variant
    Dim result As String
    Sub For_X_to_Next_Ligne()
    Dim FL1 As Worksheet, NoCol As Integer
    Dim NoLig As Long
    Dim longueur As Integer
        Set FL1 = Worksheets(ActiveSheet.Name)
        NoCol = 1 'lecture de la colonne A
        For NoLig = 1 To Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne colonne A
         Var = FL1.Cells(NoLig, NoCol)
         If Var = "" Then
         Else
        FL1.Cells(NoLig, NoCol).Select
     extraireValeursNumeriques_DansChaine
    longueur = Len(result) 'longueur  chaine numerique
     If longueur = 5 Then
     FL1.Cells(NoLig, NoCol + 1) = result 'code postal dans colonne B
      FL1.Cells(NoLig, NoCol) = Replace(FL1.Cells(NoLig, NoCol), result, "") 'supprime code postal dans la colonne A si utilité, sinon supprimer la ligne de code
     End If
    End If
    Next
        Set FL1 = Nothing
    End Sub
    Sub extraireValeursNumeriques_DansChaine()
        Dim i As Byte, nb As Byte
        Dim Cible As String, Resultat As String
        Dim Nombre As Double
         Cible = Var
        '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))
            nb = nb + 1
            Resultat = Resultat & Nombre & vbLf
            i = i + Len(Str(Nombre)) - 1
            End If
        Next
       result = Nombre
    End Sub
    Private Sub CommandButton1_Click()
    For_X_to_Next_Ligne
    End Sub
    


    Voilà