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

Résolu
Anonyme209 Messages postés 761 Statut Membre -  
Anonyme209 Messages postés 761 Statut Membre -
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.

11 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  2. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  3. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  4. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  7. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  8. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  9. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  10. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  11. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  12. Anonyme209 Messages postés 761 Statut Membre 19
     
    Merci, pour l'instant ça a l'air de marcher.
    0