Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trouver "Mes Documents" : VBA

9 réponses
Avatar
Newbie
Bonjour,

Par programmation VBA je souhaite mettre à jour un fichier Excel dans un
dossier Mes Documents\Toto. Le problème est que Mes Documents peut se
trouver sur C ou sur D selon les machines (cela aurait été trop simple de
les configurer toutes de la même manière :(
Comment peut-on en VBA demander de chercher si Mes Documents est sur C ou D
?

Merci pour votre aide.

Newbie.

9 réponses

Avatar
Daniel
Bonjour.
Essaie :

Sub test1()
Var = Dir("C:documents and settingsTON CHEMINmes documents",
vbDirectory)
If Var <> "" Then
MsgBox "C:"
Else
MsgBox "D:"
End If
End Sub

Cordialement.
Daniel
"Newbie" a écrit dans le message de news:
%
Bonjour,

Par programmation VBA je souhaite mettre à jour un fichier Excel dans un
dossier Mes DocumentsToto. Le problème est que Mes Documents peut se
trouver sur C ou sur D selon les machines (cela aurait été trop simple de
les configurer toutes de la même manière :(
Comment peut-on en VBA demander de chercher si Mes Documents est sur C ou
D
?

Merci pour votre aide.

Newbie.




Avatar
Elliac
Bonjour,

Sub Toto()
On Error Resume Next
Workbooks.Open "c:Mes DocumentsToto.XLS"
Workbooks.Open "d:Mes DocumentsToto.XLS"
End Sub


Bonjour,

Par programmation VBA je souhaite mettre à jour un fichier Excel dans un
dossier Mes DocumentsToto. Le problème est que Mes Documents peut se
trouver sur C ou sur D selon les machines (cela aurait été trop simple de
les configurer toutes de la même manière :(
Comment peut-on en VBA demander de chercher si Mes Documents est sur C ou D
?

Merci pour votre aide.

Newbie.





Avatar
papou
Bonjour
Dim fso, f
Set fso = CreateObject("WScript.Shell")
MsgBox Left(fso.SpecialFolders("MyDocuments"), 2)

Cordialement
Pascal
Avatar
papou
Re
Ou sur une seule ligne :
MsgBox Left(CreateObject("WScript.Shell").SpecialFolders("MyDocuments"), 2)

Cordialement
Pascal
Avatar
Jacques93
Bonjour Newbie,

Une manière simple et courte est d'utiliser la variable d'environnement
"USERPROFILE" :

MsgBox Environ("USERPROFILE") & "Mes Documents"

Une manière plus longue, mais plus complète (bien qu'on ne soit pas
obligé de déclarer toutes les CSIDL_VALUE, "Mes Documents" correspond à
CSIDL_PERSONAL) :

Private Enum CSIDL_VALUES
CSIDL_DESKTOP = &H0
CSIDL_INTERNET = &H1
CSIDL_PROGRAMS = &H2
CSIDL_CONTROLS = &H3
CSIDL_PRINTERS = &H4
CSIDL_PERSONAL = &H5
CSIDL_FAVORITES = &H6
CSIDL_STARTUP = &H7
CSIDL_RECENT = &H8
CSIDL_SENDTO = &H9
CSIDL_BITBUCKET = &HA
CSIDL_STARTMENU = &HB
CSIDL_MYDOCUMENTS = &HC
CSIDL_MYMUSIC = &HD
CSIDL_MYVIDEO = &HE
CSIDL_DESKTOPDIRECTORY = &H10
CSIDL_DRIVES = &H11
CSIDL_NETWORK = &H12
CSIDL_NETHOOD = &H13
CSIDL_FONTS = &H14
CSIDL_TEMPLATES = &H15
CSIDL_COMMON_STARTMENU = &H16
CSIDL_COMMON_PROGRAMS = &H17
CSIDL_COMMON_STARTUP = &H18
CSIDL_COMMON_DESKTOPDIRECTORY = &H19
CSIDL_APPDATA = &H1A
CSIDL_PRINTHOOD = &H1B
CSIDL_LOCAL_APPDATA = &H1C
CSIDL_ALTSTARTUP = &H1D
CSIDL_COMMON_ALTSTARTUP = &H1E
CSIDL_COMMON_FAVORITES = &H1F
CSIDL_INTERNET_CACHE = &H20
CSIDL_COOKIES = &H21
CSIDL_HISTORY = &H22
CSIDL_COMMON_APPDATA = &H23
CSIDL_WINDOWS = &H24
CSIDL_SYSTEM = &H25
CSIDL_PROGRAM_FILES = &H26
CSIDL_MYPICTURES = &H27
CSIDL_PROFILE = &H28
CSIDL_SYSTEMX86 = &H29
CSIDL_PROGRAM_FILESX86 = &H2A
CSIDL_PROGRAM_FILES_COMMON = &H2B
CSIDL_PROGRAM_FILES_COMMONX86 = &H2C
CSIDL_COMMON_TEMPLATES = &H2D
CSIDL_COMMON_DOCUMENTS = &H2E
CSIDL_COMMON_ADMINTOOLS = &H2F
CSIDL_ADMINTOOLS = &H30
CSIDL_CONNECTIONS = &H31
CSIDL_COMMON_MUSIC = &H35
CSIDL_COMMON_PICTURES = &H36
CSIDL_COMMON_VIDEO = &H37
CSIDL_RESOURCES = &H38
CSIDL_RESOURCES_LOCALIZED = &H39
CSIDL_COMMON_OEM_LINKS = &H3A
CSIDL_CDBURN_AREA = &H3B
CSIDL_COMPUTERSNEARME = &H3D
CSIDL_FLAG_PER_USER_INIT = &H800
CSIDL_FLAG_NO_ALIAS = &H1000
CSIDL_FLAG_DONT_VERIFY = &H4000
CSIDL_FLAG_CREATE = &H8000
CSIDL_FLAG_MASK = &HFF00
End Enum

Private Const SHGFP_TYPE_CURRENT = &H0
Private Const SHGFP_TYPE_DEFAULT = &H1

Private Const MAX_LENGTH = 260

Private Declare Function SHGetFolderPath Lib "shfolder.dll" _
Alias "SHGetFolderPathA" _
(ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
ByVal hToken As Long, _
ByVal dwReserved As Long, _
ByVal lpszPath As String) As Long

Private Sub CommandButton1_Click()
Dim s As String

s = Space(MAX_LENGTH)
If SHGetFolderPath(0&, CSIDL_PERSONAL, -1, SHGFP_TYPE_CURRENT, s) =
0
Then
s = Left(s, InStr(s, Chr$(0)) - 1)
MsgBox s
End If
End Sub


OK sous 2000/XP, non testé sous W9x

Bonjour,

Par programmation VBA je souhaite mettre à jour un fichier Excel dans un
dossier Mes DocumentsToto. Le problème est que Mes Documents peut se
trouver sur C ou sur D selon les machines (cela aurait été trop simple de
les configurer toutes de la même manière :(
Comment peut-on en VBA demander de chercher si Mes Documents est sur C ou D
?



--
Cordialement,

Jacques.

Avatar
Newbie
Simple et efficace !
Merci Pascal!

"papou" <cestpasbon@çanonplus> a écrit dans le message de
news:
Re
Ou sur une seule ligne :
MsgBox Left(CreateObject("WScript.Shell").SpecialFolders("MyDocuments"),
2)


Cordialement
Pascal




Avatar
Newbie
Merci Jacques,
Je vais travailler celà!
Avatar
Newbie
Rebonsoir,

Environ("USERPROFILE") & "Mes Documents"

me dit que le dossier Mes documents est sur C:, mais en fait sur mon PC il
est sur D:
;-(
Avatar
Jacques93
Bonjour Newbie,

Tu dois avoir un problème avec tes variables d'environnement,
USERPROFILE correspond à la clé du registre :

ProfileImagePath

(de type REG_EXPAND_SZ) et est égale à :

%SystemDrive%Documents and Settings<Nom d'utilisateur>

dans la branche :

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows
NTCurrentVersionProfileList<SID>

Il y a un certain nombre de clé de type REG_EXPAND_SZ qui font référence
à %USERPROFILE% (qui elle même fait référence à %SystemDrive%)

Tu dois donc travailler parfois sur C: et parfois sur D:


Rebonsoir,

Environ("USERPROFILE") & "Mes Documents"

me dit que le dossier Mes documents est sur C:, mais en fait sur mon PC il
est sur D:
;-(






--
Cordialement,

Jacques.