File List Box avec plusieurs forms

cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010 - 1 juil. 2009 à 17:38
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 3 juil. 2009 à 15:51
Bonjour,

mon application est composée de plusieurs forms (5), dans la première form se trouve une FileListBox et une DirListBox qui sont en relation(c'est à dire en clickant sur un répertoire donné on obtient les fichiers qu'il contient).
L'utilisateur face à cette première form doit choisir un répertoire en clickant sur le répertoire voulu dans la DirListBox(aprés le double click dessus les fichers s'affiche dans la FileListBox).

Problème: lorsque l'on arrive à la 5ème forme j'ai besoin de renommer les fichiers du répertoires qu'il avait choisis dans la première forme :

code:
For numini = 0 To (filelistcount - 1)
    Name (filepath & "" & frm_assist1.File1.List(0)) As (filepath & "" & nom & "-" & numero & "." & extension)
Next numini

// la variable filepath contient le chemin du répertoire que l'utilisateur avait selectionné dans la première forme
// mais frm_assist1.File1.List(0) ne contient pas le premier fichier contenu dans le repertoire que l'utilisateur avait selectioné

J'aurais besoin de faire un File1.List(0) du repertoire voulu, voila ma question

j'espère avoir été clair
et merci d'avance pour votre aide

Gab

22 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
1 juil. 2009 à 22:23
Bonsoir,

Name (filepath & "" & frm_assist1.File1.List(0)) As (filepath & "" & nom & "-" & numero & "." & extension)

A quoi correspond cette ligne au juste ??? Qu'est-elle sensé faire ?

Dans quel état se trouve ton formulaire lors de l'appel à ta propriété list du frm_assist1.List1 ?

Je vois que ton projet concerne un assistant et que apparemment tu change de formulaire à chaque étapes... Tu devrais déclarer des vairables dans un modules de cette façon elles seront accessibles via tous les formulaire, rempli ces variables à chaque validation (changement de formulaire).

@+ Mayzz

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 16:19
Bonjour,
oui exactement il s'agit d'un assistant et j'ai bien mis mes variables utilisées dans un module.
La ligne ; Name (filepath & "" &
frm_assist1.File1.List(0)) As (filepath & "" & nom & "-"
& numero & "." & extension)
consiste à renomer un fichier suivant les différents paramètres récupéré dans l'assistant(nom ,numero,..);
mon problème est que je n'arrives pas à récupérer le chemin que l'utilisateur à sélectionner dans le form 1 sur l'objet File1 de type FileListBox.

Lorsque tu me demandes dans quel état se trouve mon formulaire je ne vois pas ce que tu veux dire par état :D(je manque cruellement de vocabulaire).

gab
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 16:45
"et j'ai bien mis mes variables utilisées dans un module" <= Faux, puis ce que tu te sert de la propriété List(0), je vais essayé d'être plus explicite

Lors du démarrage de ton assistant ta frm_assist1 s'ouvre, puis l'utilisateur peut choisir un chemin via un dirlist et un filelist.

L'utilisateur le fait, puis clique sur le bouton suivant qui va masquer frm_assist1 et chager/afficher frm_assist2, et c'est la ou je veux en venir,

Tu dois placer dans un module la vaiable

Public FileName As String

Lors ce que l'événement click du bouton suivant de ta frm_assist1 est déclanché, tu te sers de cette procédure pour remplir la variable FileName et gérer les erreurs :
If  Dir1.ListIndex -1 or File1.ListIndex -1 Then
    MsgBox "Vous devez sélectionner un fichier et un dossier !"
    Exit Sub
Else
    FileName = Dir1.List(Dir1.ListIndex) & "" & File1.List(File1.ListIndex)
End If

Me.Hide
frm_assist2.show

De cette façon, arrivé à la frm_assist2 et les suivantes, tu n'aura pas besoin d'intéroger le filelist, mais juste la vairable Filename, car il se peut que selon l'état de ton formulaire (masqué, visible, avec ou sans focus) l'élément qui était sélectionné dans ton FileList ai disparu. Cette méthode résoud le problème. 

Pour ce qui est de ça :
Name (filepath & "" & frm_assist1.File1.List(0)) As (filepath & "" & nom & "-" & numero & "." & extension)

Tu fais une erreur, le mot clé As Sert à donner un type à une variable uniquement

Dim i As Long
Dim MaVariable As String

Donc un objet ne peut pas être As (filepath & "" & nom & "-" & numero & "." & extension) Car ce n'est pas un type !

Une autre question qu'est ce que Name ? Un tableau ?? Un élément de tableau s'appel par un index et non par un String !

Dim Names(10) As string

Names(1) = "Toto"
Dim Nom1 As String

Nom1 = Names(1)

Mais je ne peux pas faire :

Nom1 = Names("Tartempion")

@+

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 16:48
merci de cette si belle et complète réponse !!
Je vais tout de suite essayer
gab
0

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

Posez votre question
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 17:03
Non non non,
Name fichier1 As fichier2 est u fonction  qui permet de renommer fichier1 en fichier2, cette fonciton marche parfaitement en mode "monoform".

sinon nom est une variable de type string
numero variable de type integer
et extension de type string

sinon mes variables sont bien crées dans un module  comme ceci :
Public nom As String
 Public numero As String
 Public extension As String
 Public filelistcount As Integer
 Public FileName As String

autre précision :  l'assistant sert à renommer des lots de fichiers : l'utilisateur sélectionne donc seulement son dossier.
Dans le dernier form à l'aide d'une boucle on prends un à un les fichiers :

For numini = 0 To (filelistcount - 1)
    Name (......) As (filepath & "" & nom & "-" & numero & "." & extension)
Next numini

gab
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 17:27
Alors la je ne capte rien du tout !!!

Un fonction doit retourné un objet, donc elle ne s'appelle pas comme un sub :

Dim Resultat As String

Resultat = Addition (A, B)

Ca c'est par exemple un appel à une fonction car le résultat de l'addiditon de a et b vont se retrouver dans la variable Result,
Je ne sais même pas comment ton code arrive à être compilé sans message d'erreur...

cette fonciton marche parfaitement en mode "monoform". <== Qu'appel tu le mode MonoForm ??? On parle bien de vb6 la ???

Franchement je veux bien te filé mon mail en MP pour que tu m'envoi ta source car si ca fonctionne comme ca... alors la !

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 17:33
BOnjour,
ba ouai je peux t'envoyer mes deux applications sa sera peut être plus simple :P(celle qui est sur une seule forme et celle qui est en assistant)

gab
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 18:13
Donc, c'est bien ce que je disait, ta fonction Name ne produit rien appart une belle erreur...

Ta fonction Name est déclaré nulle part, je ne vois pas comment tu peux l'appeler ?

Name (filepath & "" & frm_assist1.File1.List(numini)) As (filepath & "" & nom & "-" & numero & "." & extension)

De plus comme je te l'ai déja dis As désigne un Type... si tu n'as pas eu d'erreur de compile c'est parce que le code est telement bourré de bugs que même vb est perdu

Ou encore Public filepath As FileListBox 'chemin répertoire' <= rien n'est sélectionné dans cette filelist à quoi sert elle ??

Honetement ton code est tout ce qu'il y a de plus brouillon, je te conseille de tout reprendre à zéro !

Personne ne pourrat t'aider dans ces circonstances...

Ya rien de logique dans ton programme.. Tu met une filelist au début alors que l'utilisateur n'as besoin que de sélectionner que le dossier, a quoi elle sert ???

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 18:27
as tu essayé le "projet1"  de l'archive que je t'ais envoyé , l'application fonctionne parfaitement ( le projet 1 ne comporte qu'une seule forme et celui-ci fonctionne je viens de let ester avant de te l'envoyer).

en ce qui concerne "'name" "as" il s'agit d'une instruction et non d'une fonction
voir FAQ: http://faq.vb.free.fr/index.php?question=26

Si cette instruction ne fonctionne pas dans le projet2 c'est parque je ne lui donne pas les bons chemins des fichiers à renommer et c'est justement ici que j'ai besoin d'aide



gab
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 18:36
petite précision concernant mon application totalement incohérente tu t'arrêtes sur un Filelist ; et oui celle-ci à son importance et sert tout simplement à indiquer le contenu du dossier que l'utilisateur va modifier. Celle-ci n'a simplement pas encore la propriété inactive qui empêchera l'utilisateur de clicker dessus.

en réponse à :" Ya rien de logique dans ton programme.. Tu met une filelist au début
alors que l'utilisateur n'as besoin que de sélectionner que le dossier,
a quoi elle sert ???"
 j'espère t'avoir éclairé
gab
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 18:41
Effectivement, tu as raison pour name ^^ (C'est de l'héritage de l'ancien vb, ça a tendance à se perdre et c'est vraiment mal foutu !)

Pour le reste ca ne change pas... tin filepath est déclaré, mais il n'est présent sur aucune des form ? Et le FileList de la première form à quoi sert-il ???
 
Le probleme vient de la ! le filepath à la valeur nothing lors du pas à pas

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 18:48
Voila ca ira mieux comme ca :

Name (frm_assist1.File1.Path & "" &  frm_assist1.File1.List(numini)) As (frm_assist1.File1.Path & "" & nom & "-" & numero & "." & extension)

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 18:55
J'oublais aussi, dans la feuille N° 1, la gestion des erreur ne sert à rien en fait, le dir1 aura toujours un chemin vu qu'il est relié au drive1...

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 18:56
le Filelist de la première form sert à Afficher le contenu du dossier que l'utilisateur veut renommer( je sais pas moi  comme un aperçu de son dossier),de manière à ne pas renommer n'importe quel dossier parcque sa pourrais avoir 2 3 conséquences de changer les noms et extensions de n'importe quels fichiers.
------------
Alors j'ai essayé pas mal de truc pour arriver à reconstituer le chemin de mon fichier à renommer et cette variable  filepath en faisait partis(sans succès).
le projet que je t'ai envoyé n'est bien sur pas fonctionel
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 19:04
"j'avais eu comme idée de faire quequechose du style :
dans mon module je déclare une variable de type FileListBox : Public filepath As FileListBox
et en sortant de la form1 'enregistrer' File1 dans cette variable
variable que je pourrais réutiliser par la suite
mais je n'ai aucune idée ed si on peut si prendre de cette manière ~~ " c'est ce que je te proposait depuis le début ^^

Pour le reste je t'ai proposé une autre soluce plus haut...

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 19:13
alors je viens de tester ta solution mais le problème est que
frm_assist1.File1.Path & "" &  frm_assist1.File1.List(numini) ne renvois pas le premier fichier du dossier que l'utilisateur à choisis..

 lorsque la form1 (ou l'on choisis le répertoire) est lancé, la DirListBox affiche un dossier sélectionné d'office (avant tout choix de dossier del a par de l'utilisateur) et la FileListBox affiche le contenu de Ce dossier.
Avec msgbox(frm_assist1.File1.Path & "" &  frm_assist1.File1.List(numini) ) le fichier qui est renvoyé est le premier fichier présent dans le répertoire qui était sélectionné d'office et non celui que l'utisateur à sélectionné
gab
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 19:42
C'est logique, tu Unload la frm_assist1, lors ce que tu appelle la propriété Path de la list1 de cette form elle te renvoie la propriété par défault

2 soluces :

1\ Tu n'appel pas unload Mais Me.Hide qui va juste cacher le formulaire mais à la fin de ton prog tu te retrouve avec tout tes formulaire chargé donc pas très propre...

2\ Tu crée une variable dans le Module :

Dim CurrentDirectory As String

Dans le frm_Asssit1 :

Private Sub lbl_suivant_Click()
 
CurrentDirectory = File1.Path '(ou dri1 comme tu veux)
filelistcount = File1.ListCount
frm_assist2.Show
Unload frm_assist1



End Sub

Dans le frm_assist5

Dim Flb As New FileListBox
Flb.Path = CurrentDirectory



For i = 0 To (filelistcount - 1)
   Name (CurrentDirectory & "" & Flb.List(i)) As (CurrentDirectory & "" & nom & "-" & i & "." & extension)
Next











                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 20:25
Alors j'ai essayé ta solution 2 , mais
le
"Dim CurrentDirectory As String" accroche , l'erreur : 'invalid use of New keyword'

gab
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2009 à 20:40
ah sorry! c'est: Public CurrentDirectory As String

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_gabkiel Messages postés 22 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 6 janvier 2010
2 juil. 2009 à 21:28
arf désolé c'et moi qui me suis trompé.. le message d'erreur c'est bien 'invalid use of New keyword'
par contre c'est pour : Dim Flb As New FileListBox.

gab
0
Rejoignez-nous