VB: Afficher ses propres erreurs de création de formulaire

Résolu/Fermé
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - Modifié par Anonyme209 le 30/03/2014 à 12:26
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 31 mars 2014 à 19:12
Bonjour,

J'ai crée une application vb.
En dehors d'un "Sub" ou d'une Fonction, j'ai tapé
Public test = System.IO.File.ReadAllText("C:\Test.txt")

Et dans un sub:
MsgBox(test)

Tout se déroule bien si le fichier existe, mais, si il n'existe pas, l'erreur
"Une erreur est survenue lors de la création du formulaire"
s'affiche en mode déboguage, et
"L'application a cessé de fonctionner..."
en mode "normal".
Je voudrais savoir comment faire pour que même si le fichier n'existe pas, démarrer l'application et par exemple afficher une
MsgBox("Le fichier n'existe pas!")
.
Je connais
On error GoTo erreur
qui marche très bien à l'intérieur d'un sub, mais là, comme je l'ai dit, c'est à l'extérieur.
Merci de votre aide.
A voir également:

11 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
30 mars 2014 à 12:44
Bonjour,

C'est quel VB ? (VB6, VBA, VB.Net) ? Ça serait bien de le préciser, nous n'avons pas tous pris l'option "divination" dans notre cursus...

Il faut proscrire, autant que possible, les Goto dans un programme.

En VB6, il y a
On Error Resume Next
. On intercepte l'erreur s'il s'en produit une.

Sub test()

    On Error Resume Next
    MsgBox (test)
    
    If Err.Number <> 0 Then
        Mesbox ("Le fichier n'existe pas!")
        Exit Sub
    End If
    
End Sub


En VB.Net, on utilise le Try ... Catch ... (http://msdn.microsoft.com/fr-fr/library/bb727317.aspx et https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/try-catch-finally-statement)

0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
30 mars 2014 à 13:58
Visual Basic (Microsoft Visual Basic 2010)
Comme je vous l'ai dit, la variable public est définie à l'extérieur d'un sub.
Donc, pas moyen d'utiliser un "On error quelque chose"
Merci de votre aide.
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 30/03/2014 à 15:40
Et je connais aussi Try... Catch... mais je vous l'ai déjà dit, c'est à l'extérieur d'un sub, et ça ne marche donc pas mieux que
On Error GoTo error
ou encore
On Error Resume Next
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
30 mars 2014 à 16:13
Et pourtant ...

MsgBox(test) est bien dans un Sub ? Non ? c'est bien ce Sub qui appelle la variable public ? Non ?

Il faut mettre le Try... Catch... dans le Sub qui appelle la variable.
0

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

Posez votre question
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 30/03/2014 à 19:18
Non:
En dehors d'un "Sub" ou d'une Fonction, j'ai tapé 
Public test = System.IO.File.ReadAllText("C:\Test.txt")

On ne peut pas déclarer de variable public à l'intérieur d'un sub
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
30 mars 2014 à 20:18
Merci, mais je connais la différence entre une variable déclarée public ou local, par contre toi tu ignores comment ça fonctionne.

C'est dans ta Sub que tu utilises ta variable public. C'est donc dans la Sub que tu la gères.
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 30/03/2014 à 21:17
Je ne vois pas comment je peux la gérer alors que si le fichier n'existe pas, la variable n'est pas créée et le programme se ferme automatiquement en affichant une erreur.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 30/03/2014 à 21:45
Ta variable public est déclarée où ? dans une classe ? un module ?

Sinon, un exemple :

Dans un module, ma variable public
Module Module1

    Public test As String

End Module


A l'ouverture du formulaire principale
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Try
            Module1.test = System.IO.File.ReadAllText("C:\Test.txt")
            MsgBox(Module1.test)
        Catch ex As Exception
            MsgBox("Le fichier n'existe pas !")
        End Try

    End Sub
End Class


«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
31 mars 2014 à 16:14
Bonjour, voici les parties du code qui nous intéressent:

Public Class Form1
    Public test = System.IO.File.ReadAllText("C:\Test.txt")
    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MsgBox(test)
    End Sub
End Class
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
31 mars 2014 à 16:18
Sinon, je vais essayer ta technique.

Public Class Form1
    Public test
    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Try
        test = System.IO.File.ReadAllText("C:\Test.txt")
        MsgBox(test)
      Catch ex As Exception
        MsgBox("Impossible d'accéder à ""C:\Test.txt""")
    End Sub
End Class
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
31 mars 2014 à 19:12
Merci, pour l'instant ça a l'air de marcher.
0