Selection mutliple de fichier pour remplir un tableau
cs_pbgunner
Messages postés2Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention 8 juillet 2005
-
7 juil. 2005 à 21:33
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
8 juil. 2005 à 13:31
Bonjour a tous!
Voila, je ne suis pas un pro et je viens de me mettre a VB6... j'ai quelques notions sur VBA... Il y a quelques temps j'utilisais ce bout de script sous Excel pour selectionner plusieurs fichiers, noter leur noms dans une feuille (tableau) puis faire tourner une boucle sur cette liste.
J'aimerais faire la même chose sur VB avec si possible le même type d'interface. J'ai essayé avec l'API open de windows mais je n'arrive a selectionner qu'un seul fichier. J'ai beau chercher sur différent forum, je ne trouve pas de réponse.
Quelqu'un peut m'aider?
Voici le script que j'utilisais sous excel:
Dim fnam As Variant
' fnam is an array of files returned from GetOpenFileName
' note that fnam is of type boolean if no array is returned.
' That is, if the user clicks
' on cancel in the file open dialog box, fnam is set to FALSE
Dim b As Integer 'counter for filname array
Dim b1 As Integer 'counter for finding \ in filename
Dim c As Integer 'extention marker
' first open a blank sheet and go to top left ActiveWorkbook.Worksheets.Add
fnam = Application.GetOpenFilename("all files (*.jpg), *.*", 1, _
"Selectionner les fichiers a imprimer", "Get Data", True)
If TypeName(fnam) = "Boolean" And Not (IsArray(fnam)) Then Exit Sub 'if user hits cancel, then end
For b = 1 To UBound(fnam)
' print out the filename (with path) into first column of new sheet
Sheets("List").Cells(b, 1) = fnam(b)
b1 = Len(fnam(b))
Next
On ne peut plus simple mais sous VB6, le script bloque sur Application en disant Variable non définie.. je pense qu'il me renvoi ce message en pensant que c'est une variable non déclarée mais cela signifie qu'il ne reconnait pas Application comme une instruction... je ne sais pas comment faire pour trouver un équivalent...
Merci d'avance pour vos réponses!
A voir également:
Selection mutliple de fichier pour remplir un tableau
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 juil. 2005 à 22:45
salut, désolé, aucune notion de VBA.
par contre, en VB, l'utilisation de "Application" sert à ouvrir une application nommée en paramètre (Excel par exemple), et enregistrée de la même manière que ton exemple (enfin, si on veut..), à la différence que ton "fnam" ne doit pas être en variant.
je ne comprends pas trop les actions de ton code (différence de langage), mais voici l'utilisation de ton instruction reconnue par VB (Application interpreté):
Dim ExlObj as Object
Set ExlObj = CreateObject("Excel.Application")
' on l'affiche
ExlObj.Visible = True
' on charge la feuille
ExlObj.Workbooks.Open FileName:="CheminComplet.xls", Editable:=True
'supprime l'affichage des messages d'erreurs ou de confirmation de suppression, ...
ExlObj.DisplayAlerts = False
' on rempli la 1ère cellule
ExlObj.range("A1").Value = "Test de saisie par VB"
' on quitte excel (sans enregistrer)
ExlObj.Application.Quit
' on décharge la variable
Set ExlObj = Nothing
explique mieux l'action de ton script et j'essairais de mieux répondre. là tu vois peut-être sur quoi VB s'arrête
cs_pbgunner
Messages postés2Date d'inscriptionjeudi 7 juillet 2005StatutMembreDernière intervention 8 juillet 2005 8 juil. 2005 à 11:00
Merci pour vos réponses,
pcpt, je comprend mieux et c'est en effet ce dont je me doutais.
jpleroisse, ton code est presque conforme a ce que je cherche. Le problème
c'est que je suis obligé de répéter l'opération pour chaque fichier. Or je
peux avoir le cas ou j'ai a sélectionner une 30aine de fichiers. Je me vois
mal répéter 30 fois l'opération. Aussi, j'aimerais pouvoir faire une
selection multiple soit avec la touche Shift ou soit Control pour créer le
même genre de liste en une seule opération. J'avais déja réussi a avoir le
même résultat avec l'API open de windows.
pcpt, tu dois mieux comprendre mon besoin avec le code proposé par
jpleroisse...Sinon, tu peux ouvrir Excel, lancer le Visual Script editor
(ctrl+F11), recopier le script ci-dessous et lancer la macro test. Tu verras
exactement ce que je cherche a reproduire en VB... Tu peux selectionner
plusieurs fichiers doc d'un même répertoire en utilisant shift ou control
------
Sub test()
Dim fnam As Variant
' fnam is an array of files returned from GetOpenFileName
' note that fnam is of type boolean if no array is returned.
' That is, if the user clicks
' on cancel in the file open dialog box, fnam is set to FALSE
Dim b As Integer 'counter for filname array
Dim b1 As Integer 'counter for finding \ in filename
Dim c As Integer 'extention marker
' first open a blank sheet and go to top left ActiveWorkbook.Worksheets.Add
fnam = Application.GetOpenFilename("all files (*.jpg), *.*", 1, _
"Selectionner les fichiers a imprimer", "Get Data", True)
If TypeName(fnam) = "Boolean" And Not (IsArray(fnam)) Then Exit Sub 'if user hits cancel, then end
For b = 1 To UBound(fnam)
' print out the filename (with path) into first column of new sheet
Sheets("List").Cells(b, 1) = fnam(b)
b1 = Len(fnam(b))
Next
End Sub
-------
Avez vous d'autres idées a ce sujet? Je sent qu'on y est presque!
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 8 juil. 2005 à 13:31
je dois vraiment avoir du mal, je ne comprend pas. tu veux lister tous les jpg (par exemple) d'un répertoire? tous les jpg de tous les rep? ou juste pouvoir sélectionner plusieurs jpg du même rep en une seule fois... (macro testée)
comme mon premier post, je vais te donner une idée qui peut t'avancer.....
Control sur la Form : FileListBox (nommé File1)
Propriété : MultiSelect = 2 - Extended (mais pour mon exemple, on s'en fou)
'déclaration générale
Dim TabAllMyPics() As String
Private Sub Form_Load()
'répertoire + extention
File1.Path = App.Path 'ou "C:" pour toi
File1.Pattern = "*.jpg"
If File1.ListCount = 0 Then Exit Sub
'enregistre tous les JPG du rep dans le tableau
Dim i as Integer
Erase TabAllMyPics
For i = 0 To File1.ListCount - 1
ReDim Preserve TabAllMyPics(i)
TabAllMyPics(i) = File1.List(i)
Next i
End Sub
çà n'ouvre pas de console, là tu listes la totalité des jpg du rep voulu, et les mets dans ta variable tableau.
si il te faut la console, rapproche toi du code de JpLeroisse, en ajoutant la possibilité de multiselection
msdn :
cdlOFNAllowMultiselect,
&H200,
Indique que la
<OBJECT id=alink_2 type=application/x-oleobject classid=clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11></OBJECT>[javascript:alink_3.Click() moment de l'exécution] en maintenant enfoncée la touche MAJ et en sélectionnant les fichiers à l'aide des touches HAUT et BAS. Dans ce cas, la propriété FileName renvoie une chaîne contenant le nom de tous les fichiers sélectionnés, séparés par des espaces.
par contre, j'ai beau chercher, je n'arrive pas à trouver comment attribuer cette constante.
une fois chose faite, le résultat n'est pas interprétable comme JpLeroisse l'a dit (cf msdn ci-dessus).
à toi ensuite de la retravailler
la fonction Instr te servira alors (si [ESPACE] après ".jpg" alors c'est pas là fin )