VBA : Opérateur Like commun à SQL, VBA et aux Expressions

L’opérateur logique LIKE est un opérateur d’égalité strictement réservé aux chaines de type texte. Sa particularité est de pouvoir comparer des valeurs à un masque composé de caractères de substitution.

Glossaire

Dans cet article : Masque, caractères de substitution, masque de comparaison, règles désigne la deuxième partie du Like.

Comme le = mais plus flexible

Il s’utilise comme n’importe quel opérateur logique soit :

[Expression à comparer] Like [masque de comparaison]

Retourne un True, False ou Null.

'En VBA
If ExpressionAcomparer Like ExpressionLike then

'Expression
=iif(ExpressionAcomparer Like ExpressionLike;True;False)

'SQL
... WHERE ExpressionAcomparer Like ExpressionLike ...

La syntaxe est identique en SQL (*), VBA ou dans les expressions.

(*) Les moteurs de base de données utilisent plutôt les jockers ANSI.
* devient % et ? devient _.

Les jokers

Les jokers sont des caractères de substitution permettant de composer le masque de comparaison. Ils sont combinables.

L’astérisque *

L’astérisque * remplace plusieurs caractères alphanumériques et spéciaux.

ExpressionDescription
« abcde45é# » like « abc* »Toute chaine commençant par abc
« 01è+abc » like « *abc »Toute chaine finissant par abc
« 01abc_ç » like « *abc* »Toute chaine contenant abc
« ab(6ç1c » like « ab*c »Toute chaine commençant pas ab et finissant par c

    Le point d’interrogation ?

    Le point d’interrogation ? remplace un seul caractère quel qu’il soit : lettre, chiffre, caractère spécial.

    ExpressionDescription
    « A » Like « ? »Toute chaine contenant 1 caractère
    « abcD » like « abc? »Toute chaine commençant par abc avec 1 caractère à la fin.
    « 0adc » like « ?abc »Toute chaine commençant par 1 caractère et finissant par abc.
    « 0abc) » like « ?abc? »Toute chaine contenant abc avec 1 caractère de part et d’autre.
    « x4z » like « ??? » Toute chaine contenant 3 caractères contigus.

      Comme le point d’interrogation remplace 1 caractère on peut en utiliser plusieurs à la suite dans un masque de comparaison.

      Le dièse #

      Le caractère dièse # fonctionne comme le point d’interrogation mais remplace un chiffre, donc ni lettre, ni un caractère spécial.

      ExpressionDescription
      « 1 » like « # »un chiffre de 0 à 9
      identique à [0-9]
      « 100.99 » like « ###.## »3 chiffres et 1 point et 2 chiffres
      « +100.99 » like « [!-]###.## » »
      « A25X17 » like « [A-C]##[!W]## »A, B ou C, 2 chiffres, pas de W, 2 chiffres

      Les crochets [ ]

      Les crochets permettent de remplacer un caractère situé dans une plage particulière. Il a aussi comme fonction de pouvoir utiliser les caractères de substitutions en tant que caractères numériques.

      ExpressionDescription
      « B » Like « [A -C] » Le tiret détermine une plage de caractères contigus entre 2 bornes. Ici A, B ou C.
      « C » Like « [A,C,E] »La virgule, détermine une série de caractères. Ici A, C ou E.
      « ANZ » Like « A[M-O][W,Z] »La combinaison des 2. Ici A, M ou N ou O et W ou Z.
      « B2 » Like « [A-C][!1] »A, B, C mais pas 1.
      « Cbc3 » Like « [A-D]bc[!0] »A à D puis bc puis <>0
      « abc2 » vrai !
      « add2 » faux ! (pas de bc)
      « abc0 » faux ! (0 à la fin)
      « rL5 » Like « [a-z][A-Z][0-9] » Uniquement en VBA avec un Option Compare Binary !
      La réponse doit contenir 3 digits. 1 lettre en minuscule, 1 en majuscule, un chiffre.

      « aB1 » vrai !
      « AX9 » faux ! A est en majuscule.
      « aAd » faux ! pas de chiffre à la fin.
      « aB123 » faux ! 2 et 3 en trop.
      « abR5 » faux ! a ou b en trop.
      « BMW10 » Like « [A-C]M[S-Z]10 »A,B ou C et M et X,S à Z et 10
      « ‘bonjour' » Like « [«  »,’]*[«  »,’] »On teste si la chaine est entourée de  » ou ‘. (*)

      (*) Ceci n’est que pour l’exemple, cette comparaison n’est pas du tout robuste.

      Crochets avec des caractères spéciaux

      Avec des caractères spéciaux la musique est la même. Seules les paroles changent.

      ExpressionDescription
      « Ä » like « [À-Æ] »du 0192 au 0198
      « ) » like « [!-/] »du 0033 au 0047

      Ce qui ne fonctionne pas avec les crochets

      Les combinaisons ne fonctionnent pas. Il faut obligatoirement séparer vos règles. Ici quelques exemples.

      Expression FAUSSEDescriptionExpression VRAI
      « [Z-A] »Toujours respecter l’ordre de tri. « [A-Z] »
      « [8-5] »Toujours respecter l’ordre de tri.« [5-8] »
      « [A-C,!1] »Pas d’assemblage« [A-C][!1] »
      « [a-z,A-Z,0-9] »Pas d’assemblage« [a-z][A-Z][0-9] »
      « [a-z!] »La négation toujours au début« [!a-z]

      Attention ! Les plages de caractères doivent toujours être placées dans l’ordre croissant. Par exemple [A-C] est valide alors que [C-A] ne l’est pas, de même que [0-9] est valide et [9-0] ne l’est pas. Pour déterminer l’ordre des caractères, consultez la table ASCII et réalisez des tests.

      La négation

      On peut utiliser 2 types de négation avec l’opérateur Like.

      Le Not habituel qui englobe l’ensemble de la comparaison, comme dans l’exemple suivant

      ExpressionDescription
      Not « abc » Like « a?c »Ne correspond pas
      Not « abc » Like « a*c »Ne correspond pas

      Le ! point d’exclamation dans les crochets du masque de comparaison. Dans ce cas on obtient plus de finesse dans la comparaison.

      ExpressionDescription
      « abc » Like « [!a]bc »Faux ! le premier caractère ne doit pas être « a ».
      « 1bc » Like « [!a-z]bc »Vrai ! le premier caractère n’est pas un caractère compris entre a et z.

      Rechercher les caractères génériques

      On peut être emmené à rechercher l’un des caractères de substitution dans une chaîne. Quelques exemples dans le tableau suivant.

      ExpressionDescription
      « Es-tu là ? » Like « Es-tu là [?] »Le point d’interrogation à la fin d’une phrase.
      « Es-tu là ! » Like « Es-tu là ? »Un caractère à la fin. ? ou autre.
      « 45 » like « []## »Pas d’espace en début de chaine.

      « AB » Like « A[]B »
      Pas d’espace entre A et B
      « A B » est faux !
      « [Vrai] » Like « [[]Vrai] »Commence par le crochet ouvrant [.
      Le crochet fermant ] n’a pas besoin d’être isolé.
      « #N/A » Like « [#]N/A »Une chaîne commençant par le caractère #.
      «  » »abc » » » Like «  » »??? » » »Une chaine commençant par  » et finissant par « .
      « AOC « Médoc » 33″ like « AOC «  »* » » ## »AOC « une chaine » 33
      «  » »abc » » » Like chr(34) & « abc » & chr(34)On peut aussi utiliser ce genre de notation où on utilise chr(34) pour retourner le « .

      Avec d’autres types de données

      Le LIKE peut fonctionner avec d’autres types de données mais les valeurs testées seront transformées en texte pour leur évaluation.

      Par exemple avec des dates on peut rechercher des séries.

      ExpressionDescriptionEquivalent VBA
      date() Like « ##/##/2032 »nous somme en 2032Year(date)=2009
      date() Like « ##/1#/2032 »Nous sommes au 4e trimestre 2032Format(Date, »q »)=4 (*)
      date() Like « 10/##/#### »Nous somme le 10Day(date)=10

      (*) Dans les expressions la virgule doit être remplacée par un point virgule.
      Format(Date; »q »)

      On peut trouver certains intérêts à utiliser un LIKE plutôt qu’une expression plus académique, mais attention aux résultats qui peuvent être surprenants et loin de vos attentes. Un Like n’est pas forcément plus performant par rapport aux fonctions prévues.

      (*) t en SQL, q en VBA. On peut également utiliser la fonction DatePart().

      Quelques tests dans la fenêtre d’exécution de VBE

      Vous pouvez vous entrainer dans la fenêtre d’exécution pour concevoir vos masques.

      ? "ceci#est [la preuve] par 9 ?" LIKE "ceci[#]*[[]la preuve[]]*[0,9]?[?]"
      Vrai
      

      La casse

      Vous avez pu remarquer que Like n’est pas sensible à la casse lors de la comparaison.
      Il y a cependant un moyen d’en tenir compte. Pour cela il faut modifier le paramètre Option Compare situé dans l’en-tête du module VBA qui contient l’instruction.

      Option Compare Database
      Option Explicit
      OptionDescription
      Option Compare DatabaseNe tient pas compte de la casse
      « AAA » est égal à « aaa »
      Option Compare BinaryTient compte de la casse
      « AAA » est différent de « aaa »

      Pour une prise en charge de la casse dans vos requêtes vous avez d’autres solutions :

      • Changer de moteur de base de données. Ms Sql server, Mariadb, PostgreSQL, Oracle prennent en charge la casse.
      • Créer votre propre fonction VBA que vous appellerez depuis vos requêtes. Voir l’exemple ci-dessous.

      Mettez cette fonction dans un module Standard.

      Option Compare Binary  'respect de la casse
      Option Explicit
      
      Public Function isLike(value As Variant, masque As Variant) As Variant
      'Fabrice Constans (C2ED)
      'Tient compte d'un passage de Null et de son retour.
      'Appel de la fonction dans tous les composants d'Access
      'VBA : If isLike(date() ,"##/##/2032") then
      'Expression : =Iif(isLike(date() ;"##/##/2032");"Vrai";"False")
      'SQL : SELECT madate FROM matable WHERE isLike(madate ,"##/##/2032");
      
          isLike = value Like masque
      
      End Function
      
      

      Attention à la valeur Null !

      Le Null est retourné lorsque au moins l’une des expressions vaut Null.

      ExpressionDescription
      Null Like « * »La valeur à comparer vaut Null
      « abc » Like NullLe masque de comparaison vaut Null
      Null Like NullLes 2 côté de la comparaison valent Null
      ? Null Like "*"
      Null
      ? "giraphe sophie" Like Null
      Null
      ? Null Like null
      Null

      Conclusion

      En conclusion voici un opérateur bien utile qui rempli 90% des demandes en toutes circonstances. Il pêche cependant par le manque de prise en compte de la casse avec le moteur de base de données interne d’Access, ACE et dans les expressions des formulaires, état et macros. Ceci peut être rapidement contourné avec la petite fonction isLike() indiquée dans cet article.
      Pour des besoins plus poussés n’hésitez pas à utiliser RegEx. Si le moteur ACE ne le prend pas en charge la plupart des autres moteurs de base de données ont intégré RegEx dans leur SQL.

      Épingler une application ACCESS sous Windows 7 et supérieur

      Épinglez 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,

      ACCESS : 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

      On concatène le mot clef « Lookup_ » au nom de la liste déroulante LmAdherent puis un point et le nom de la colonne à trier.

      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.

      Bonne utilisation !

      ACCESS : Manipuler des groupes de contrôles

      Quoi de plus énervant que la réorganisation de gros formulaires ?

      Avec sa capacité de plus de 700 contrôles, heureusement chiffre rarement atteint, les formulaires peuvent devenir de gros machin difficile à modifier et très chronophage lorsqu’il s’agit de réorganiser leurs contrôles.

      Depuis la version 2000, et oui ce n’est plus tout jeune, Microsoft a doté le mode création d’ACCESS d’un petit outil sympathique qui permet de grouper/dégrouper des objets. Attention, il ne s’agit pas d’exploiter cette fonctionnalité dans vos applications, mais de simplement apporter un peu de souplesse et de facilité dans cette tâche ingrate.

      Comment ça marche ?

      Tout d’abord prenez un formulaire déjà conçu, passez en mode Création, puis sélectionnez un groupe de contrôles.

      Cliquez sur le ruban Organiser. Puis cliquer sur Taille/Espace pour dérouler le menu. Enfin sélectionnez Grouper.

      Maintenant vos contrôles sont groupés, ils ne forment plus qu’un seul ensemble que vous pouvez manipuler. Déplacement, réduction, agrandissement…

      Par contre si vous souhaitez régler un contrôle vous devez faire l’opération inverse et sélectionner Dissocier dans le menu. Notez que ces regroupements sont conservés à la sauvegarde.

      Bonne utilisation !

      VBA : Early ou Late Binding : Qu’est-ce que c’est ? Comment choisir ?

      Si vous utilisez des bibliothèques externes à MS Access, comprenez qui ne sont pas liées automatiquement à MS Access, cet article vous intéresse.

      Earlybinding, vous l’utilisez systématiquement sans le savoir.

      Pour utiliser une bibliothèque avec MS Access, habituellement on ouvre VBE, l’éditeur de VBA, et on utilise Outils/Références. La liste qui s’affiche dans cette fenêtre sont les bibliothèques disponibles sur le poste. Il suffit de cocher la bibliothèque que l’on souhaite utiliser.

      Dans ce cas on utilise le Earlybinding qu’on peut traduire approximativement par liaison en amont. MS Access se comporte alors de la manière suivante. Au moment de l’ouverture de l’application et avant que la première ligne de code de l’application ne  s’exécute, MS Access va vérifier que les bibliothèques requises existent. Il va sans dire qu’aucun contrôle n’est possible durant cette phase.

      Cela occasionne des problèmes lorsque la bibliothèque n’est pas installée sur le poste cible ou qu’elle a une version différente. Dans ce cas, un message d’erreur s’affiche et l’application ne démarre pas.

      Voici l’exemple d’un code en Earlybinding en relation avec la bibliothèque Microsoft Word x.xx Object Library :

      Dim wApp As Word.Application 
      Dim oDoc As Word.Document 'crée l'objet Word 
      Set wApp = CreateObject("Word.Application") 
      
      wApp.Visible = False 
      Set oDoc = wApp.Documents.Open(Chemin) 
      
      With oDoc 
         .MailMerge.OpenDataSource Name:="c:\temp\export.csv" ...

      On remarque que les objets sont fortement typés lors de leur déclaration.

      Latebinding ou comment contrôler la présence des bibliothèques.

      Heureusement, le langage VBA dispose de moyen de prévenir l’absence de la bibliothèque au moyen du Latebinding ou liaison tardive.

      Avec le LateBinding la bibliothèque n’est plus déclarée avant, c’est à dire dans les références, mais bel et bien dans le code au moment de son utilisation. Les objets ne sont plus fortement typés mais reçoivent le type générique Object. De même éventuelles constantes ne sont plus disponibles, il faudra donc les recréer.

      Voici un cas concret d’une transformation Early vers Late pour palier un problème de version d’Office lors d’une automation avec Word.

      On recrée les constantes correspondantes à la bibliothèque Microsoft Office x.xx Object Library.

      Option Compare Database 
      Option Explicit 
      
      Const wdDoNotSaveChanges = 0 
      Const wdExportFormatPDF = 17

      Les objets sont typés de manière générique.

      'Debug 
      'Dim wApp As Word.Application 
      'Dim oDoc As Word.Document 
      
      'Exploitation 
      Dim wApp As Object 
      Dim oDoc As Object 
      
      Set wApp = CreateObject("Word.Application") 
      
      wApp.Visible = False 
      Set oDoc = wApp.Documents.Open(Chemin) 
      With oDoc .MailMerge.OpenDataSource Name:="C:\export.csv" ... 
      .Close (wdDoNotSaveChanges)

      Notez la mise en commentaires des lignes Earlybinding pour permettre une maintenance/évolution facilité.

      Cette technique permet, dans la limite de la compatibilité des bibliothèques, de déployer l’application sur n’importe quel Office puisque le code n’est plus attaché à une version unique de Word.

      Dans les références on peut se passer de la déclaration comme on peut le voir ci-dessous.

      Voici un cas concret d’une vérification de présence de Word lors de l’ouverture d’un formulaire.

      Robustesse du code par la prévention d’erreur

      En mode LateBinding il peut arriver que le composant soit absent du système. C’est pour cette raison qu’il faut tester le composant avant son utilisation.
      L’exemple suivant montre comment tester un composant.

      Public Function OpenWord() as Boolean
      
      On Error GoTo ErrSub 
      Dim wApp As Object 
      Set wApp = CreateObject("Word.Application") 
      Set wApp = Nothing 
      Exit Function
      
      ErrSub: 
      If Err.Number = 429 Then 
         MsgBox "Vous devez disposer de Word pour utiliser cette fonctionnalité." 
         vComposant = False 
      End If 
      
      End Function

      L’erreur 429 est remontée lorsqu’une bibliothèque est absente.

      Conclusion

      Si le LateBinding est préférable pour une application en exploitation, il n’en va pas de même lors du développement. En effet le Earlybinding donne accès à l’autocomplétion, ce qui est un confort non négligeable dans cette phase du projet.

      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 sur la propriété voulue, puis pressez la touche F1.

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

      Bonne utilisation !

      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.

      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’identification 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

      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

      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 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 câble 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 !

      VBA : 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." &amp; _ 
                 vbCrLf &amp; "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 "*" &amp; strText &amp; "*" Then 
               ' on ouvre la requête 
               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 !

      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 !

      • Éteignez votre pc.
      • Mettez l’interrupteur de l’alimentation sur Off (à l’arrière du pc).
      • Débranchez le câble d’alimentation.
      • Sur portable débranchez la batterie.
      • 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.

      Bonne utilisation !