FAQ MS-Access

FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
Sommaire→VBA→Divers→Divers Trucs et Astuces- Quel batch pour lancer une macro Access ?
- Comment détecter si un lecteur réseau existe ?
- Comment importer des données de fichiers FileMaker.fp5 dans Access ?
- Comment imprimer un fichier texte ?
- Peut-on ouvrir des fichiers .wav avec Access ?
- Comment rafraîchir la mémoire cache ?
- Comment récupérer les paramètres régionaux Windows ?
- Comment trouver le répertoire d'installation de "Winnt\system32" ?
- Comment trouver un fichier dans un dossier (par exemple un fichier Excel) ?
- Comment jouer un son MIDI dans une application ?
- Comment déclencher plusieurs beep successifs ?
- Comment fermer la fenêtre VBA en VBA ?
- Comment savoir si mon clavier est en majuscules ou pas ?
- Comment activer/désactiver le Caps Lock du clavier ?
- Comment faire qu'une fonction renvoie un tableau en Access 97 ou inférieures ?
- Comment insérer un objet par un bouton de commande ?
- Comment afficher le clavier virtuel en VBA ?
Le paramètre de la ligne de commande pour exécuter une macro est /x start /WAIT msaccess.exe O:\outils\automa~1\autonet.mdb /x Archivage >> %LogFil% 2>Archivage
Pour tester l'existence d'un lecteur réseau et sa connexion, vous pouvez utiliser
l'objet FileSystemObject de la référence Microsoft Scripting Runtime.
Vous devez donc ajouter cette référence à votre projet.
Exemple d'utilisation :
Dim oFSO As New FileSystemObject
Dim oDrv As Drive
Dim strLettre As String
strLettre = "Z"
If oFSO.DriveExists(strLettre) Then
Set oDrv = oFSO.GetDrive(strLettre)
If oDrv.IsReady Then MsgBox "Le lecteur réseau est disponible"
Else
MsgBox "Ce lecteur réseau n'est pas configuré sur votre machine"
End IfC'est possible par ODBC.
Voici la manipulation qui fonctionne avec les .fp5, à tester avec les autres :
- il faut que le fichier soit ouvert dans Filemaker. Aller dans le menu fichier pour partager le fichier ;
- Il faut déclarer une source ODBC dans le panneau de configuration de Ouindoze en indiquant le fichier ;
- aller dans Access et lier les tables via ODBC. On les voit alors comme des tables Access.
Attention :
- pour utiliser le lien, il faut que le fichier soit ouvert dans FileMaker ;
- les rubriques texte de plus de 255 caractères seront tronquées après les 255 premiers.
Lorsque l'on fait un clic droit sur un fichier Texte (.txt), on a l'option "imprimer" dans le menu contextuel.
Après une recherche dans la base de registre sur le mot-clé "TXT", on trouve ceci :
HKEY_CLASS_ROOT\txtfile\shell\print\command :
%SystemRoot%\system32\NOTEPAD.EXE /p %1
Et donc la syntaxe pour imprimer avec la fonction Shell est la suivante :
Shell "M:\WINNT\NOTEPAD.EXE /p " & strPathTmp & "ArtSansTpsCycle.txt"Dans un module standard, il faut mettre :
Declare Function PlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long
' Mettre 0 dans le uFlags pour laisser le son se terminer avant que le programme ne reprenne le contrôle
' Mettre 1 dans le uFlags pour que le programme reprenne le contrôle immédiatement après le début du playback
' Mettre 0& (Null) dans le lpszSoundName ET 1 dans le uFlags pour arrêter le Playback en coursDans le formulaire de démarrage, il faut mettre :
Private Sub Form_Close()
PlaySound 0&, 1
End Sub
Private Sub Form_Load()
PlaySound "LePathDuFichier.wav", 1
End SubIl suffit d'utiliser la ligne suivante :
DBEngine.Idle dbRefreshCacheOption Compare Database
Option Explicit
Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Public Const LOCALE_USER_DEFAULT = &H400
Public Enum LOCALES
LOCALE_ICENTURY = &H24 ' century format specifier
LOCALE_ICOUNTRY = &H5 ' country code
LOCALE_ICURRDIGITS = &H19 ' # local monetary digits
LOCALE_ICURRENCY = &H1B ' positive currency mode
LOCALE_IDATE = &H21 ' short date format ordering
LOCALE_IDAYLZERO = &H26 ' leading zeros in day field
LOCALE_IDEFAULTCODEPAGE = &HB ' default code page
LOCALE_IDEFAULTCOUNTRY = &HA ' default country code
LOCALE_IDEFAULTLANGUAGE = &H9 ' default language id
LOCALE_IDIGITS = &H11 ' number of fractional digits
LOCALE_IINTLCURRDIGITS = &H1A ' # intl monetary digits
LOCALE_ILANGUAGE = &H1 ' language id
LOCALE_ILDATE = &H22 ' long date format ordering
LOCALE_ILZERO = &H12 ' leading zeros for decimal
LOCALE_IMEASURE = &HD ' 0 = metric, 1 = US
LOCALE_IMONLZERO = &H27 ' leading zeros in month field
LOCALE_INEGCURR = &H1C ' negative currency mode
LOCALE_INEGSEPBYSPACE = &H57 ' mon sym sep by space from neg amt
LOCALE_INEGSIGNPOSN = &H53 ' negative sign position
LOCALE_INEGSYMPRECEDES = &H56 ' mon sym precedes neg amt
LOCALE_IPOSSEPBYSPACE = &H55 ' mon sym sep by space from pos amt
LOCALE_IPOSSIGNPOSN = &H52 ' positive sign position
LOCALE_IPOSSYMPRECEDES = &H54 ' mon sym precedes pos amt
LOCALE_ITIME = &H23 ' time format specifier
LOCALE_ITLZERO = &H25 ' leading zeros in time field
LOCALE_NOUSEROVERRIDE = &H80000000 ' do not use user overrides
LOCALE_S1159 = &H28 ' AM designator
LOCALE_S2359 = &H29 ' PM designator
LOCALE_SABBREVCTRYNAME = &H7 ' abbreviated country name
LOCALE_SABBREVDAYNAME1 = &H31 ' abbreviated name for Monday
LOCALE_SABBREVDAYNAME2 = &H32 ' abbreviated name for Tuesday
LOCALE_SABBREVDAYNAME3 = &H33 ' abbreviated name for Wednesday
LOCALE_SABBREVDAYNAME4 = &H34 ' abbreviated name for Thursday
LOCALE_SABBREVDAYNAME5 = &H35 ' abbreviated name for Friday
LOCALE_SABBREVDAYNAME6 = &H36 ' abbreviated name for Saturday
LOCALE_SABBREVDAYNAME7 = &H37 ' abbreviated name for Sunday
LOCALE_SABBREVLANGNAME = &H3 ' abbreviated language name
LOCALE_SABBREVMONTHNAME1 = &H44 ' abbreviated name for January
LOCALE_SABBREVMONTHNAME10 = &H4D ' abbreviated name for October
LOCALE_SABBREVMONTHNAME11 = &H4E ' abbreviated name for November
LOCALE_SABBREVMONTHNAME12 = &H4F ' abbreviated name for December
LOCALE_SABBREVMONTHNAME13 = &H100F
LOCALE_SABBREVMONTHNAME2 = &H45 ' abbreviated name for February
LOCALE_SABBREVMONTHNAME3 = &H46 ' abbreviated name for March
LOCALE_SABBREVMONTHNAME4 = &H47 ' abbreviated name for April
LOCALE_SABBREVMONTHNAME5 = &H48 ' abbreviated name for May
LOCALE_SABBREVMONTHNAME6 = &H49 ' abbreviated name for June
LOCALE_SABBREVMONTHNAME7 = &H4A ' abbreviated name for July
LOCALE_SABBREVMONTHNAME8 = &H4B ' abbreviated name for August
LOCALE_SABBREVMONTHNAME9 = &H4C ' abbreviated name for September
LOCALE_SCOUNTRY = &H6 ' localized name of country
LOCALE_SCURRENCY = &H14 ' local monetary symbol
LOCALE_SDATE = &H1D ' date separator
LOCALE_SDAYNAME1 = &H2A ' long name for Monday
LOCALE_SDAYNAME2 = &H2B ' long name for Tuesday
LOCALE_SDAYNAME3 = &H2C ' long name for Wednesday
LOCALE_SDAYNAME4 = &H2D ' long name for Thursday
LOCALE_SDAYNAME5 = &H2E ' long name for Friday
LOCALE_SDAYNAME6 = &H2F ' long name for Saturday
LOCALE_SDAYNAME7 = &H30 ' long name for Sunday
LOCALE_SDECIMAL = &HE ' decimal separator
LOCALE_SENGCOUNTRY = &H1002 ' English name of country
LOCALE_SENGLANGUAGE = &H1001 ' English name of language
LOCALE_SGROUPING = &H10 ' digit grouping
LOCALE_SINTLSYMBOL = &H15 ' intl monetary symbol
LOCALE_SLANGUAGE = &H2 ' localized name of language
LOCALE_SLIST = &HC ' list item separator
LOCALE_SLONGDATE = &H20 ' long date format string
LOCALE_SMONDECIMALSEP = &H16 ' monetary decimal separator
LOCALE_SMONGROUPING = &H18 ' monetary grouping
LOCALE_SMONTHNAME1 = &H38 ' long name for January
LOCALE_SMONTHNAME10 = &H41 ' long name for October
LOCALE_SMONTHNAME11 = &H42 ' long name for November
LOCALE_SMONTHNAME12 = &H43 ' long name for December
LOCALE_SMONTHNAME2 = &H39 ' long name for February
LOCALE_SMONTHNAME3 = &H3A ' long name for March
LOCALE_SMONTHNAME4 = &H3B ' long name for April
LOCALE_SMONTHNAME5 = &H3C ' long name for May
LOCALE_SMONTHNAME6 = &H3D ' long name for June
LOCALE_SMONTHNAME7 = &H3E ' long name for July
LOCALE_SMONTHNAME8 = &H3F ' long name for August
LOCALE_SMONTHNAME9 = &H40 ' long name for September
LOCALE_SMONTHOUSANDSEP = &H17 ' monetary thousand separator
LOCALE_SNATIVECTRYNAME = &H8 ' native name of country
LOCALE_SNATIVEDIGITS = &H13 ' native ascii 0-9
LOCALE_SNATIVELANGNAME = &H4 ' native name of language
LOCALE_SNEGATIVESIGN = &H51 ' negative sign
LOCALE_SPOSITIVESIGN = &H50 ' positive sign
LOCALE_SSHORTDATE = &H1F ' short date format string
LOCALE_STHOUSAND = &HF ' thousand separator
LOCALE_STIME = &H1E ' time separator
LOCALE_STIMEFORMAT = &H1003 ' time format string
End Enum
Function GetLocale(ByVal TypeLocal As LOCALES) As Variant
Dim sBuffer As String
Dim nRet As Long
sBuffer = String(256, 0)
nRet = GetLocaleInfo(LOCALE_USER_DEFAULT, TypeLocal, sBuffer, Len(sBuffer))
If nRet > 0 Then
GetLocale = Left(sBuffer, nRet - 1)
Else
GetLocale = ""
End If
End FunctionPour récupérer par exemple le style de date courte, il suffira de faire appel à la fonction GetLocale, en lui passant le paramètre LOCALE_SSHORTDATE.
Mettre en référence : Microsoft Scripting Runtime.
Dim fso As New FileSystemObject, Repertoire As Folder
Set Repertoire = fso.GetSpecialFolder(SystemFolder)Function ChercherFichier(nomFichier As String) As Boolean
' nomFichier : nom du fichier cherché qui est passé en paramètre d'appel de la fonction
With Application.FileSearch
.lookin = "D:\Sauvegarde\Programmation\Developpez.com\EditeurFaq"
.FileName = nomFichier
.filetype = msoFileTypeAllFiles
.Searchsubfolders = True
If .Execute Then
ChercherFichier = True
Else
ChercherFichier = False
End If
End With
End FunctionPour utiliser la constante msoFileTypeAllFiles, il faut référencer la bibliothèque Micosoft Office x.x Object library.
Pour jouer un fichier .mid, il faut utiliser les API. Dans un module :
Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Public Sub JouerMusique(ByVal Fichier As String)
mciExecute ("play " & Fichier)
End Sub
Private Sub ArreterMusique(ByVal Fichier As String)
mciExecute ("stop " & Fichier)
End SubPour lancer la lecture :
JouerMusique("d:\town.mid")Pour arrêter :
ArreterMusique("d:\town.mid")Dans un module :
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)Puis dans le code :
For i=1 to 1000
beep
sleep(500)
next iIl faut utiliser l'objet VBE :
Application.VBE.MainWindow.Visible = FalsePublic Declare Function GetKeyState Lib "user32" (ByVal iVirtualKey As Integer) As Long
Public Function Is_Majuscule() As Boolean
Is_Majuscule = (&H1 And GetKeyState(vbKeyCapital)) <> 0
End FunctionLa fonction Is_Majuscule renvoie true si le clavier est en majuscules, false sinon.
Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Enum apiOnOff
apiOn = 1
apiOff = 0
End Enum
Dim kbArray As KeyboardBytes
Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Sub ChangerCapsLock(v As apiOnOff)
GetKeyboardState kbArray
kbArray.kbByte(&H14) = v
SetKeyboardState kbArray
End SubUtiliser sous la forme pour désactiver :
ChangerCapsLock apiOffOu, pour activer :
ChangerCapsLock apiOn
Au moyen d'un type de données qui encapsule un tableau.
Exemple avec une fonction de décomposition de chaîne en tableau.
La fonction stringTab() renvoie bien un tableau.
Option Explicit
Type typTabResult
items() As String * 1
End Type
Function stringTab(ByVal str) As typTabResult
Dim i As Integer
For i = 1 To Len(str)
ReDim Preserve stringTab.items(i)
stringTab.items(i) = Mid(str, i, 1)
Next i
End Function
Function TestTab()
Dim monTab As typTabResult
Dim i As Integer
monTab = stringTab("Hello World !")
For i = 1 To UBound(monTab.items)
Debug.Print i, monTab.items(i)
Next i
End Function
Pour faire l'équivalent du clic droit --> insérer objet
LeContrôleOLE.SetFocus
Docmd.RunCommand acCmdInsertObject
Pour éviter l'erreur si l'utilisateur sélectionne le bouton Annuler il faut mettre
une gestion d'erreur.
Voir on error dans l'aide.
Le plus simple mais pas le meilleur, annuler tous les messages d'erreur :
On error resume next
LeContrôleOLE.SetFocus
Docmd.RunCommand acCmdInsertObject
Sinon utilisez on error goto pour renvoyer les erreurs vers
une étiquette et les traiter en fonction de la valeur de Err.Number.
Pour afficher le clavier virtuel, tapez osk dans Exécuter du menu Démarrer.
Pour réaliser la même chose en VBA, voici le code :
Ce code permet d'afficher le clavier virtuel sur un clic droit dans une zone de texte :
Private Sub LaTextBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.ShortcutMenu = False
If Button = acRightButton Then
Shell "osk.exe"
End If
End SubCe code ne fonctionne pas sous Access 2007, pour réaliser la même chose avec la version 2007 il vous faut utiliser les API :
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub LaTextBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.ShortcutMenu = False
If Button = acRightButton Then
ShellExecute Me.hwnd, "open", "osk.exe", "", "", 1
End If
End SubLien : Comment ouvrir un fichier HTML, Word, PDF ou autre en utilisant l'exécutable associé ?
Lien : Que faire quand l'API ShellExecute ne fonctionne pas ?



