OVH Cloud OVH Cloud

Nom disque (suite)

2 réponses
Avatar
AlainGG
Bonjour à toutes et à tous,
Alain Cros ayant déjà fourni une proc qui fonctionne bien, mais je
souhaiterai un complément : si le disque C n'a pas de nom (l'explorateur de
Windows indique "disque local"), la proc renvoie "Erreur", comme quand un
disque n'existe pas. Comment faire la différence entre un disque inexistant
(pour lequel le message pourrait être "Disque inaccessible") et un disque
sans nom (pour lequel la macro afficherait "Ce disque n'a pas de nom") ? Dans
les 2 cas l'erreur a le numéro 0...
Merci d'avance pour toutes les suggestions de solutions.
Amicalement.
Alain

2 réponses

Avatar
Alain CROS
Bonjour.

Private Declare Function GetVolumeInformation& _
Lib "Kernel32" Alias "GetVolumeInformationA" _
(ByVal lpRootPathName$, ByVal lpVolumeNameBuffer$, _
ByVal nVolumeNameSize&, ByRef lpVolumeSerialNumber&, _
ByRef lpMaximumComponentLength&, ByRef lpFileSystemFlags&, _
ByVal lpFileSystemNameBuffer$, ByVal nFileSystemNameSize&)

Sub Test()
Dim LeNom$, Msg$
Select Case RecupNom("C:", LeNom)
Case 0&
Msg = "Erreur"
Case 1&
Msg = "Le disque n'a pas de nom"
Case Else
Msg = LeNom
End Select
MsgBox Msg, vbInformation, "Merci MPFE"
End Sub

Function RecupNom&(Lecteur$, NomVolume$)
Dim I&
I = 30&
NomVolume = String$(I, vbNullChar)
If GetVolumeInformation(Lecteur, NomVolume, I, _
0&, 0&, 0&, vbNullString, 0&) Then
NomVolume = Left$(NomVolume, InStr(NomVolume, vbNullChar) - 1&)
If Len(NomVolume) > 0& Then
RecupNom = 2&
Else
RecupNom = 1&
End If
End If
End Function

Alain CROS

"AlainGG" a écrit dans le message de news:
Bonjour à toutes et à tous,
Alain Cros ayant déjà fourni une proc qui fonctionne bien, mais je
souhaiterai un complément : si le disque C n'a pas de nom (l'explorateur de
Windows indique "disque local"), la proc renvoie "Erreur", comme quand un
disque n'existe pas. Comment faire la différence entre un disque inexistant
(pour lequel le message pourrait être "Disque inaccessible") et un disque
sans nom (pour lequel la macro afficherait "Ce disque n'a pas de nom") ? Dans
les 2 cas l'erreur a le numéro 0...
Merci d'avance pour toutes les suggestions de solutions.
Amicalement.
Alain


Avatar
AlainGG
Merci Alain, très pro ! et par voie de conséquence, merci MPFE !

AlainGG

"Alain CROS" wrote:

Bonjour.

Private Declare Function GetVolumeInformation& _
Lib "Kernel32" Alias "GetVolumeInformationA" _
(ByVal lpRootPathName$, ByVal lpVolumeNameBuffer$, _
ByVal nVolumeNameSize&, ByRef lpVolumeSerialNumber&, _
ByRef lpMaximumComponentLength&, ByRef lpFileSystemFlags&, _
ByVal lpFileSystemNameBuffer$, ByVal nFileSystemNameSize&)

Sub Test()
Dim LeNom$, Msg$
Select Case RecupNom("C:", LeNom)
Case 0&
Msg = "Erreur"
Case 1&
Msg = "Le disque n'a pas de nom"
Case Else
Msg = LeNom
End Select
MsgBox Msg, vbInformation, "Merci MPFE"
End Sub

Function RecupNom&(Lecteur$, NomVolume$)
Dim I&
I = 30&
NomVolume = String$(I, vbNullChar)
If GetVolumeInformation(Lecteur, NomVolume, I, _
0&, 0&, 0&, vbNullString, 0&) Then
NomVolume = Left$(NomVolume, InStr(NomVolume, vbNullChar) - 1&)
If Len(NomVolume) > 0& Then
RecupNom = 2&
Else
RecupNom = 1&
End If
End If
End Function

Alain CROS

"AlainGG" a écrit dans le message de news:
Bonjour à toutes et à tous,
Alain Cros ayant déjà fourni une proc qui fonctionne bien, mais je
souhaiterai un complément : si le disque C n'a pas de nom (l'explorateur de
Windows indique "disque local"), la proc renvoie "Erreur", comme quand un
disque n'existe pas. Comment faire la différence entre un disque inexistant
(pour lequel le message pourrait être "Disque inaccessible") et un disque
sans nom (pour lequel la macro afficherait "Ce disque n'a pas de nom") ? Dans
les 2 cas l'erreur a le numéro 0...
Merci d'avance pour toutes les suggestions de solutions.
Amicalement.
Alain