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

Résolu
zlatan40 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. M-12 Messages postés 1349 Statut Membre 285
     
    Bonjour

    A tester avec une formule matricielle
    https://www.cjoint.com/c/HCCpQMBVHET
    0
    1. zlatan40 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      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
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
      0
    3. zlatan40 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour
      C'est exactement ce que je voudrais savoir, est-ce possible ou non ?
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      je t'ai répondu : non, sauf vba.
      cs_Le Pivert t'a fait une proposition en vba en dessous...
      eric
      0
    5. zlatan40 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      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
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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à
    0