Microsoft Office 10.0 Object Library

Résolu
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 29 déc. 2006 à 16:47
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 5 janv. 2007 à 09:28
Bonjour,

Petite question.
J'ai développé une petite appli sous EXCEL 2003 utilisant entre autre un FileDialog, appli qui fonctionne très bien.

Mon soucis, quand j'ouvre le classeur avec EXCEL 2000, mon bout de code ne fonctionne plus, le FileDialog n'est pas reconnu.

Après une courte recherche sur le net, il semblerait que les FileDialog soient inclus dans Microsoft Office 10.0 Object Library.Or, sur le poste avec Excel 2000, je n'ai que la version 9.0

Y'a t'il moyen de récupérer juste la .dll correspondant (la télécharger sur le net, le site de MicroSoft par ex ?) pour que mon appli fonctionne ? Ou je vais devoir passer par une installation d'Excel 2003 ce qui ne m'arrangerait pas du tout.
S'il est possible de la récupérer : quel peut bien être son nom, à cette .dll : MSO10.dll ?

D'avance merci,

Molenn
A voir également:

9 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 déc. 2006 à 22:59
En utilisant les APIs suivantes, tu devrais pouvoir y arriver

'Dans un module
Option Explicit

Public Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type

Public Const BIF_RETURNONLYFSDIRS   As Long = 1
Public Const BIF_DONTGOBELOWDOMAIN  As Long = 2
Public Const BIF_STATUSTEXT         As Long = 4
Public Const BIF_RETURNFSANCESTORS  As Long = 8
Public Const BIF_BROWSEFORCOMPUTER  As Long = &H1000 ' 0x1000
Public Const BIF_BROWSEFORPRINTER   As Long = &H2000 ' 0x2000
Public Const BIF_BROWSEINCLUDEFILES As Long = &H4000 ' 0x4000
Public Const MAX_PATH               As Long = 260

'Déclaration api pour rechercher le répertoire racine
Public Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
                                                           ByVal lpBuffer As String) As Long
Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
                                                                 ByVal lpString2 As String) As Long
Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)

Public Function GetFolder(Optional Title As String = "") As String
    Dim iNull As Integer
    Dim lpIDList As Long
    Dim lResult As Long
    Dim sPath As String
    Dim udtBI As BrowseInfo

    GetFolder = ""
    With udtBI
        .lpszTitle = lstrcat(Title, "")
        .ulFlags = BIF_RETURNONLYFSDIRS
    End With

    lpIDList = SHBrowseForFolder(udtBI)
    If lpIDList > 0 Then
        sPath = String$(MAX_PATH, 0)
        SHGetPathFromIDList lpIDList, sPath
        CoTaskMemFree lpIDList
        iNull = InStr(sPath, vbNullChar)
        If iNull Then
            sPath = Left$(sPath, iNull - 1)
        End If
        GetFolder = sPath
    End If

End Function

'Et pour l'appeler
Private Sub BtnRep_Click()
    Dim FolderName As String
   
    FolderName = GetFolder("Veuillez sélectionner le dossier source" & vbCrLf & _
                           "contenant les fichiers")

End Sub

MPi
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
29 déc. 2006 à 17:07
Je n'ai pas VBA mais je crois deviner que ton composant FileDialog fait ce que fait un composant CommonDialog, que tu pourrais utiliser à la place de FileDialog, donc ...

Il t'est également possible de t'affranchir de tout composant (je les évite chaque fois que possible en ce qui me concerne) et d'utliser directement les fonctions de l'API de Windows (ce qui rendra ton appli bien plus indépendante et portable).
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
29 déc. 2006 à 17:12
Va voir comment je me sers des fonctions GetOpenFileName et GetSaveFileName dans le module2.bas de ce lien :

http://www.vbfrance.com/codes/DELIRES-PEINTRE_40738.aspx

et tu n'auras plus besoin ni du composant FileDialog ni du composant Commondialog.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
29 déc. 2006 à 17:13
Le CommonDialog n'est pas utilisable pour ce que je veux faire ... En effet, il n'offre pas l'option FolderPicker. C'est pour ça que je suis parti dans Excel en fait parce que je n'avais pas envie de m'embêter et je savais que ça fonctionnait. Sauf que je n'ai pas la bonne version chez moi (j'ai fait ça un midi sur mon poste au boulot ).

Le CommonDialog permet de sélectionner des fichiers, mais pas des répertoires.
J'y viendrai si j'ai pas le choix, mis je préfèrerai éviter ^^

Merci tout de même.

Molenn
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
29 déc. 2006 à 17:32
Ah ! un répertoire ...

OK !

Si VBA a des contrôles DirlistBox et DriveListBox, tu peux alors les utiliser ainsi

un contrôle DirListBox nommé Dir1 et un contrôle DriveListBox nommé Drive1

et :

Private Sub Dir1_Click()
  MsgBox Dir1.List(ListIndex) '=====>>> chemin du répertoire cliqué
End Sub


Private Sub Drive1_Change()
  Dir1.Path = Drive1.Drive
End Sub
0
michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
29 déc. 2006 à 19:17
bonsoir Molenn, bonsoir cher jmfmarques




L'exemple proposé dans ce lien fonctionne aussi en VBA



http://www.vbfrance.com/infomsg_EXPLORATEUR-WINDOWS_13527.aspx




tu dois juste à remplacer



.hWndOwner = Me.Hwnd


par



.hWndOwner = 0


 


bon week end
michel
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
29 déc. 2006 à 19:24
Bonsoir cher Michel,

Merci pour ce lien intéressant et merci également pour être ici.

Jacques
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
29 déc. 2006 à 22:18
Re bonsoir,

étant en fin d'année encore plus cinglé que de coutime, j'ai voulu m'amuser à créer un vrai et un faux double-click

Il fallait en effet permettre à la fois de "dérouler" les dossiers dans dir1 (et il faut 2 clicks !!!) et d'avoir un double ckick "particulier" pour sélectionner un dossier !!!!!

Hostoire de fou ! donc pour moi !

alors voilà :

2 clicks "normaix", espacés de plus de 1/3 de seconde... et çà déroule
2 clicks très rapprochés... et çà choisit

code de cinglé :

Private Sub Drive1_Change()
  Dir1.Path = Drive1.Drive
End Sub


Private Sub Dir1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Const stopclic As Single = 0.3
  Static coucou As Single
  DoEvents
  If Abs(Timer - coucou) < stopclic Then 'And toto Then
    coucou = Timer - stopclic
    MsgBox Dir1.List(Dir1.ListIndex)
  Else
    coucou = Timer
  End If
End Sub


Private Sub Form_Load()
  toto = Timer
End Sub


 






 
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
5 janv. 2007 à 09:28
Hop là,
on ne devrait pas prendre de vacances, je n'ai pas pu passer plus tôt ^^

J'ai testé en premier la méthode de MPi et ça fonctionne nickel. J'ai fouillé un peu le net sur cette API et j'ai trouvé les options qui me manquaient sauf une. Pas de bol décidément, mais j'ai cru comprendre (mon anglais n'étant pas de première qualité) qu'en fait, ce que je voulais faire n'était pas possible :

On ne peut pas faire ouvrir la zone de sélection sur un chemin pré-défini. Je suis obligé de me refaire toute l'arborescence à chaque fois que j'ouvre la boite de sélection. Mais autrement, tout marche très bien, donc ... Merci !!!


Molenn

Pour ma culture personnelle, je vais récupérer sur mon poste au boulot la .dll MSO.dll sur mon poste au boulot et tenter de l'installer sur mon pc, pour voir si je peux utiliser tout de même les FileDialog avec un Excel 2000. Si ça fonctionne, je vous tiendrai au courant ^^
0
Rejoignez-nous