Comment analyser la ville, l’état et le code postal dans des valeurs distinctes
Version d’origine du produit : Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Numéro de la base de connaissances d’origine : 168798
Cet article fournit une procédure d’analyse d’une variable unique contenant des informations sur la ville, l’état et le code postal des États-Unis en trois variables distinctes. La routine prend en charge :
- Code postal à 5 ou 9 chiffres.
- Noms d’état à plusieurs mots (s’ils sont précédés d’une virgule).
- Un nombre quelconque d’espaces intermédiaires.
Exemples d’entrées prises en charge :
New York, New York, 99999
New York, NY, 99999-9999
New York, NY 99999-9999
New York NY 99999
AVERTISSEMENT : TOUTE UTILISATION PAR VOUS DU CODE/MACRO FOURNI DANS CET ARTICLE EST À VOS PROPRES RISQUES. Microsoft fournit ce code/macro « tel quel » sans garantie d’aucune sorte, expresse ou implicite, y compris, mais sans s’y limiter, les garanties implicites de qualité marchande et/ou d’adéquation à un usage particulier.
REMARQUE : Dans l’exemple de code suivant, un trait de soulignement (_) à la fin d’une ligne est utilisé comme caractère de continuation de ligne. Pour les versions de BASIC qui ne prennent pas en charge les caractères de continuation de ligne, supprimez le trait de soulignement à la fin de la ligne et fusionnez avec la ligne suivante lors de la recréation de ce code.
Les champs sont analysés dans l’ordre suivant si aucune virgule n’est trouvée dans l’adresse : Code postal, État, Ville Si au moins une virgule est présente, il est présumé être entre ville et état, et les champs sont analysés dans un ordre différent : Ville, État, Code postal
Entrez le code suivant :
VBFunction CutLastWord (ByVal S As String, Remainder As String) _ As String ' CutLastWord: returns the last word in S. ' Remainder: returns the rest. ' ' Words are separated by spaces ' Dim I As Integer, P As Integer S = Trim$(S) P = 1 For I = Len(S) To 1 Step -1 If Mid$(S, I, 1) = " " Then P = I + 1 Exit For End If Next I If P = 1 Then CutLastWord = S Remainder = "" Else CutLastWord = Mid$(S, P) Remainder = Trim$(Left$(S, P - 1)) End If End Function Sub ParseCSZ (ByVal S As String, City As String, State As String, _ Zip As String) Dim P As Integer ' ' Check for comma after city name ' P = InStr(S, ",") If P > 0 Then City = Trim$(Left$(S, P - 1)) S = Trim$(Mid$(S, P + ' ' Check for comma after state ' P = InStr(S, ",") If P > 0 Then State = Trim$(Left$(S, P - 1)) Zip = Trim$(Mid$(S, P + 1)) Else ' No comma between state and zip Zip = CutLastWord(S, S) State = S End If Else ' No commas between city, state, or zip Zip = CutLastWord(S, S) State = CutLastWord(S, S) City = S End If ' ' Clean up any dangling commas ' If Right$(State, 1) = "," Then State = RTrim$(Left$(State, Len(State) - 1)) End If If Right$(City, 1) = "," Then City = RTrim$(Left$(City, Len(City) - 1)) End If End Sub
Pour tester, créez un formulaire avec quatre zones de texte (txtAddress, txtCity, txtState, txtZip) et un bouton de commande. Ajoutez le code suivant :
VBSub Command1_Click() Dim City As String, State As String, Zip As String ParseCSZ txtAddress, City, State, Zip txtCity = City txtState = State txtZip = Zip End Sub
Affichez le formulaire, tapez une adresse dans txtAddress, puis cliquez sur le bouton de commande. Les trois autres champs doivent contenir les valeurs analysées.