Si le fichier cherché n'existe pas?

Résolu
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010 - 11 juil. 2007 à 11:28
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 11 juil. 2007 à 14:39
Comment faire  afficher un message (msgbox) quand on ne trouve pas le fichier.
Dans ma listbox, quand je sélectionne la ligne, et que je clique sur un bouton, j'ouvre le fichier correspondant au nom de la ligne.
Voilà ce que j'ai fait...

Dim nuance As String, Fichier As String
Dim i As Variant
Call USFBienvenueAl.Dossier(NomDossier)
CHEMIN = NomDossier + "\Fiches Matières Al"



i = 0
For i = 0 To 200
    If UsfRésultatsAl.ListBox2.Selected(i) = True Then
        nuance = UsfRésultatsAl.ListBox2.List(i)
        Fichier = CHEMIN & nuance & ".pdf"
        Exit For
    End If
Next i



ShellExecute 0, "open", Fichier, vbNullString, CHEMIN, 1



Mais il se peut que le fichier en question n'existe pas. Alors dans ce cas je voudrais faire afficher un message.
Comment faire?
Merci d'avance!

16 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
11 juil. 2007 à 11:52
Bonjour à tous,

Ou alors...Peut-être(Renfield) cela :

Public Function FileExist(ByRef inFile As String) As Boolean


'*****************************/
' Fonction qui renvoi si fichier existant  /
'*****************************/
    On Error Resume Next
    Let FileExist = CBool(FileLen(inFile) + 1)
   
End Function

Utilisation :
If FileExist(Chemin de ton fichier à vérifier dans rep définit) Then
   MsgBox " Le fichier existe"
else
  MsgBox " Le fichier n'existe pas"
End if


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 11:31
Bonjour,

La fonction Dir suffit ici !
Dir(chemin_complet) est égal à "" si le fichier n'existe pas...
Ouvre ton aide en liogne sur le mot Dir.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juil. 2007 à 11:36
que cette boucle est moche ...


nuance = UsfRésultatsAl.ListBox2.Text
Fichier = CHEMIN & nuance & ".pdf"


semble suffir ici
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
11 juil. 2007 à 11:43
Ce que tu me propose c'est de mettre dir à la place de shellexecute?
Parce que moi il me l'a faut cette fonction...
Comprends pas...
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 11:51
Oh là !
Ta question est : comment s'assurer de l'existence d'un fichier ?
La réponse est celle que je t'ai donnée.
Ce n'est qu'ensuite (si existence) que tu l'ouvres par ton ShellExecute !

Mais j'ajouterais (en plus de ce qu'a fair observer RenField, que le meilleur moyen de ne pas choisir un fichier qui n'existe pas reste de très loin d'afficher tous simplement les seuls fichiers qui existent !


La fonction dir, associée à une simple listbox, te permet de lister dans ta listbox les fichiers d'un répertoire, y compris en filtrant leur extension !


Je viens de te mettre sur un chemin plus sage.


A toi de te retrousser les manches un peu.


Reviens avec un code d'essai et je t'aiderai si tu n'y parviens pas seul (mais je veux te voir t'y mettre).
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 11:55
Bonjour Exploreur,

Regarde ce que j'ai écrit juste avant.
Il connait le nom du dossier (CHEMIN = NomDossier + "\Fiches Matières Al")
Rien ne l'empêche alors de travailler plus proprement et de n'offrir que les fichiers du dit répertoire (y compris en les filtrant). Et s'ils sont dans cette liste, ils existent forcément !
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
11 juil. 2007 à 12:03
Merci à tous de répondre aussi vite!Ca m'aide beaucoup!
J'ai utilisé ta méthode Exploreur, et ça marche! Nickel!
Merci!
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 12:08
J'insiste,  Tiatia63
Il est bien plus pro et adroit de n'afficher dans ta listbox que les fichiers (forcément existants) du répertoire en cause (y compris en filtrant).
Enfin... fais donc "à ta tête"...
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
11 juil. 2007 à 12:14
Salut Jmfmarques,

Je suis d'accord avec toi sur le principe....Mais....Ce n'est pas toujours sûr que le fichier afffiché dans sa Listbox soit présent sur le disque "au moment T" ou il veut faire une action dessus...

J'utilise cette p'tite fonction dans une de mes application qui tourne sur réseau, et on ne sait jamais si quelqu'un déplace un fichier par erreur ou pire l'éfface..

Jmfmarques, j'explique bien sûr mon point de vue et ne me "braque" pas contre toi....Car tu nous en apprend tout les jours avec tes petit codes bien à toi...(couic, toto,....)

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 12:16
Re,

Essaye d'analyser, comprendre et te servir de ce qui suit (exemple à main levée) :

Private Sub Command1_Click()
   chemin = "d:" ' ici ton répertoire
   filtre = "*.txt" 'ici ton filtre éventuel
   fichiers = Dir(chemin & filtre)
   Do While fichiers <> ""
     Listbox1.AddItem fichiers
     fichiers = Dir
   Loop
End Sub

J'aurais nettement préféré te voir t'y mettre.
De cette façon : aucun fichier non existant ne risque d'être proposé au chois de l'utilisateur.
Tu débutes et c'est bien, mais débute alors comme il le faut.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juil. 2007 à 12:32
utilises un FileListBox :p
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
11 juil. 2007 à 12:41
Bon alors faut pas m'agresser comme ça! C'est pas ma faute si je comprends pas tout!
Alors je réexplique le truc!
Dans ma listebox j'ai une liste de nom mais après il n'y a pas forcement un fichier qui va avec chaque nom. Mais par contre je veux toujours que la liste de noms apparaisse en entier, que la liste soit complete qu'il existe ou non un fichier qui va avec.
Et toi ce que tu me propose, si j'ai bien compris c'est que je n'affiche dans ma listebox que les noms qui correspondent à un fichier existant...
Mais c'est pas facile d'expliquer par ecrit... désolée
Merci de votre aide.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juil. 2007 à 12:45
en gros, c'est ce qui est proposé.

ce verbe 'proposer' est clair : nulle aggression, juste une posibilié d'action


on t'a filé toutes les billes pour faire ce que tu cherches a faire...
tu as un code pour tester l'existence d'un fichier (jmfmarques t'indiquait très justement Dir)

tu peux donc faire :

Dim Fichier As String

Call USFBienvenueAl.Dossier(NomDossier)
Fichier = NomDossier & "\Fiches Matières Al" & _
UsfRésultatsAl.ListBox2.Text & ".pdf"

If Dir$(Fichier) <> "" Then
ShellExecute 0, "open", Fichier, vbNullString, CHEMIN, 1
End If
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 13:05
Je lui aurais bien proposé l'utilisation d'une FileListBox, RenField.
Le problème est que j'ai vu quelque part que ce contrôle n'existe pas sous VBA.
(Raison du substitut ListBox en conjugaison avec Dir).

A Tiatia63 : essaye de faire la différence entre essayer de t'aider réellement et t' "agresser". C'est vraiment t'aider, que je cherchais à faire  (comment celà peut-il t'échapper ?). C'est dommage.
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
11 juil. 2007 à 14:26
Voilà alors d'apres tout ce que vous m'avez dit, j'ai essayer deux choses qui marchent. Alors est ce qu'il y en a une qui est mieux que l'autre? Ou c'est encore pas ça et y a mieux?
Fichier = NomDossier & "\Fiches Matières Al" & _
UsfRésultatsAl.ListBox2.Text & ".pdf"



If Dir$(Fichier) <> "" Then
    ShellExecute 0, "open", Fichier, vbNullString, CHEMIN, 1
Else
    MsgBox "La fiche n'existe pas"
End If





OU




If FileExist(Fichier) Then
   ShellExecute 0, "open", Fichier, vbNullString, CHEMIN, 1
Else
  MsgBox " La fiche n'existe pas"
End If

Merci!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juil. 2007 à 14:39
j'aurais une preference pour la deuxieme, qui possède une gestion d'erreur dans le code de la fonction FileExist

eviteras de te retrouver le bec dans l'eau pour des chemins reseaux inexistants, etc...
0
Rejoignez-nous