FAQ MS-Access
FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
- 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
If
C'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 cours
Dans 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
Sub
Il suffit d'utiliser la ligne suivante :
DBEngine.Idle
dbRefreshCache
Option
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
Function
Pour 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
Function
Pour 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
Sub
Pour 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
i
Il faut utiliser l'objet VBE :
Application.VBE.MainWindow.Visible
=
False
Public
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
Function
La 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
Sub
Utiliser sous la forme pour désactiver :
ChangerCapsLock apiOff
Ou, 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
Sub
Ce 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
Sub
Lien : 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 ?