Apparition de "FALSE" si on fait "ouvrir" sans choisir de chemin d'accès [Résolu]

Signaler
Messages postés
36
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
-
 cs_MPi -
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
fileToOpen doit être un Variant, pour pouvoir devenir un Boolean, ou un String (qui contiendra le chemin vers le fichier selectionné)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
quel est le code de ce bouton ouvrir_click ?
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Salut,
Et bien teste la valeur retournée avant de la mettre dans le textbox.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
36
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008

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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Re,
Bah  Application.GetOpenFilename retourne le chemin... donc avec dir ca passe pourquoi mon code plonge?

@+: 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
68
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...
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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à ^^
Messages postés
36
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008

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
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
55
Re,
Quelle est l'erreur donnée par VBA?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
36
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008

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
Messages postés
36
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008

C'est bon ça marche (avec le Variant) merci beaucoup.

Eleasias
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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