Fonction VB Application.GetOpenFilename [Résolu]

Signaler
Messages postés
19
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
21 mars 2008
-
rbonnal
Messages postés
19
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
21 mars 2008
-
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

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
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
Messages postés
19
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
21 mars 2008

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.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
"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
Messages postés
19
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
21 mars 2008

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


.