Boite de dialog VBA [Résolu]

valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 8 janv. 2016 à 13:30 - Dernière réponse : valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention
- 9 janv. 2016 à 10:03
Bonjour tout le monde.
Après un certain temps en sommeil je reviens doucement à la prog.

J'ai une filedialog qui n'en fait qu'a sa tête, elle est paramétrée pour ouvrir le dossier "Windows Vidéos"mais en fait elle ouvre un sous-dossier nommé "Vidéos Lumia". J'ai lu qu'il y avait un bug sous VB. Donc ma question quelqu'un a-t-il réussit à contourner ce problème.
Je suis sous Windows 10 et Office 365

Private Sub cmdO_OpenPathVideos_Click()
Dim fd As FileDialog

Set fd = FileDialog(msoFileDialogFolderPicker)
With fd
    .Filters.Clear
    .AllowMultiSelect = False
    .Title = " Sélectionnez un dossier ..."
    .InitialView = msoFileDialogViewList
    .InitialFileName = AddBackslash(DossierSpecial(Dossier.Videos))           
'Renvoie le dossier special "Windows Vidéos"
'Avec ou sans BackSlash les deux ne fonctionnent pas
'Le chemin renvoyé est "D:\User\JeanPaul\vidéos" ou "D:\User\JeanPaul\vidéos\"
    
        If .Show Then
            txtO_PathVideos.SetFocus
            txtO_PathVideos.Text = .SelectedItems(1)
            SetParam PARAM_PATH_VIDEOS, txtO_PathVideos.Text
        Else
            MsgBox "Commande annulé par l'utilisateur."
        End If
End With

Set fd = Nothing
End Sub

Merci à ceux qui se pencheront sur mon problème.
Afficher la suite 

Votre réponse

9 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 8/01/2016 à 18:10
0
Utile
Bonjour,
Déjà :
Quel est le logiciel d'Office qu'utilise ton appli ?
1) J'ignore personnellement ce que sont :
- ce qui parait être une fonction : AddBackslash
- ce qui parait être une fonction : DossierSpecial
Sont-ce des fonctions natives du logiciel Office que tu utilises ? (je ne les trouve pas)
ou
Sont-ce des fonctions créées dans ton code ? Et voir leur code est alors nécessaire ...
2) qu'est exactement Dossier ? Décris-le ici avec précision et complètement
Dans l'état actuel des choses, il me faudrait une boule de cristal pour y voir clair.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 8 janv. 2016 à 18:14
0
Utile
Bonjour ucfoutu et merci de ton intérêt.
Pour le logiciel c'est Access .

Comme écrite dans les ligne de codes:

AddBackSlash renvoie le non de fichier avec ou sans un BackSlash à la fin.

DossierSpecial renvoie le chemin des dossier spéciaux windows ici en fait il renvoie la chaine "D:\User\JeanPaul\Vidéos" qui est mon dossier vidéos. Ce qui est bon.

Donc je me retrouve avec un:
.InitialFileName = "D:\User\JeanPaul\Vidéos"

ou un
.InitialFileName = "D:\User\JeanPaul\Vidéos\"

Mais aucun ne fonctionne FileDialog s'ouvre dans un sous répertoire donc en fait sous:
"D:\User\JeanPaul\Vidéos\Vidéos Lumia"
Commenter la réponse de valtrase
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 8 janv. 2016 à 18:26
0
Utile
Que t'affiche très exactement ceci :
 Msgbox DossierSpecial(Dossier.Videos)

placé juste après
 Private Sub cmdO_OpenPathVideos_Click()
Commenter la réponse de ucfoutu
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 8 janv. 2016 à 18:47
0
Utile
Le message Box affiche
D:\User\JeanPaul\vidéos

Si tu as one note un lien avec les captures d'écran
Commenter la réponse de valtrase
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 8 janv. 2016 à 19:09
0
Utile
Bien.
et que t'affiche maintenant :
MsgBox "-" & .InitialFileName & "-"

juste après la ligne disant :
.InitialFileName = AddBackslash(DossierSpecial(Dossier.Videos))  

Commenter la réponse de ucfoutu
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 8 janv. 2016 à 23:18
0
Utile
Pareil avec les tirets en plus
-D:\User\JeanPaul\vidéos-

J'ai l'impression qu'il ne digère pas le Vidéos... :(
J'ai testé en dur

"D:\" ------------------------->OK
"D:\User\"-------------------->OK
"D:\User\JeanPaul\"----------->OK
"D:\User\JeanPaul\Vidéos\"----> "D:\User\JeanPaul\Vidéos\Vidéos lumiA 930

Je pense que cela vient de Windows et des dossiers utilisateur....
J'ai testé sur des dossier créés pour l'occasion.

"D:\Temp\Videos\"--------------->OK
"D:\Temp\Videos\Videos\"------->OK
"D:\Temp\Vidéos\" -------------->OK
"D:\Temp\Vidéos\Vidéos tmp\" -->OK

Un autre test sur mes documents.....
"D:\User\JeanPaul\Documents\"
Il ouvre :
"C:\Users\Public\Documents"

PFFFF je vais laisser tomber......
Commenter la réponse de valtrase
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 8 janv. 2016 à 23:45
0
Utile
Bonjour valtrase
Une piste probable sans certitude
Ton souci vient du fait que certains dossiers Users ( ainsi que d'autres) ne sont point accessibles directement
Si tu te mets avec l'Explorateur de Windows et que les fichiers système sont visualisables tu le verras
Sur ta partition Windows essaies avec l'explorateur d'ouvrir le dossier "Documents and Settings" par exemple : l'accès est refusé (remarque la petite flèche dans l’icône de dossier : elle rappelle celle des raccourcis sur le Bureau)
Ces répertoires sont des dossiers spéciaux dont Windows se sert en interne
Le mieux est d'utiliser des dossiers que tu crées toi-même
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 9 janv. 2016 à 08:23
La réponse de VB95, que je salue, est une réponse sage à divers titres.
Il est toujours de très loin préférable d'utiliser un dossier relatif (par rapport à celui de l'application distribuée).
Cela permet en outre de s'affranchir des fonctions utilisées ici (AddBackslash
et DossierSpecial)..
Soit par exemple toto le nom de ce sous-dossier du dossier de l'application ===>>

.......
Set fd = FileDialog(msoFileDialogFolderPicker)
With fd
.Filters.Clear
.AllowMultiSelect = False
.Title = " Sélectionnez un dossier ..."
.InitialView = Application.CurrentProject.Path & "\toto\"
.....

tout simplement.

EDIT : je te suggère cette lecture, valtrase :
https://msdn.microsoft.com/fr-fr/library/office/ff191878.aspx
Commenter la réponse de vb95
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 9 janv. 2016 à 10:03
0
Utile
Merci de vos réponses,
Pour documents and settings je suis d'accord, Windows les gardes pour la compatibilité ascendante, il est donc bloqué comme d'autres depuis le passage à Windows 10.

Mon appli doit tourné sur des machines de pots je dois donc pouvoir "c'est un bien grand mot" me caler sur le dossier vidéos du PC et celui-ci n'est pas protégé (heureusement ).

Ucfoutu, en ce qui concerne la propriété InitialView, elle demande une valeur Long. Mais je pense que c'est un dérapage non voulu et que tu voulais mettre InitialFileName.

Je finalise ce projet de bibliothèque vidéos sur Access en VBA avant de la passer sous VB.Net qui n'est pas je l’avoue encore ma tasse de thé. Et je dois donc connaitre le répertoire vidéos, mais je pinaille bien entendu car une fois définie la première fois le chemin est sauvegardé dans une table de paramètres. J'aime bien savoir le pourquoi des choses ...... :)

Je vais donc marquer ce post résolu même s'il ne l'est pas car à mon humble avis c'est ma machine et Windows 10 qui fait des siennes, car les deux fonctions AddBackSlash et DossiersSpecial fonctionnent très bien et renvoient bien une valeur string du chemin. De plus d’après mes test dés que je mets le chemin (en dur) d'un dossier "User" ça fait n'importe quoi......

Merci encore de vos commentaires.
Commenter la réponse de valtrase

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.