IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Convertir nom long au format DOS (8.3)


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développement VBA
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développement VBA

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 38
    Points
    38
    Par défaut Convertir nom long au format DOS (8.3)
    Bonjour,

    Pour cela j'utilise la fonction GetShortPath trouvée sur le Web.

    Si j'indique mon chemin en dur dans la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetShortPath ("D:\Archives\Archioutilvalid\8607\8607 0466")
    cela fonctionne.

    Maintenant je veux utiliser deux variables (nf1 et nf3) pour le chemin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FF="D:\Archives\Archioutilvalid\" & nf1 & "\" & nf3 ' nf1 et nf3 sont des variables
    La variable FF me restitue bien le chemin complet que je vérifie avec Debug.Print (D:\Archives\Archioutilvalid\8607\8607 0466)
    mais quand je lance :
    Le chemin au format 8.3 n'est pas restitué, il est vide.
    J'ai essayé toutes sortes de combinaisons de syntaxe pour passer la variable FF en argument reconnu mais je ne trouve pas de solution.
    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je viens de faire un test avec "GetShortPathName" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Private Declare Function GetShortPathName _
                    Lib "kernel32" _
                    Alias "GetShortPathNameA" ( _
                    ByVal longPath As String, _
                    ByVal shortPath As String, _
                    ByVal shortBufferSize As Long) As Long
     
    Sub Test()
     
        Dim Chemin As String
        Dim CheminDos As String
        Dim Retour As Long
        Dim Chaine1 As String
        Dim Chaine2 As String
        Dim Chaine3 As String
        Dim Chaine4 As String
        Dim Chaine5 As String
     
        Chaine1 = "G:"
        Chaine2 = "Programmation VB"
        Chaine3 = "Diagramme Solaire"
        Chaine4 = "bin"
        Chaine5 = "Debug"
     
        Chemin = Chaine1 & "\" & Chaine2 & "\" & Chaine3 & "\" & Chaine3 & "\" & Chaine4 & "\" & Chaine5
     
        CheminDos = Space(Len(Chemin))
     
        Retour = GetShortPathName(Chemin, CheminDos, Len(Chemin))
     
        Debug.Print Trim(CheminDos)
     
        'retourne --> G:\PROGRA~1\DIAGRA~1\DIAGRA~1\bin\Debug
     
    End Sub
    J'ai découpé mon chemin en 5 chaînes et la valeur retournée est : G:\PROGRA~1\DIAGRA~1\DIAGRA~1\bin\Debug. On voit bien qu'une variable est répétée deux fois car le sous dossier possède le même nom que le dossier parent (Chaine3) et je pense que tu as oublié de répéter le nom du dossier mais comme je ne connais pas les valeurs de tes variables ?
    Je verrai bien ton code comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Sub Test()
     
        Dim Chemin As String
        Dim CheminDos As String
        Dim Retour As Long
        Dim Chaine1 As String
        Dim Chaine2 As String
        Dim Chaine3 As String
     
        '"D:\Archives\Archioutilvalid\8607\8607 0466"
        Chaine1 = "D:\Archives\Archioutilvalid"
        Chaine2 = "8607"
        Chaine3 = " 0466"
     
        Chemin = Chaine1 & "\" & Chaine2 & "\" & Chaine2 & Chaine3
     
        CheminDos = Space(Len(Chemin))
     
        Retour = GetShortPathName(Chemin, CheminDos, Len(Chemin))
     
        Debug.Print Trim(CheminDos)
     
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Bonjour,

    ou bien utiliser directement FSO comme dans DocOpen la ligne n°4 …



    ______________________________________________________________________________________________________
    Je suis Paris, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développement VBA
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développement VBA

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 38
    Points
    38
    Par défaut Convertir nom long au format DOS (8.3)
    Bonjour,

    Bizarre car chez moi rien ne fonctionne.
    Debug.Print Trim(CheminDos) me retourne RIEN

Discussions similaires

  1. Invite "DOS" : comment écrire les noms longs
    Par Floris dans le forum Windows Vista
    Réponses: 1
    Dernier message: 19/03/2008, 14h36
  2. [ODI] convertir un nom de fichier en dos
    Par laTayour dans le forum Alimentation
    Réponses: 0
    Dernier message: 16/01/2008, 15h10
  3. Convertir un nom long de répertoire
    Par Mickey974 dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 12/08/2007, 18h33
  4. [C# 1.1] Comment convertir Path complexe au Format DOS ?
    Par elsargento dans le forum Contribuez
    Réponses: 2
    Dernier message: 23/01/2006, 16h36
  5. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo