Apparition de "FALSE" si on fait "ouvrir" sans choisir de chemin d'accès

Résolu
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008 - 20 mars 2008 à 15:06
 cs_MPi - 21 mars 2008 à 22:16
Bonjour,

J'ai une userform avec une textbox et un bouton "ouvrir".
Lorsque je fais ouvrir, mon chemin d'accès s'inscrit dans ma textbox.

Le problème est que si je fais ouvrir, puis annuler, la valeur "FALSE" s'incrit dans ma textbox.
J'aimerai trouver un moyen de remédier à ce problème.

Merci par avance pour vos éventuelles réponses

Eleasias

21 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mars 2008 à 16:03
Dim sFileName as String

sFileName= Application.GetOpenFilename
TextBox1.Value = sFileName
If sFileName <> "" Then
'# Actions particulières.... si tu le désires
End If


ceci dit, cette question trouvait (encore) sa réponse dans la doc MSDN:
http://msdn2.microsoft.com/en-us/library/aa195744(office.11).aspx
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:07
fileToOpen doit être un Variant, pour pouvoir devenir un Boolean, ou un String (qui contiendra le chemin vers le fichier selectionné)
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:41
je remet le couvert...
un autre post sur le forum qui cause aujourd'hui encore de GetOpenFileName m'a permis de voir que

if zResult <> False Then

n'était pas un test convenable.

la plupart du temps, si, mais si on autorise le Multiselect, ca coince, on peut alors faire :

Dim zResult As Variant
zResult = Application.GetOpenFilename(MultiSelect:=True)
If VarType(zResult) <> vbBoolean Then
Stop
End If

(valable pour le multiselect ou non)
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mars 2008 à 15:27
quel est le code de ce bouton ouvrir_click ?
0

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 mars 2008 à 15:31
Salut,
Et bien teste la valeur retournée avant de la mettre dans le textbox.

@+: Ju£i?n
Pensez: Réponse acceptée
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
20 mars 2008 à 15:57
Le code de mon bouton est :

TextBox1.Value=Application.GetOpenFilename

Je ne vois pas trop ce que tu veux dire par tester la valeur retournée.

??  If Application.GetOpenFilename <> ""  Then
            TextBox1.Value = Application.GetOpenFilename
         Else TextBox1.Value = ""
??  End If

Un truc comme ça?

Eleasias
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 mars 2008 à 16:06
Re,
Voici UNE possiblité il y en a d'autres, mais au moins tu as l'idée

Dim Retour As String
   'On stocke la valeur retournée par
   'Application.GetOpenFilename
   Retour = Application.GetOpenFilename
   
   'On test l'existance du fichier pour
   'le mettre dans le textbox (c'est une possibilité)
   If (Dir(Retour) <> vbNullString) Then
       TextBox1.Value = Retour
   Else
       TextBox1.Value = vbNullString
   End If , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 mars 2008 à 16:08
Re,

> [auteur/RENFIELD/2359.aspx Renfield]: Sous W2K, Office 2000 si tu appuie sur Annuler la valeur retournée est "Faux" (ou alors j'ai pas compris)

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 mars 2008 à 16:11
Re,

Effectivement l'exemple de la MSDN est nickel

fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If fileToOpen <> False Then MsgBox "Open " & fileToOpen
, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mars 2008 à 16:12
d'ailleurs, mon code, ca ne va même pas... GetOpenFileName renvoie un Boolean (quelle daube)

pour éviter tout soucis (imagine un fichier nommé "Faux" qui serait bien placé, ton code plonge, jrivet (bon, ok, ca fait une phrase avec des si...)

seule alternative valable :

Dim sFileName As Variant
sFileName = Application.GetOpenFilename
If VarType(sFileName) = vbString Then '# renvoie un Boolean False si Cancel pressé, une String sinon...
TextBox1.Value = sFileName
End If
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 mars 2008 à 16:15
Re,
Bah  Application.GetOpenFilename retourne le chemin... donc avec dir ca passe pourquoi mon code plonge?

@+: Ju£i?n
Pensez: Réponse acceptée
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mars 2008 à 16:25
c'est tiré par les cheveux, mais c'est une faille de la chose.

je viens de tester, mon intuition etait bonne.
ouvre Excel,
sauvegarde ton classeur sur C:\ (par exemple)
ajoutes ta macro :

Dim Retour As String
'On stocke la valeur retournée par
'Application.GetOpenFilename
Retour = Application.GetOpenFilename

'On test l'existance du fichier pour
'le mettre dans le textbox (c'est une possibilité)
If (Dir(Retour) <> vbNullString) Then
Stop
Else
Stop
End If

créé un fichier "C:\FAUX" (pas d'extention)

et lances la chose. Dir$("Faux") trouve le fichier bidon, la macro ignore que l'on a fait Cancel.

je te l'ai dit, hein, c'est improbable ^^
mais bon...
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 mars 2008 à 16:33
Re,
Effectivement...

Et bien recherchons les : ou les \ dans la chaine retournée.
ou bien faisons simplement comme le dit l'exmple

If fileToOpen <> False Then

Mais ce que tu disais n'iras pas non plus alors  (juste pour être sûr car là... )

If sFileName <> "" Then
   '# Actions particulières.... si tu le désires
End If , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 mars 2008 à 16:34
Re,
Toute mes excuses [auteur/RENFIELD/2359.aspx Renfield]j'ai pas les yeux en face des trous....  tu lavais dit que cela n'allait pas ... Méa culpa. faut que j'arrête le Sport entre midi et Deux ca me grille le peu de neurones que j'ai.

@+: Ju£i?n
Pensez: Réponse acceptée
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 mars 2008 à 16:39
excuses, mea culpa....

ben écoutes, y'a pas mort d'homme ^^ on est là pour avancer, tout le monde peut se gourrer :p

bonjour, merci, et autres "civilités" du genre ne sont pas monnaie courante chez moi, tu sais...
je ne m'offusque pas pour si peu. Le respect ne passe pas par là, a mon sens.

enfin, voilà ^^
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 08:23
Tout d'abord merci à tous pour votre participation.

J'ai essayé le code msdn :

   fileToOpen = Application _
    . GetOpenFilename ("Text Files (*.txt), *.txt")
If fileToOpen <> False Then
    Textbox1.Value = fileToOpen
End If

Mais vba me fait un débogage à la ligne du If. J'ai déclaré fileToOpen en string.

Je suis débutant et je ne comprend pas trop ce que sont des objets comme sFileName ou (Dir(Retour) <> vbNullString).
Désolé mais il faut que j'utilise vba et je n'en ai que de petites bases.

Eleasias
0
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:04
Re,
Quelle est l'erreur donnée par VBA?

@+: Ju£i?n
Pensez: Réponse acceptée
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 09:17
J'ai trouvé l'erreur c'était une incopatibilité de type car False n'était pas entre guillemets. Ca ne plante plus mais à la place de False ca met faux maintenant, je n'y comprend rien.
Même avec un : 
Else TextBox1.value = ""
ca ne marche pas

Et si je remplace If fileToOpen <> "False" Then    par     f fileToOpen <> "False" or "faux" Then
Ca ne marche toujours pas...

Eleasias
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 09:25
C'est bon ça marche (avec le Variant) merci beaucoup.

Eleasias
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 à 09:26
ce serait au pire :

f fileToOpen <> "False" And fileToOpen <> "Faux"

mais ce n'est pas la bonne facon de procéder (voir messages ci-dessus)

jrivet, la MDSN et moi même t'avons filé du code clé en main, pas beaucoup d'alternatives
0
Rejoignez-nous