Fonction VB Application.GetOpenFilename

Résolu
rbonnal Messages postés 19 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 21 mars 2008 - 21 mars 2008 à 09:28
rbonnal Messages postés 19 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 21 mars 2008 - 21 mars 2008 à 11:03
Bonjour,

      J'ai un comportement bizarre sur la fonction Application.GetOpenFilename en mode multiselection de fichier.
      La fonction ouvre bien la boite de dialogue pour une séléction multifichier.
     J'appelle la fonction comme cela :
   
      Chemin = Application.GetOpenFilename(, , , , True)
     L'option multiselect à true est sensé retourner un tableau de string contenant les chemins des fichiers sélectionnés même si un seul est sélectionné ou false si l'utilisateur clique sur cancel.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

Hors parfois, la fonction retourne seulement une string contenant le chemin du 1er fichier sélectionné. Ce comportement est aléatoire.

Est-ce que quelqu'un peut m'éclairer ? J'ai chercher sur le forum et sur le net (msd,.) mais je n'ai rien trouvé sur ca.

J'utilise une macro sous Excel 2000.

Merci

5 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mars 2008 à 09:33
Salut,
Est ce que tu as pu isoler le moment ou cela ne marchait pas
(une suite de manipulations, Une selection de certains fichiers.)

Bref quelque chose qui nous aiderait plus

@+: Ju£i?n
Pensez: Réponse acceptée
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 09:44
Je ne rencontre pas ce genre de travers...


Sub test()
Dim zResult As Variant
Dim i As Long
zResult = Application.GetOpenFilename(MultiSelect:=True)
If VarType(zResult) <> vbBoolean Then
For i = 1 To UBound(zResult)
Debug.Print i, zResult(i)
Next i
End If
End Sub


si malgré mon code tu continue de recevoir parfois une chaine unique, tu pourras utiliser ce genre de test:

Sub test()
Dim zResult As Variant
Dim i As Long
zResult = Application.GetOpenFilename(MultiSelect:=True)
Select Case VarType(zResult)
Case vbString
Debug.Print 1, zResult

Case (vbArray Or vbString)
For i = 1 To UBound(zResult)
Debug.Print i, zResult(i)
Next i
End Select
End Sub
3
rbonnal Messages postés 19 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 21 mars 2008
21 mars 2008 à 10:46
Merci de vos réponses.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Je n’ais pas put isoler le moment (je continue à tester). Ce qui est bizarre c’est que le problème apparaît d’un seul coup et qu’il disparaît si je reboute le PC. C’est peut être qu’il faut réinstallé Excel… Pourtant je n’ais jamais eu de problème avec mon excel. Sinon il faut faire avec la méthode de
Renfield

 
qui solutionne astucieusement le plantage. Mais on ne récure ainsi que le premier des chemins.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 10:53
"Mais on ne récure ainsi que le premier des chemins."

? on récupère ce que renvoie GetOpenFileName...
si on récupère un tableau de Strings, on liste tout
si on récupère un string unique, on l'affiche
0

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

Posez votre question
rbonnal Messages postés 19 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 21 mars 2008
21 mars 2008 à 11:03
Oui, en effet. Ton code est fonctionne bien.
Je vais m'en servir.
J'aurais juste aimé comprendre pourquoi parfois ca ne renvoi qu'une chaîne a lieu d'un tableau et pourquoi après un reboot on retrouve le comportement normal. Surtout que tout fonctionne bien dans le fichier et que les traitement son basique (traitement de fichiers texte).
En tout cas, merci de ton aide Renfield


.
0
Rejoignez-nous