Microsoft Office 10.0 Object Library [Résolu]

Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 29 déc. 2006 à 16:47 - Dernière réponse : Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention
- 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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_MPi 3875 Messages postés mardi 19 mars 2002Date d'inscription 17 août 2018 Dernière intervention - 29 déc. 2006 à 22:59
3
Merci
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

Merci cs_MPi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de cs_MPi
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 29 déc. 2006 à 17:07
0
Merci
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).
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 29 déc. 2006 à 17:12
0
Merci
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.
Commenter la réponse de jmfmarques
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 29 déc. 2006 à 17:13
0
Merci
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
Commenter la réponse de Molenn
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 29 déc. 2006 à 17:32
0
Merci
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
Commenter la réponse de jmfmarques
michelxld 402 Messages postés vendredi 6 août 2004Date d'inscription 12 octobre 2008 Dernière intervention - 29 déc. 2006 à 19:17
0
Merci
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
Commenter la réponse de michelxld
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 29 déc. 2006 à 19:24
0
Merci
Bonsoir cher Michel,

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

Jacques
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 29 déc. 2006 à 22:18
0
Merci
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


 






 
Commenter la réponse de jmfmarques
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 5 janv. 2007 à 09:28
0
Merci
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 ^^
Commenter la réponse de Molenn

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.