Formater une adresse postale

Voici un petit code qui permet de formater une adresse postal. Il est à insérer en dessous des lignes d’options (Option Compare…) d’un module standard (pas dans le formulaire) :

Valeur saisie : 115, impasse de la petite reine
Valeur formatée : 115, Impasse de la Petite Reine

Const particules = " de ; du ; d' ; des ; l'; la ; le ; les ; en "  
'rajouter les mots en minuscule à ne pas mettre en majuscule

Function formatAdresse(strAdresse As Variant) As String
 Dim strA As String
 Dim arrParticules() As String
 Dim i As Long

 If IsNull(strAdresse) Then Exit Function    
   'si c'est null on ne traite pas
 If strAdresse = "" Then Exit Function       
   'si c'est vide on ne traite pas

arrParticules = Split(particules, ";")
'toutes les premières lettres en majuscule
strA = StrConv(strAdresse, vbProperCase) 

For i = 0 To UBound(arrParticules)
    strA = Replace(strA, arrParticules(i), LCase(arrParticules(i))) 
           'supprime la majuscule
Next

formatAdresse = strA

End Function
Function

On renseigne la constante avec les mots que l’on ne veut pas mettre en majuscule.
1) le strconv() met toutes les 1ère lettre de chaque mot en majuscule.
2) la boucle For remplace les mots trouvés qui correspondent à ceux de la constante.

Et l’appel :
Sélectionner la zone de texte de l’adresse que j’ai nommé Adresse, l’évènement Après MAJ et mettre ceci :

 Private Sub Adresse_AfterUpdate()
     Me.Adresse.Value = formatAdresse(Me.Adresse.Value)
 End Sub
AfterUpdate

« Adresse » est le nom de la zone de texte. Elle doit être remplacée par le nom de celle que vous souhaitez traiter.

Tri d’enregistrements sur le contenu d’une zone de liste déroulante

Il est fréquent et même commun d’utiliser des listes déroulantes dans des formulaires.

Dans le cas où le contenu affiché n’est pas présent dans la source de données, il est difficile de faire un tri sur cette donnée.

Je vous livre ici une astuce qui va vous permettre de faire un tri de la source du formulaire à partir des données affichées dans la liste.

Admettons une liste nommée LmAdherent dont le champ affiché est nommé Nom_Adherent et provient d’une source externe au formulaire.

Dans ce cas sur l’évènement Sur Ouverture indiqué cette syntaxe :

Me.OrderBy = "[Lookup_LmAdherent].[Nom_Adherent]"
Me.OrderByOn = True

Chaque fois que vous ouvrirez le formulaire, il apparaitra trié sur le contenu Nom_Adherent alors que cette données n’est pas contenu dans la source du formulaire.

Vous pouvez découvrir d’autre syntaxe en observant ce qui se passe dans la propriété OrderBy du formulaire lorsque vous utilisez le tri du menu contextuel.

MS ACCESS et persistance (2)

Après avoir parlé, dans un billet précédent, de la persistance dans un fichier ini, nous allons poursuivre sur la technique de la base de registre.

Ecrire dans la base de registre apporte, contrairement au fichier ini, un semblant de sécurité. En effet il est moins aisé de retrouver une valeur parmi les milliers existantes dans la base de registre que de consulter un fichier ini. La destination n’est donc pas la même.

Quels sont les moyens à notre disposition ?

Grâce à la bibliothèque Windows Script Host que l’on retrouve dans les références sous le nom de Microsoft Scripting Runtime on peut invoquer différentes commandes de gestion de la base de registre.

Déclaration

La déclaration de cette bibliothèque peut se faire en early ou late binding (cf http://blogaccess.free.fr/?p=127). C’est la deuxième méthode que nous allons utiliser ici.

Le modèle est toujours le même, déclaration, instanciation, utilisation, libération.

Dim wsh As Object

Set wsh = CreateObject("WScript.Shell")

... instructions

Set wsh = Nothing

Lecture

Pour la lecture on utilise l’instruction RegRead en précisant le chemin de la clef à lire.

Chemin = wsh.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\" & _
      Val(SysCmd(acSysCmdAccessVer)) & ".0\Access\Security\" & _
      "Trusted Locations\mon application\Path"

En retour la fonction renvoi le contenu de la clef. Dans cet exemple on interroge la base de registre pour connaître l’emplacement approuvé pour « mon application ».

Ecriture

De la même manière on peut écrire une valeur ou créer une clef à l’aide de l’instruction RegWrite.

wsh.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\" & _
      Val(SysCmd(acSysCmdAccessVer)) & ".0\Access\Security\" & _
      "Trusted Locations\" & vNameProduit & "\Path", _
      "c:\application access\mon application"

Le premier paramètre est le chemin de la clef de registre et le second la valeur à écrire.

Si la clef (le chemin) n’existe pas, elle est créée.

Conclusion

Comme nous l’avons vu rien de sorcier dans l’utilisation de ces instructions. Par contre il est fortement conseillé d’avoir les bases de connaissances minimales de ce qu’est la base de registre. En effet, si la manipulation d’un fichier ini (cf http://blogaccess.free.fr/?p=122) pour gérer de la persistance n’est pas critique, manipuler la base de registre l’est sans aucun doute. Prenez des précautions avant la manipuler.

Pourquoi ce blog ?

Bienvenue sur BlogAccess !

En 1998, j’ai décidé de créer un site d’information sur l’informatique et Microsoft ACCESS en particulier. Il me fallait un nom qui devait à la fois être simple, parlant et surtout inutilisé, pour désigner ce nouvel espace de vulgarisation. J’ai donc choisi ACCESSite ; ACCESS pour Microsoft ACCESS et Site pour un site web.

Au cours des années qui ont suivi et par un long travail de référencement, je suis arrivé à voir ce vocable être en tête des moteurs de recherche.

Mais c’était sans compter sur le cybersquatting. En effet quoi de plus simple que de se trouver un vocable bien placé sur les moteurs de recherche et de se l’approprier. Quand on fait du commerce c’est la garantie d’être immédiatement visible et surtout à peu de frais.

Au début c’était un, puis deux et maintenant ils sont légions à utiliser ce terme et dans tous les domaines, avec des tirets, des points… N’ayant fait aucun dépôt officiel de ce nom, je ne peux que constater l’usurpation.

C’est la raison de ce nouvel espace, avec un nouveau nom, et avec un contenu exclusivement réservé à Microsoft ACCESS.

à bientôt.