Selection mutliple de fichier pour remplir un tableau

Signaler
Messages postés
2
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
8 juillet 2005
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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!

4 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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

PCPT
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
26
Bonsoir,

Tu peux essayer ceci

Places un ListBox (assez large pour visualiser les données), un
CommandButon et un CommonDialog (Composants/Microsoft Common Dialog 6.0)



Private Sub Command1_Click()

With CommonDialog1

.DialogTitle = "Sélectionner le fichier à copier"

.CancelError = True

.FileName = ""

.Filter = "Tous(*.*)|*.*"

.FilterIndex = 1

.InitDir = "C:"

On Error GoTo Annuler

.ShowOpen

List1.AddItem .FileName

End With

GoTo Suite:

Annuler: MsgBox "Vous n'avez sélectionné aucun fichier "

Suite:

End Sub



jpleroisse
Messages postés
2
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
8 juillet 2005

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!


D'avance merci!
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
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 )

j'èspère que çà t'aura un peu aidé

PCPT