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

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

A voir également:

2 réponses

M-12 Messages postés 1332 Date d'inscription   Statut Membre Dernière intervention   285
 
Bonjour

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

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