Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMMONDIALOG POUR SÉLECTIONNER UN RÉPERTOIRE ( OCX )


Information sur la source

Description

Vous avez toujours rêvé de pouvoir sélectionner un répertoire grâce à l'objet CommonDialog ? Et celui-ci ne le permet pas !
He bien , voilà le problême résolu ...
getFolder est un ocx qui permet de sélectionner n'importe quel répertoire sur votre ordinateur...
Livré avec le source et un exemple ...
 

Conclusion

Si vous améliorez ce code , merci de me prévenir sur Codes-Sources
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de ScSami le 09/01/2006 18:37:20

Je l'ai pas encore testé mais faut bien le dire... fallait le faire!
Merci.

signaler à un administrateur
Commentaire de ScSami le 09/01/2006 18:47:27

Enfin moi, je serais toi, je ne mettrais pas un titre pareil à ma source parce qu'on croit vraiment que c'est encore un newbie qui a découvert CommonDialog !!!

signaler à un administrateur
Commentaire de bouv le 09/01/2006 20:07:59

Je connaissais déjà cette API. Mais c'est toujours bon a rappeler.

Cependant, je pense que l'utilisation d'un controle utilisateur n'a pas d'interet ici (le module se suffit en lui même).
Tu met la fonction GetFolder  (en public) dans le module et toutes les autres en privées...
Cela évite de se trimbaler une OCX de plus (ou controle utilisateur).

Bonne prog
++

signaler à un administrateur
Commentaire de nico1610 le 09/01/2006 20:42:45

Bien mais manque un peut d'option pour faire un vrai OCX (Gestion des erreurs(quand tu clic sur Cancel) ... )
Comme dit Bouv il n'y a aucun interet de creer un Ocx si on peut le faire avec un module !!

Je met aucune note, mais bien sur l'API et la création d'un OCX

signaler à un administrateur
Commentaire de nico1610 le 09/01/2006 22:25:09

Tiens viens ici pour voir ce que tu pouvait ajouter au moins pour faire un OCX!!

http://www.vbfrance.com/code.aspx?ID=35485

signaler à un administrateur
Commentaire de ScSami le 10/01/2006 03:06:41

Tient, je la connaissait pas celle-là!
OCX, module de class, module de code... wai, perso, je préfère les OCX s'ils sont bien codé (prise en charge des erreurs). Mais bon, chacun code comme il aime!

signaler à un administrateur
Commentaire de nico1610 le 10/01/2006 07:46:31

l'OCX que je parle ici (http://www.vbfrance.com/code.aspx?ID=35485) c'est le tiens corsica que j'ai reprit et fait une gestion des erreurs des plus simples, nom du selecteur de dossier personalisable.
Tous ca sans commentaire !! Oups !!
Je vais la modifié pour y mettre des commentaire !!

signaler à un administrateur
Commentaire de Renfield le 10/01/2006 10:03:08 administrateur CS

dans BrowseForFolderCallBackFunc, le Select Case est inutile :
    If uMsg = BFFM_INITIALIZED Then
      SendMessage hwnd, BFFM_SETSELECTIONA, 1, ByVal BFFInitialPath
    End If
suffit. Le test sur la longueur de BFFInitialPath a été reporté là :
        If LenB(BFFInitialPath) > 0 Then
            .lpfnCallback = GetAddress(AddressOf BrowseForFolderCallBackFunc)
        End If

  
dans ShowBrowseForFolderDlg,
.lpszTitle = lstrcat(Msg, "")

est faux, regarde le libellé, au dessus de ton TreeView, la chaine ne comprend qu'un caractère...
il faudrait :

.lpszTitle = StrPtr(StrConv(Msg, vbFromUnicode))


de même, si l'on presse Annuler, le chemin est vide... ca devrait conserver le chemin originel.
je rejoins ScSami : un OCX est inutile ici

petit détail,
il vaut mieux favoriser :
    sPath = Space$(MAX_PATH)
que
    sPath = String$(MAX_PATH, 0)


en ajoutant le flag BIF_NEWDIALOGSTYLE dans BrowseInfo, tu pourra redimensionner la fenetre, et tu aura un bouton "nouveau dossier"


pour conclure, j'indique une simple alternative :
Public Function BrowseAndCreate(Title As String) As String
     Dim Shell As Variant, Folder As Variant
     Set Shell = CreateObject("Shell.Application")
     Set Folder = Shell.BrowseForFolder(hWnd, Title, 0, "")
     BrowseAndCreate = Folder.items.Item.Path
End Function

cette fonction est plutot destinée au VBS, mais fonctionne aussi sous VB, bien que je ne la préconise pas (en partie a cause du non typage des données, et du Late-Binding)

signaler à un administrateur
Commentaire de corsica le 10/01/2006 10:16:19

Merci pour vos remarques , j'en prends bonne note , je bosse sur la version améliorée :-)
Renfield , ta fonction BrowseAndCreate marche à merveille mais ne permet pas de choisir un répertoire de démarrage. On pourra tout au plus spécifier un rootFolder différent de Desktop et ainsi restreindre le parcour de l'arborescence de fichiers.
Mais effectivement c'est quand même diablement plus court que ce que je propose !

signaler à un administrateur
Commentaire de BruNews le 10/01/2006 10:27:10 administrateur CS

Très court ici aussi et parfaitement typé:
http://www.vbfrance.com/code.aspx?id=18494

Sub ChoisitDossier()
Dim strDir As String, sTitle As String
sTitle = "Dossier depuis Excel"
strDir = "D:\bosser"
If bnSelectDir(sTitle, strDir) Then Debug.Print strDir
End Sub

signaler à un administrateur
Commentaire de ScSami le 10/01/2006 12:33:38

(Nota Renfield que c'est plutôt Bouv qui disait ça ;-)
Dit moi Renfield... pardonne moi cette question de "débutant" mais pourquoi tu déclare Folder en Variant plutôt qu'en Objet ??? Ne serait-ce pas mieux typé ainsi ?
Pi dit, c'est toi qui aurait du faire cette source puisque tu métrise tellement ces APIs !!! Franchement, si tu nous faisais un OCX ou une classe, je l'utiliserais les yeux fermés (et je ne crois pas être le seul!!!) !

Bru, bon, d'accord, mais c'est en utilisant ta DLL !!! J'ai donc une question qui me brule les lèvres : pourquoi as-tu codé (1515 lignes en ASM si j'ai bien tout compris...) cette DLL puisqu'il existe des APIs ???
Défi personnel ou réel utilité (comblage d'un trou quelconque - lequel ?) ?

signaler à un administrateur
Commentaire de Renfield le 10/01/2006 12:55:08 administrateur CS

oui, As Object... a ce niveau, ca ne changerai pas grand chose.
Cette fonction, etant déstinée à VBS, CreateObject est utilisé, et ces variables sont juste déclarées pour valider le 'Option Explicit'.

touché par cette considération pour mon travail

la Dll de BruNews apporte du tout en un, et facilite l'integration de telles fonctions, pour les utilisateurs de VB / VBA.... Les APIs, sont là, mais il faut bien souvent un brin de code autour, pour les 'wrapper' dans des fonction VB utilisables tel quel...

signaler à un administrateur
Commentaire de ScSami le 10/01/2006 15:03:27

merci pour ces quelques précision :D

signaler à un administrateur
Commentaire de bouv le 10/01/2006 17:31:41

Renfield>>2 questions
1°-Quel valeur doit-on attribuer à BIF_NEWDIALOGSTYLE.
2°-Qu'est ce que le Late-Binding.

signaler à un administrateur
Commentaire de Renfield le 10/01/2006 17:41:16 administrateur CS

Const BIF_NEWDIALOGSTYLE As Long = &H40

le Late Binding, en gros, c'est le fait de définir en cours d'execution le type d'objet que l'on manipule... (ca n'est pas fait à la compilation)...

signaler à un administrateur
Commentaire de bouv le 10/01/2006 18:13:30

Ok merci pour l'info, maintenant que tu le dis il me semble que j'en avais entendu parlé (par toi :-)) ailleurs sur le site.

signaler à un administrateur
Commentaire de ScSami le 10/01/2006 18:19:20

Oui, la MSDN parle de liaison tardive ou précoce - enfin, je crois que c'est ces termes...

signaler à un administrateur
Commentaire de Renfield le 11/01/2006 00:46:23 administrateur CS

il s'agit bien de cela

signaler à un administrateur
Commentaire de facknrask le 21/12/2006 18:40:09

y a plus simple !!!!

Function ChoixDossierFichier(Racine, Optional SelType As Byte = 0)
Dim objShell, objFolder, chemin, SecuriteSlash, FlagChoix&, Msg$

            If SelType = 0 Then
            FlagChoix = &H1&: Msg = "Choisissez votre dossier :"
                        Else
            FlagChoix = &H4000&: Msg = "Choisissez votre fichier :"
            End If
            Set objShell = CreateObject("Shell.Application")
            'le troisième paramètre permet de choisir
            'la sélection d'un dossier ou d'un fichier (0 ou 1)
            'le dernier paramètre permet de choisir le dossier racine
            Set objFolder = objShell.BrowseForFolder(&H0&, Msg, FlagChoix, Racine)
            On Error Resume Next
            chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
          
If objFolder.Title = "Bureau" Then
            chemin = "C:\Windows\Bureau"
            End If
If objFolder.Title = "" Then
            chemin = ""
            End If
            SecuriteSlash = InStr(objFolder.Title, ":")
            If SecuriteSlash > 0 Then
            chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & ""
            End If

ChoixDossierFichier = chemin
End Function

Public Sub testfolder()
aaa = ChoixDossierFichier("d:\")
End Sub

signaler à un administrateur
Commentaire de facknrask le 21/12/2006 18:41:00

trouver sur http://www.supinfo-projects.com/fr/2006/programmer_vba_sous_excel/2/

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Common Dialog (problèmes et alternatives ?) [ par Gil de Goma ] Bonjour !Pour une application Access 2000, j'ai besoin d'interrogerl'utilisateur afin qu'il me fournisse certains fichiers ou(et ça a de l'importance dll ocx dans le même répertoire que l'appli. [ par gilardh ] Bonjour et bonne année 2003.Voici ma question.Je dois installer une application VB sur des postes sans les droits administrateurs.Je ne peux donc pas répertoire actuel avec commondialog [ par bultez ] bonjour à tous,avec le composant CommonDialog,peut-on connaître le répertoire"actuellement visualisé" ?je ne parle pas de .filename qui donnele fichi CommonDialog Box [ par thierrydelepine ] bonjour,Je souhaite via une CommonDialog Box ou tout autre methode sous VB,pouvoir faire une sélection multiple de fichiers et DE REPERTOIRESJ'ai par L' OCX veut connaitre le répertoire courant de la feuille qui le contient [ par doutch ] Bonjour,J'ai un OCX sur une feuille et je voudrais qui celui ci connaisse le répertoire courant de la  feiulle qui le contient. Et je ne veu Créer un dossier sur le répertoire courant [ par Sorlags ] Bonjourd, j'aimerais créer un dossier sur le répertoire courant avec VB, puisque je n'ai pas réussis à le faire avec un batchnom d Sélection d'un répertoire par le user, =commonDialog?? [ par antoine_ferard ] Bonjour,A la manière d'un CommonDialog, j'aimerais permettre à l'utilisateur de sélectionner un répertoire... Comment puis-je faire ? Merci Filesystemobject... problème de permission [ par xyron ] Bonjour,Il y a probablement quelque chose que j'ignore sur le FSO. Le script suivant déplace 2 répertoires d'un répertoire source vers un répertoire CommonDialog et répertoire [ par cuq ] Bonjour,Ets-il possible de sélectionner un répertoire avec le controle CommonDialog . Pour sélectionner un fichier pas de problème Ajouter un commondialog? [ par tienoow ] Bonjour, Je n arrive pas a ajouter l objet commondialog a ma palette d outil pour userform sur vb 6 . Pourtant je l ai activé en passant par la fene


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.