Boite de dialog VBA

Résolu
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 8 janv. 2016 à 13:30
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 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.

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 8/01/2016 à 18:10
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.
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
8 janv. 2016 à 18:14
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"
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2016 à 18:26
Que t'affiche très exactement ceci :
 Msgbox DossierSpecial(Dossier.Videos)

placé juste après
 Private Sub cmdO_OpenPathVideos_Click()
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
8 janv. 2016 à 18:47
Le message Box affiche
D:\User\JeanPaul\vidéos

Si tu as one note un lien avec les captures d'écran
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2016 à 19:09
Bien.
et que t'affiche maintenant :
MsgBox "-" & .InitialFileName & "-"

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

0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
8 janv. 2016 à 23:18
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......
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
8 janv. 2016 à 23:45
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/01/2016 à 08:28
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
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
9 janv. 2016 à 10:03
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.
0
Rejoignez-nous