IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

probleme controle chaine de caractere


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut calcul de prefixe d'adresse
    Bonjour, je cherche à écrire une fonction qui calcule le préfixe d'une adresse
    c'est à dire tout ce qui concerne les numero de maisons
    j'ai écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Private Function CalculPrefix(ByVal Prefix As String) As String
    Dim i As Long
    Dim PrefixHSN As String
    Dim MyLen As Long
    MyLen = Len(Prefix)
    i = 2
    Prefix = Mid(Prefix, 1, i)
    While (i < MyLen)
    If (((Asc(Prefix) >= 48) And (Asc(Prefix) <= 57)) Or Prefix = "BIS " Or Prefix = "TER " Or Prefix = " " Or Prefix = "- " Or Prefix = " -" Or Prefix = "/" Or Prefix = "ET") Then
    PrefixHSN = PrefixHSN & Prefix
    i = i + 1
    End If
    Wend
     
    Prefix = Mid(Prefix, 1, i)
    CalculPrefix = PrefixHSN
     
    End Function
    mais elle retourne i fois le prefixe
    si quelqu'un a une idée

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    pas sur d'avoir tout compris ...

    peux-tu nous donner ton input et ce que tu souhaites obtenir en output avec des exemples ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    par exemple: si il y a en entré :

    22 avenue du général de gaulle

    je voudrai extraire le prefixe 22

    idem pour 1-3 rue de l'école

    je voudrai extraire 1-3

    voila g du mal a extraire ces prefixe du fait qu'il ya pas mal de diversité
    tel que 1 et 3, 1/3, 1 à 3 etc

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    j'arrete le boulo pour aujourdui
    jrepren demain matin
    si vous avez une illumination pd la nui merci bcp lol

  5. #5
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    La lumière viendra des RegEx, en utilisant la fonction AllRegExp de mon tutoriel :

    http://cafeine.developpez.com/access.../regexp/#LII-B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    allregexp "118/120 ter avenue de Verdun","(\d+)((-|/| et )\d+)? ?(bis|ter)?(.*)","$1$2 $4"
    ==================================
          Travaux liés à .Execute
    ==================================
    source >>     118/120 ter avenue de Verdun
    [$1]          118
    [$2]          /120
    [$3]          /
    [$4]          ter
    [$5]           avenue de Verdun
    ==================================
            Travaux liés à .Test
    ==================================
    Vrai
    ==================================
          Travaux liés à .Replace
    ==================================
    118/120 ter

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    merci pour ce tutoriel
    je suis en train de le lire mais je ne trouve pas la référence
    Microsoft VBScript Regular Expressions
    j'ai access 97 en anglais

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    le nom complet de la référence est :
    Microsoft VBScript Regular Expressions 5.5

    le chemin (chez moi)
    C:\WINNT\system32\vbscript.dll\3

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    je l'ai trouvé parce que j'ai access 2003 mais il se nomme
    Microsoft VBScript Global dans le 97 alors que dans le 2003 il
    a le bon nom
    espere que sa va marcher
    au fait ton tutiriel est vraiment bien meme si j'ai un peu
    de mal à capter comment je vais faire lol

  9. #9
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Ce qui est le plus important et le plus délicat à mettre au point, c'est le Pattern :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "(\d+)((-|/| et )\d+)? ?(bis|ter)?(.*)"
    Après, le tutoriel devrait te permettre d'atteindre ton objectif.

  10. #10
    Invité
    Invité(e)
    Par défaut Tu peux peut-être...
    Salut Didier77,

    Tu peux essayer ça également :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Dim Cpt, Rue$, Pos1, Pos2, Mot(3)
      Dim PrefixHSN As String
     
      Rue$ = "22 rue du jardin" ' Phrase Test
      Mot(1) = "rue": Mot(2) = "avenue": Mot(3) = "impasse" ' Etc...
      Cpt = 1
      Do
        Pos1 = InStr(1, Rue$, Mot(Cpt))
        If Pos1 = 0 Then Cpt = Cpt + 1
      Loop While Pos1 = 0
      PrefixHSN = Left(Rue$, Pos1 - 1)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    J'ai eu vraiment bcp de mal à comprendre le tuto de caféine
    donc j'ai fait une ptite fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Private Function Calcul(ByVal Adress As String) As String
     
    Dim Prefix As String
    Dim Espace As Long
    Dim Prefixtotal As String
    Dim i As Long
    Adress = LTrim(Adress)
     
    While ((Asc(Adress) >= 48 And Asc(Adress) <= 57))
    i = 1
    Espace = InStr(Adress, " ")
     
    If Espace = 0 Then
    Exit Function
    Else
    Prefix = Mid(Adress, i, Espace)
    End If
    i = Len(Prefix)
    Prefixtotal = Prefixtotal & Prefix
    Adress = Mid(Adress, i)
    Adress = LTrim(Adress)
    Wend
     
    Calcul = Prefixtotal
     
    End Function
    Voila
    si quelq'un sait quel est le code asci de à en VB?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Points : 346
    Points
    346
    Par défaut
    ?asc("à")
    224

  13. #13
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Pas de pb si RegEx te paraît trop complexe ... en revanche ton code serait plus simple en utilisant Split() ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?Split("12 rue des Oliviers", " ")(0)
    12

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    ok merci a tout le monde

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    Désolé mais j'ai encore un pti souci avec cette fonction
    les "à", "BIS", "TER" ne sont pas pris dans le prefix
    j'ai regarder dans tt les sens impossible de voir pk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Private Function Calcul(ByVal Adress As String) As String
     
    Dim Prefix As String
    Dim Espace As Long
    Dim Prefixtotal As String
    Dim i As Long
    Adress = LTrim(Adress)
     
    While ((Asc(Adress) >= 48 And Asc(Adress) <= 57) Or Adress = "à*" Or Adress = "BIS*" Or Adress = "TER*")
    i = 1
    MsgBox "sapass"
    Espace = InStr(Adress, " ")
     
    If Espace = 0 Then
    Exit Function
    Else
    Prefix = Mid(Adress, i, Espace)
    MsgBox Prefix
    End If
    i = Len(Prefix)
    Prefixtotal = Prefixtotal & Prefix
    Adress = Mid(Adress, i)
    Adress = LTrim(Adress)
    Wend
     
    Calcul = Prefixtotal
     
    End Function
    Franchement si quelqu'un trouve je le remercie

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut probleme controle chaine de caractere
    J'ai fait une fonction qui teste si une chaine de caractere commence par un numérique ou "BIS" ou "TER" ou "à" avec un while
    le probleme est que la premiere condition marche très bien alors que celle du bis et du ter et du à ne marche pa.
    Il y a surement une erreur de ma part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    Private Function Calcul(ByVal Adress As String) As String
    
    Dim Prefix As String
    Dim Espace As Long
    Dim Prefixtotal As String
    Dim i As Long
    Adress = LTrim(Adress)
    
    While ((Asc(Adress) >= 48 And Asc(Adress) <= 57) Or ((Adress = "BIS*") Or (Adress = "TER*")))
    
    i = 1
    Espace = InStr(Adress, " ")
    
    If Espace = 0 Then
    Exit Function
    Else
    Prefix = Mid(Adress, i, Espace)
    MsgBox Prefix
    End If
    i = Len(Prefix)
    Prefixtotal = Prefixtotal & Prefix
    Adress = Mid(Adress, i)
    Adress = LTrim(Adress)
    MsgBox Adress
    Wend
    
    Calcul = Prefixtotal
    
    End Function

  17. #17
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 54
    Points
    54
    Par défaut
    If (InStr(1,ton texte ,"BIS",1) =1)

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Points : 54
    Points
    54
    Par défaut
    C'est super sa marche nikel
    Tu pourrait marquait la syntaxe générale
    j'avais jamais vu cette fonction écrite comme sa

  19. #19
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Les RegExp marchaient, mais puisque tu n'en veux pas, on peut utiliser Split()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Function NumeroRue(ByVal strAddr As String) As String
    
    Dim tmp() As String
    Dim strComplement As String
    
    tmp = Split(strAddr)
    strComplement = " bis ter à a / -"
    
    For i = 0 To UBound(tmp) - 1
    &#160;&#160;&#160;&#160;If IsNumeric(Left(tmp(i), 1)) Then
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;' numéro de rue
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NumeroRue = NumeroRue & " " & tmp(i)
    &#160;&#160;&#160;&#160;ElseIf InStr(strComplement, tmp(i)) Then
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;' bis ou ter ou - /
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NumeroRue = NumeroRue & " " & tmp(i)
    &#160;&#160;&#160;&#160;Else
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Exit For
    &#160;&#160;&#160;&#160;End If
    Next i
    
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/04/2009, 18h59
  2. probleme de chaine de caractere
    Par darkspoilt dans le forum VBA Access
    Réponses: 19
    Dernier message: 12/06/2007, 23h37
  3. [SQL]Probleme avec chaine de caracteres
    Par acheo dans le forum Access
    Réponses: 4
    Dernier message: 31/03/2007, 23h28
  4. probleme remplacement chaine de caractere avec SED
    Par rhaamo dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 24/01/2007, 16h12
  5. [MySQL] probleme decoupage chaine de caractere
    Par mahfout_i dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2006, 19h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo