Sélectionner un valeur connue dans une liste

Autant la sélection automatique d’un item dans une liste modifiable est facile grâce à une simple affectation, autant avec une liste classique c’est plus compliqué.

Je vous livre l’astuce consistant à mettre un peu de code dans une liste déroulante reprenant les valeurs de la liste.

Dans l’événement Après MAJ de la liste déroulante ou d’une zone de texte mettre le code VBA ci-dessous :

Dim i As Long
Dim i_save As Long  
Me.lstMultiple.Selected(0) = True    
'désélection de la liste multiple 
For i = 1 To Me.lstMultiple.ListCount - 1  'parcours la liste multiple
   Me.lstMultiple.Selected(i) = False      
   'déselection de l'élement courant   
   If (Me.lstMultiple.ItemData(i) = CStr(Nz(Me.lstRecherche, ""))) Then   
      's'il est identique à ce que je cherche        
      i_save = i  'je repère la ligne     
   End If 
Next 
Me.lstMultiple.Selected(i_save) = True  'en sortant je sélectionne la liste

lstMultiple est la liste classique et lstRecherche est la liste modifiable ou la zone de texte ou vous sélectionnez la valeur à trouver.

L’astuce consiste à parcourir la liste à la recherche de la valeur, d’en capter l’indice de la ligne pour l’affecter à cette même liste.

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,

Astuce PC : Mes ports USB ne sont plus reconnus

Comme souvent le lecteur de cartes tout-en-un du poste de ma femme est en rideau. Les unités n’apparaissent pas sur le poste de travail. Après une recherche sur Internet je trouve une manip qui semble débile à sa lecture mais qui fait fureur tant les réponses positives sont nombreuses. Cette manipulation est très simple et ne nécessite aucune manipulation du système, et le plus curieux c’est qu’elle fonctionne !

  • Eteignez votre pc.
  • Mettez l’interrupteur de l’alimentation sur Off (à l’arrière du pc).
  • Débranchez le câble d’alimentation.
  • Appuyez pendant 15 secondes sur le bouton de démarrage (oui sans n’avoir rien rebranché !).
  • Reconnectez votre câble d’alimentation.
  • Remettez l’interrupteur de l’alimentation sur On.
  • Démarrez votre pc.

Normalement les unités du lecteur de cartes sont revenus. Cette manipulation vide l’électricité résiduelle de la carte mère… allez y comprendre quelque chose !

MS ACCESS : Transformer du texte en numérique

Cette petite fonction sans prétention permet de transformer une chaine de caractère en valeur numérique. « Quoi de nouveau ! » me direz-vous. A la différence des fonctions natives de types Val(), CDbl() et autre, cette fonction épure tous les caractères non numérique en tenant compte du signe et du séparateur décimal.

Function fSupprimerAlpha(mValeur As Variant) As Variant
'------------------------------------------------------
' Procedure    : fSupprimerAlpha / Function
' Author       : fabrice CONSTANS (MVP)
' Date         : 03/06/2012
' Modified     :
' Description  : épure une chaine de caractère pour
                    retourner une valeur numérique
'                tient compte du sép. décimal et des + et -
' Parameters   : mValeur contient la valeur à transformer
' Return Value : retourne une valeur numérique valide
'------------------------------------------------------

Dim i As Integer

If IsNull(mValeur) Or Len(mValeur) = 0 Then
   fSupprimerAlpha = Null
   Exit Function
End If
' à inverser suivant le type de séparateur utilisé
mValeur = Replace(mValeur, ",", ".")

' supprime tous les caracteres alpha 
For i = 1 To Len(mValeur)
    ' tout ce qui n'est pas numérique sauf +,- et sepérateur dec.
    If Not IsNumeric(Mid(mValeur, i, 1)) And _
       Not Mid(mValeur, i, 1) Like "*[,,.]*" And _
       Not Mid(mValeur, i, 1) Like "*[+,-]*" Then
       ' remplace par un espace
       mValeur = Replace(mValeur, Mid(mValeur, i, 1), " ")

    End If

Next
' renvoi la nouvelle valeur sans les espaces
fSupprimerAlpha = Replace(mValeur, " ", "")

End Function

Vous pouvez facilement y faire appel depuis une requête par exemple.

MS ACCESS : Rechercher un mot dans toutes les requêtes

Les modifications d’une application conséquente sont souvent difficiles à réaliser, surtout dans le cas des requêtes. Dans ce billet je vous propose un bout de code pour rechercher un mot, complet ou non, dans toutes les requêtes d’un fichier MS Access.

Function SnifQuery(Optional strText As String = "")
 On Error GoTo errSub

 Dim db As DAO.Database
 Dim qry As DAO.QueryDef
 Set db = CodeDb

 ' si rien n'est transmis on demande le mot
 If strText = "" Then
    strText = InputBox("Indiquez le mot à rechercher dans les requêtes." & _
           vbCrLf & "Ce mot peut être incomplet.", "Mot à rechercher", "")
    If strText = "" Then Exit Function
End If

' balaye toutes les requêtes
For Each qry In db.QueryDefs
     'si on trouve le mot
     If qry.sql Like "*" & strText & "*" Then
          ' on ouvre
          DoCmd.OpenQuery qry.Name, acViewDesign
     End If
Next

' on est propre donc on ferme le chose dont on ne se sert plus.
Set qry = Nothing
Set db = Nothing
Exit Function

errSub:
Resume Next

End Function

Pour le lancement vous pouvez passer par la fenêtre Exécution de VBE ou encore créer une macro Autokeys.

  • Ouvrez une nouvelle macro.
  • Affichez la colonne Nom de macro.
  • Entrez le raccourci souhaité. Exemple +^{Q}
  • Dans la colonne Action sélectionnez ExécuterCode.
  • Indiquez dans le nom de la fonction SnifQuery().

Lorsque vous utiliserez Ctrl+Shift+Q la fonction sera appelée.

Attention ce bout de code ne fait pas de recherche dans les requêtes des bibliothèques.

Bonne utilisation et bonne année à tous !

Configuration d’un réseau filaire en présence d’un Wifi

Le Wifi est très pratique, c’est un fait ! Imprimer, consulter des fichiers ou encore des flux audio et vidéo issus d’un autre Pc de la maison  est devenu un jeu d’enfants avec les Livebox et autres Freebox.

Le revers de la médaille, c’est la piètre rapidité de ce réseau. Avec un débit théorique de 54mb/s, vous enverrez au mieux 6.75 Mo par seconde, soit presque 2 minutes pour un fichier de 675 Mo, sans solliciter le Wifi pour une autre tâche.

Un cable réseau équipé de prises rj45

Un cable réseau équipé de prises rj45.

Heureusement, il reste le bon vieux réseau filaire avec sa vitesse de 100 à 1000 Mb/s.  Maintenant tous les pc et portables sont équipés de la fameuse prise RJ45 et pour une dizaine d’euros seulement, vous pourrez vous procurer un cable RJ45 pour relier 2 Pc ensemble. Veillez cependant à prendre le bon !

  • Le cable dit « croisé » est destiné aux connexions de Pc à Pc.
  • Le cable dit « droit » permet de relier un pc à un hub (switch) ou un hub à un hub.

Connectez vos 2 Pc avec un cable croisé. Puis, passez aux réglages du réseau. Assurez-vous que le Groupe de travail porte le même nom sur chaque Pc. C’est obligatoire pour qu’ils se voient sous Windows.

Clic droit sur le Poste de travail/
Propriétés/Nom de l'ordinateur/Modifier
/Membre de/Groupe de travail

Si vous n’avez pas changé le groupe par défaut, vous devriez avoir « Workgroup » inscrit. Vous pouvez choisir de le conserver, sinon vous devrez redémarrer chaque Pc pour prendre en compte la modification. Notez également le nom de chaque ordinateur car vous en aurez besoin à la fin. S’il est trop complexe, changez-le au profit d’un autre plus simple.

Vous devez à présent définir une adresse IP pour chaque Pc. L’adresse IP est le numéro d’indentification unique d’un appareil (Pc ou autre) sur le réseau. Ouvrez les connexions réseau.

Menu démarrer/Panneau de configuration/Connexions réseau/

La liste des connexions réseaux possibles

La liste des connexions réseaux possibles

Ouvrez la bonne carte en double-cliquant dessus. Cliquez sur le bouton Propriétés. Dans la liste, sélectionnez Protocole Internet (TCP/IP) et cliquez à nouveau sur le bouton Propriétés. Cliquez sur le bouton d’option « Utiliser l’adresse IP suivante » pour définir l’adresse et le masque.

Attention ! Toutes les plages d’adresses ne sont pas adéquates pour un réseau local et elles ne doivent pas être dans la plage de votre réseau IP.

Le réseau Wifi des boîtes Adsl et autres est généralement réglé pour fonctionner avec la plage 1. C’est à dire que les adresses IP comprises entre 192.168.1.0 et 192.168.1.255 sont utilisées par le réseau Wifi. L’important est la 3ème partie de l’adresse : le 1. Réglez vos adresses IP sur la plage 3 ou 4 comme ceci:

Panneau de configuration TCP/IP

Panneau de configuration TCP/IP

Tapez 192.168.4.1 dans l’adresse IP de votre 1er Pc, le masque réseau va être défini à 255.255.255.0 automatiquement. Laissez-le tel quel. Cliquez sur OK pour valider.

Tapez 192.168.4.2 dans l’adresse IP de votre 2ème Pc. Laissez le masque tel quel. Cliquez sur OK pour valider.

Maintenant vos 2 Pc doivent « se voir ». Pour vérifier, à partir du Pc N°2, allez dans le menu Démarrer et dans la zone Exécuter, tapez :

Ping 194.168.4.1

C’est donc l’adresse du 1er Pc que vous entrez. Il devrait vous afficher cet écran :

Résultat de la commande PINGRésultat de la commande PING

L’écran doit donner les mêmes informations, soit aucun paquet perdu. Le plus dur est fait. Réitérez la commande sur le Pc N°1 avec l’adresse du N°2.

Ping 194.168.4.2

Le problème, maintenant, c’est d’obliger le système du Pc N°1 à atteindre le N°2 en passant par ce cable et non plus par le Wifi. Pour forcer l’utilisation de la carte réseau filaire, on utilise un fichier bien pratique : Le fichier « host« .

Vous devez l’ouvrir avec le bloc-note en mode Administrateur. Rendez-vous dans le menu suivant :

Démarrer/Programmes/Accessoires/Bloc-note

Faites un clic-droit sur le bloc-note puis « Ouvrir en tant que… » et cliquez sur Administrateur. Le fichier « host » se trouve dans le répertoire suivant :

c:\windows\system32\drivers\etc

C’est un simple fichier texte mais sans extension. Il suffit d’ajouter le nom de la machine à atteindre puis un espace suivi de son adresse IP.

Sur le Pc N°1, vous devez créer cette ligne à la fin du fichier :

NomMachine2 192.168.4.2

et sur le Pc N°2 celle-ci :

NomMachine1 192.168.4.1

Enregistrez chaque fichier et faites vos partages. Vous pouvez maintenant échanger vos fichiers plus rapidement.

Notez qu’en présence de 2 cartes réseaux de vitesses différentes, c’est toujours la vitesse la plus basse qui prime. Si vous choisissez de connecter plus de 2 Pc ensemble, il vous faudra passer par un hub.

Bonne utilisation !