Quelle bibliothéque à cocher??

Résolu
moony01 Messages postés 21 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 27 mars 2007 - 14 janv. 2005 à 12:11
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012 - 19 janv. 2005 à 13:01
Bonjour

Je travaille sous access 2000 et quand je compile ce code, ca donne le message suivant : "Type défini par l'utilisateur non défini" dans la ligne "Dim Fd As FileDialog"

Dim Fd As FileDialog
Set Fd = Application.FileDialog(msoFileDialogOpen)
With Fd
.AllowMultiSelect = False ' multisélection interdite
If .Show = -1 Then
path= .SelectedItems(1)' mémorisation du fichier sélectionné
Else
Exit Sub
End If
End With
Set Fd = Nothing

Quelle "bibliothèque" je dois cocher dans "Outils / Références" ?

N.B : J'ai coché la bibliothèque "Microsoft Office 9.0 Object Library" , tjrs le même message

Merci d'avance

27 réponses

madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
18 janv. 2005 à 13:19
Je viens de revérifier le set sur 2 env différents

Sur mon poste sans la office 10 je ne peux pas pas utiliset la methode set !

On peut vérifier facilement par l'explorateur d'objet : si tu ne peux
pas remonter à la classe source de filedialogue c que c mort.
madbob
0
moony01 Messages postés 21 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 27 mars 2007
18 janv. 2005 à 14:24
En consultant l'explorateur d'objet, j'ai trouvé la classe "FileDialog" dans la bibliothèque "Office".
J'apprécie beaucoup ton aide ainsi que ta patience, mais moi je suis pas patiente et je baisse rapidement les bras, et je laisse tomber.
C'est pourquoi j'ai pensé à autre chose, pourquoi ne pas utiliser un simple formulaire d'access où je place un controle treeview et un autre listview et je fais le lien entre les deux (je l'ai vu sur ce site : une source), le problème c'est que l'exemple que j'ai vu n'affiche que les lecteurs locaux et moi je veux afficher les lecteurs réseau.
J'ai essayé de réctifier me code mais ca plante.

Code Original:
Formulaire :

Option Compare Database
Dim LV1Path, fic, FicOld As String
Dim Same As Boolean
Dim Ind As Integer


Private Sub Form_Load()
Dim fs As Object
Dim dc, d
Dim str, n, img As String


Set fs = CreateObject("Scripting.FileSystemObject")
Set dc = fs.Drives
For Each d In dc
If (d.IsReady) Then
str = fs.GetDrive(d.Driveletter).RootFolder
Else:
GoTo suite2
End If
Select Case d.DriveType
Case 0: n = "Inconnu"
Case 1: n = "Amovible"
Case 2:
n = d.VolumeName
img = "HDD"
Case 3:
n = d.ShareName
img = "DR"
Case 4:
n = "CD-ROM"
img = "CD"
Case 5: n = "Disque RAM"
End Select


n = n & " (" & d.Driveletter & ":)"
'Création des noeuds racines des disques)
If (d.DriveType <> 3) Then
Me.TV1.Nodes.Add , , str, n, img
AjouteRep str
End If
suite2:
Next
End Sub


Private Sub AjouteRep(ByVal str As String, Optional ByRef Node As Object = Nothing)
Dim fs, f, fld, fld1, sf

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(str)
Set sf = f.SubFolders
For Each fld In sf
'Évite les répertoire qui font planter la fonction
If fld.Name = "RECYCLER" Then GoTo suite
If fld.Name = "System Volume Information" Then GoTo suite
If fld.Name = "DO_NOT_REMOVE_NtFrs_PreInstall_Directory" Then GoTo suite
'ajoute les dossier
If f.IsRootFolder = True Then
Me.TV1.Nodes.Add str, tvwChild, fld.Path, fld.Name, "Dossier"
'Ajoute les sous dossiers
AjouteRep fld.Path
Else:
Me.TV1.Nodes.Add str, tvwChild, fld.Path, fld.Name, "Dossier"
AjouteRep fld.Path
End If
suite:
Next
End Sub
'Gestion des clics dans le TreeView
Private Sub TV1_NodeClick(ByVal Node As Object)
Dim li As ListItem
Dim li2 As ListItem
Dim fld
Dim fic, rep, img As String
Dim f
Dim fldl
Dim message As Boolean 'sera utile pour filtrer des dossiers à ne pas afficher
Dim fs As Object
Dim a As Integer

a = 2
Ind = Node.Index
Me.LV1.ListItems.Clear
'construit le nom du répertoire
While (Mid(Node.FullPath, a, 1) <> ":")
a = a + 1
Wend
rep = Mid(Node.FullPath, a - 1, 2) & Mid(Node.FullPath, a + 2)
'MsgBox rep
If Right(rep, 1) <> "" Then rep = rep & ""
LV1Path = rep
Set fs = CreateObject("Scripting.FileSystemObject")
Set fld = fs.GetFolder(rep)
message = False

'ajoute les éléments dossier a LV1 sans prendre en compte la poubelle et l'information de volume systeme.
For Each fldl In fld.SubFolders If fldl.Name "RECYCLER" Then message True If fldl.Name "System Volume Information" Then message True
'MsgBox fldl.Name
If message = False Then
Me.LV1.ListItems.Add , , fldl.Name, "Dossier", "Dossier"
End If
Next

'ajouter les élément fichier a LV1
For Each f In fld.Files
'On affecte l'image en fonction du type du fichier
img = FindImg(f.Name)
Me.LV1.ListItems.Add , , f.Name, img, img
Next
End Sub
'Gestion des clics dans la listeView
Private Sub LV1_ItemClick(ByVal Item As Object)
Dim fs As Object
Dim f, fldl, fld
Dim message As Boolean
Dim rep As String
Dim RetVal

'Construit le nom du répertoire
'GetRep Item 'donne rep, fic et LV1Path
fic = Item.Text
rep = LV1Path
If Right(rep, 1) <> "" Then rep = rep & ""
LV1Path = rep 'Stockage du nom du répertoire uniquement
rep = rep & fic

If Item.Icon <> "Dossier" Then
'MsgBox rep
'Shell (rep), vbMaximizedFocus
RetVal = ShellExecuteA(0, "Open", rep, "", "", 10)
Exit Sub 's'il ne sagit pas d'un dossier on sort de la sub
End If

'Récupération de l'index du node correspondant dans le treeview
Ind = Me.TV1.Nodes(Ind).Child.FirstSibling.Index
While Me.TV1.Nodes(Ind).Text <> Item.Text
Ind = Me.TV1.Nodes(Ind).Next.Index
Wend
TV1_Expand (Me.TV1.Nodes(Ind))
'Efface l'ancien ListView
Me.LV1.ListItems.Clear

'construit rep
'MsgBox rep
LV1Path = rep 'Stockage du nom du nouveau répertoire
Set fs = CreateObject("Scripting.FileSystemObject")
Set fld = fs.GetFolder(rep)


message = False
'Ajoute les éléments dossier à LV1 sans prendre en compte la poubelle et l'information du volume systeme.
For Each fldl In fld.SubFolders If fldl.Name "RECYCLER" Then message True If fldl.Name "System Volume Information" Then message True
If message = False Then
Me.LV1.ListItems.Add , , fldl.Name, "Dossier", "Dossier"
End If
Next

'Ajouter les élément fichier à LV1
For Each f In fld.Files
img = FindImg(f.Name)
Me.LV1.ListItems.Add , , f.Name, img, img
Next


End Sub


Public Sub TV1_Expand(ByVal Node As Object)
If (Node.Parent Is Nothing = False) Then 'S'il s'agit des lecteurs on ne change pas l'image
Node.Image = "DossierOpen"
End If
End Sub


Public Sub TV1_Collapse(ByVal Node As Object)
If (Node.Parent Is Nothing = False) Then
Node.Image = "Dossier"
End If
End Sub


Private Function FindImg(str As String) As String
Select Case Right(str, 3) Case Is "txt": FindImg "Txt" Case Is "doc": FindImg "Doc" Case Is "zip": FindImg "Zip" Case Is "rar": FindImg "Zip" Case Is "exe": FindImg "Exe" Case Is "mdb": FindImg "Mdb" Case Is "xls": FindImg "Xls" Case Is "ppt": FindImg "Ppt" Case Is "tml": FindImg "IE" Case Is "htm": FindImg "IE" Case Is "wav": FindImg "Mp3" Case Is "mp3": FindImg "Mp3" Case Is "dll": FindImg "Dll" Case Is "ini": FindImg "Ini" Case Is "bmp": FindImg "Img" Case Is "jpg": FindImg "Img" Case Is "gif": FindImg "Img"
Case Else: FindImg = "Unk"
End Select
End Function

Module :

Option Compare Database
Public Declare Function ShellExecuteA Lib "shell32" (ByVal hwnd As Long, ByVal LPFile As String, ByVal PathFile As String, ByVal Other As String, ByVal Other2 As String, ByVal Param As Long) As Long

P.S :
TV1 : Treeview
LV1 : Listview
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
18 janv. 2005 à 14:56
Je veux bien me pencher sur ton code, d'ailleurs
je vais le faire... Mais vois-tu, tu utilises les méthodes
d'instanciation dynamiques et pour peu que tu n'as pas les
composant/librarie partagés qui vont pas alors tu retombes dans les
mêmes travers...



D'autant que si je suis ta logique, tu veux faire de l'instanciation
hors dans ton 2 eme exemple, tu utilises les ocx treeview et liste
view.... je vois pas alors l'intérêt de faire du set !

Autant rester sur la commondialog, la déclarer et l'utiliser en tant qu'ocx sans faire de set.


Pour faire du Set il faut pouvoir instancier la classe mère dans un module... C'est pas pareil que d'instancier l'objet graphiquement dans un formulaire et c'est pour ça que l'un fonctionne et l'autre pas forcément





Question : Esc-ce que tu as essayé au moins de faire fonctionner la
commondialog en tant qu'ocx sans faire appel aux méthode Set... Le code
est un plus haut dans le post.

Tu l'incorpes via les outils et tu l'utilises sans faire de set !!! Je veux pas me les mordre et j'aimerai savoir si tu y arrives.



En attendant je zieute plus en détail ton source
madbob
0
moony01 Messages postés 21 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 27 mars 2007
18 janv. 2005 à 15:22
ca marche trés bien avec l'ocx (sans problème, sans message d'erreur), mais comme j'ai dit j'ai besoin d'afficher juste les lecteurs réseau, dans ma boite de dialogue, That's why je t'ai derangé avec mes messages du plus haut du post.
Mnt je te laisse savourer le code du haut.
Moony
0

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

Posez votre question
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
18 janv. 2005 à 16:35
Bon bin pour pas qu'il tourne pendant des plombes à scruter toutes les arbo de mes lecteur... J'ai limité aux lecteurs...



J'ai eu des erreurs notamment avec la listview et un problem avec la
trbx parcequ'elle n'est pas initilisée. J'ai donc rajouté un bout de
code :

'* On configure le treeview

With Me.TV1

.Sorted = True

Set mNode = .Nodes.Add()

.LabelEdit = False

.LineStyle = tvwRootLines

End With



'* après je rentre dans la boucle pour l'ajout des noeuds

Donc j'ai dégagé les références à la listeview cf la variable img ',img



Je crois qu'on ne coupe pas à la création d'un noeud racine ... mais bon là je là l'affaire



PS a tourner en rond sur la commoncontrole, j'ai vu qu'on pouvait ouvrir avec la pallette de couleur, et l'imprimente cooool

A+

madbob
0
moony01 Messages postés 21 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 27 mars 2007
19 janv. 2005 à 11:55
Salut, j'ai opté pour la solution que je t'ai dit hier (formulaire+treeview+listview) et je vois qu'elle fasse l'affaire, sauf que je dois insérer un control progressbar, parcqu'il y'a des dossiers qui prend bcp de temps pour se charger / se remplir, et je veux que le progressbar s'incrémente avec le remplissement de la listview, si tu peux me donner ton adresse email je te l'envoie pour voir de quoi il s'agit.

Moony
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
19 janv. 2005 à 13:01
Salut



Y a pas de problème... je t'envois ça par un mail



Ce qu'on veut, ce qu'on peut... Comme il y a toujours plein de
solutions différentes pour finalement arriver au même résultat...Après
c'est juste au dela de la réussite technique le temps qu'on y passe.



Tu veux un browser de fichier qui ne t'affiche que les lecteurs qui
sont définis par une unité logique A:, C:, D:, etc... c'est ça ? et
lorsque tu cliques sur ton choix alors il déroule comme un browser les
élements inclus... J'aurai utilisé les outils driveListebox,
dirlistbox, et filebox qui fonctionnent indépendamment et sont
également très rapide et ainsi qu'une listebox pour modifier le
comportement éventuellement non désirable de la drive listebox et
encore seulement peut être. Puis j'en aurai fait un template
réutilisable...

madbob
0
Rejoignez-nous