begin process at 2008 07 06 19:37:56
1 205 743 membres
306 nouveaux aujourd'hui
14 119 membres club

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
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

  • 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

Pub



Appels d'offres

WEB DESIGN
Budget : 1 000€
Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS