Astuce : Connaitre l’équivalent VBA d’une propriété.

Je vous livre une petite astuce simple pour connaître l’équivalent d’une propriété d’un formulaire ou d’un état en VBA :

En mode création, placez-vous que la propriété voulue, puis pressez la touche F1.

Vous aurez l’équivalent VBA de la propriété, son utilité et souvent un exemple d’utilisation VBA.

Bonne utilisation !

MS ACCESS : Afficher/Cacher le ruban à la demande

Cette fois-ci je vous livre l’une de mes astuces que j’utilise systématiquement dans toutes mes applications : Afficher/Cacher le ruban à la demande.

La méthode est simple, une variable globale permet de fixer l’état du ruban. Un raccourci dans une macro Autokey permet de changer l’état du ruban et une fonction VBA affiche ou cache le ruban suivant l’état de la variable.

Option Compare Database
Option Explicit
Dim StateRibbon As Boolean

Function DisplayRibbon()
' Auteur : Fabrice CONSTANS (MVP)
' Description : Affiche/cache le ruban
' ctrl+shift+R

Nz StateRibbon, False  ' 1er passage initialise à faux
' (ribbon invisible)

DoCmd.ShowToolbar "Ribbon", IIf(StateRibbon, acToolbarNo, acToolbarYes)

StateRibbon = Not StateRibbon  ' inverse la valeur

End Function

Le raccourci :

+^{R}  ExecuterCode DisplayRibbon()

Cacher le ruban permet de cacher également les boutons Restaurer/ Fermer ce qui donne une touche professionnelle à l’application.

MSACCESS : Déselection zone de liste

Lorsque vous utilisez une zone de liste sans sélection multiple, il peut arriver d’avoir besoin de désélectionner la ligne. Inutile de vous acharner sur la ligne sélectionnée avec votre souris, elle restera en surbrillance.

Je vous livre ici ma méthode pour enlever la sélection :

Dim itSel As Integer

Private Sub Form_Open(Cancel As Integer)
'initialise à -1 pour ne pas perturber la première sélection
itSel = -1 
End Sub

Private Sub Liste_Click()
'la selection est identique à la précédent
If Me.Liste.ListIndex = itSel Then
   Me.Liste.ListIndex = -1  'on déselectionne
   itSel = -1
Else
   'on fixe le choix pour la prochaine comparaison
   itSel = Me.Liste.ListIndex
End If

End Sub

La liste se nomme Liste. On déclare une variable globale au  formulaire, que l’on nomme itSel, elle permettra de conserver le précédent choix opéré, soit un entier positif pour une sélection et -1 pour la désélection.

Sur l’ouverture du formulaire on considère que rien n’est sélectionné et on attribue la valeur -1 à itSel. Lorsqu’on clique sur la zone de liste, on vérifie si le clic correspond à la sélection en cours au moyen de la propriété ListIndex.

Cette propriété retourne un entier de 0 à x ou x est le dernier item de la liste. Lorsque qu’on attribue une valeur à ListIndex l’item correspond est sélectionné, par contre si l’on met -1 aucune ligne n’est sélectionnée.

Simple et efficace.

Epingler une application ACCESS sous Windows 7 et supérieur

Epinglez une application Microsoft ACCESS dans la barre de Windows 7 ou 8 et vous constaterez qu’au démarrage c’est Microsoft ACCESS qui se lance… mais pas l’application.

Pour réussir ce tour de force, commencez par créer un simple raccourci vers votre application.

  • Clic-droit sur l’icône de l’application, Créer un raccourci.
  • Faites un clic-droit/propriété/onglet Raccourci
  • Dans la zone Cible rajoutez le chemin et le nom du programme de lancement, en l’occurrence MSACCESS.EXE, avant le chemin et le nom du fichier de votre application.

Suivant la version du système, 32 ou 64 bits et d’office, 32 ou 64 bits, l’emplacement sera différent. Si vous avez des difficulté utilisez la recherche de programme.

Par exemple pour un Windows 64bits et un Office 32 bits, cas le plus fréquent actuellement, vous trouverez ce fichier dans :

C:\Program Files (x86)\Microsoft Office\Office1x\

x correspondant à la version de votre Office, 12 pour 2007, 14 pour 2010, 15 pour 2013 ainsi de suite.

N’oubliez pas les guillemets séparant les 2.

Vous devrez obtenir ceci dans la zone Cible :

"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "X:\chemin vers mon application\application.accdb"

Le plus compliqué est fait, vous n’avez plus qu’à redémarrer votre application via ce raccourci et l’épingler.

Ce billet s’applique à une application Microsoft ACCESS mais également aux autres applications en général.

Cordialement,

Mise à jour Windows 8.1 gratuite

C’est officiel !

A partir du 17 octobre 2013 à 13h (heure Française) les possesseurs de Windows 8 pourront télécharger GRATUITEMENT la mise à jour 8.1 du système.

Attention ! Il s’agit d’une mise à jour de Windows 8 à Windows 8.1, donc ne sont pas concernés les possesseurs de versions antérieures comme Seven ou 95.

Il se peut que devant le succès, et même si Microsoft a prévu les serveurs en conséquence, il y ait quelques embouteillages, soyez patient et n’hésitez pas à réitérer le téléchargement dans les heures ou les jours qui suivent.

Cordialement,

MS ACCESS : Liste à choix multiple et instruction sql IN()

Bonjour,

Transmettre un paramètre à une requête se fait assez simplement via plusieurs méthodes. Cela reste à la discrétion du développeur avec cependant 2 règles fondamentales à retenir :

  1. L’ihm doit rester pratique pour l’utilisateur, le développeur d’adapte.
  2. Le code doit être le plus simple possible, pensez aux autres qui devront le lire.

Concernant une liste In() le problème de passation de paramètres est un peu plus ardu. Voici comment je procède habituellement, bien évidemment c’est encore à la discrétion du développeur, à chacun sa méthode et ses habitudes.

D’abord concernant la captation des choix de la liste et de leur valeur. La méthode indiquée dans mon tutoriel http://loufab.developpez.com/tutoriels/access/operateur-in/ reste valable à un détail ; il ne traite que des valeurs numériques. Pour du texte voici ce qu’il faut modifier, ce qui, bien que pas très propre, fonctionnera aussi pour du numérique. Notez également que je factorise sous forme d’une fonction pour pouvoir récupérer la liste où bon me semble dans l’application.

Public Function fGetListe(zliste As ListBox) As String
Dim itm As Variant          ' l'item choisi
Dim lstval As String        ' la liste des id sélectionnés

For Each itm In zliste.ItemsSelected                 ' parcourt les items
    'ICI LA LIGNE MODIFIEE
    lstval = lstval & """" & zliste.ItemData(itm) & ""","     ' insère chaque valeur TEXTE
Next
fGetListe = Left(lstval, Len(lstval) - 1)
End Function

Donc l’appel est simple :

... = fGetListe(me.malistederoulante)
'ou encore
..." & fGetListe(me.malistederoulante) & "...

 

Pour l’inclusion dans une requête voici comment procéder (extrait tiré d’une de mes applications) :

    Dim strChoix As String
    Dim strSql As String
    strSql = "SELECT [Nom] & "" "" & [Prenom] AS Adhérent, tAdherent.FonctionAmap, tAdherent.Email, "
    strSql = strSql & " tAdherent.Selection, tAdherent.ID_adherent, tAdherent.Nom FROM tAdherent "

    strChoix = fGetListe(Me.lstFonctionAmap)

    If Len(strChoix) > 0 Then
        strSql = strSql & " WHERE FonctionAmap in(" & strChoix & ")"
    End If
    strSql = strSql & " ORDER BY tAdherent.Nom;"
  • strSql contient la requête
  • strChoix la liste des valeurs

Une fois strSql renseigné on peut imaginer l’utiliser tel quel ou bien l’enregistrer dans un objet requête comme ceci :

Dim Qrd As DAO.QueryDef
    'Créer un objet requête
    Set Qrd = CurrentDb.CreateQueryDef("MaNouvelleRequete", strSql)

    'ou modifier un objet requête existant
    Set Qrd = CurrentDb.QueryDefs("UneRequeteExistante")
    Qrd.SQL = strSql
    'dans ce dernier cas le code SQL existant est simplement remplacé par le nouveau

    currentdb.QueryDefs.Refresh 'on force le rafraichissement.

La manipulation des objets requête n’impose pas de sauvegarde, cette méthode est d’ailleurs absente de la classe.

La liste à choix multiple est souvent boudée parce que moins pratique à poser dans une IHM et plus complexe à exploiter aussi bien pour l’utilisateur (ctrl et shift) que pour le développeur néophyte cependant elle est incontournable pour du choix multiple.

A  bientôt pour un nouvel article,

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.