"On Error..." marche pas !

[Résolu]
Signaler
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013
-
Messages postés
30
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
26 janvier 2011
-
Voila mon code, le principe, c'est que je Drop des dossiers depuis l'explorateur windows dans ma liste, qui ajoute non pas les dossiers mais le contenu des dossiers, en passant par une FileList

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

On Error GoTo 10

    Dim Dossier As Variant

    For Each Dossier In Data.Files

    File1.Path = Dossier

        For FichierEnCour = 0 To File1.ListCount - 1

        List1.AddItem File1.List(FichierEnCour)

        Next FichierEnCour

10  Next Dossier

End Sub

Bien sur, si je drop un fichier, le prog sort une erreur, car File1.Path=Dossier ne passe pas...
Avec mon On Error GoTo 10, ca passe l'erreur, mais seulement une fois : Si il y a 1 fichier parmis les objets Droppés, l'erreur va passer sans bloquer le programme qui passera au Dossier suivant, mais si il y a plusieurs fichiers parmis les objets Droppés, l'erreur passe bien sur le premier fichier, mais le programme plante à cause du 2em fichier...

"On Error..." ne protège que de la première erreur, pas des suivantes... Je comprend pas trop pourquoi...

Merci d'avance !

15 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
alors finalement c'est du VB6 ! pffff !... y a donc pas besoin de goto

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

    Dim Dossier As Variant
    For Each Dossier In Data.Files
        On Error resume Next
        File1.Path = Dossier
        if err = 0 then
            For FichierEnCour = 0 To File1.ListCount - 1
                List1.AddItem File1.List(FichierEnCour)
            Next FichierEnCour
       else
           Err.clear
       end if
    Next Dossier
End Sub

A+
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
Salut,
'On error' en .NET, fais une recherche sur try et catch...
sinon si tu persistes avec on error, cherchesde l'aide sur resume.
et essaye de mettre des etiquettes plutot que des numeros de lignes genre 'gestion_erreur :'
ça me rapelle trop mon ZX81...
@+
Megafan
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

et comme ça:

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

    Dim Dossier As Variant
    For Each Dossier In Data.Files
    On Error Next GoTo 10
    File1.Path = Dossier
        For FichierEnCour = 0 To File1.ListCount - 1
        List1.AddItem File1.List(FichierEnCour)
        Next FichierEnCour
10  Next Dossier
End Sub

A+
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
Bigfish_le_vrai  > tu es sur de ton 'On

ErrorNextGoTo 10'

par ce que dans mon IDE ça me dit Error : 'Resume ou Goto' attendu....

@+
Megafan
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
...
non,  effetivement c'est une erreur de VB6ste, je l'ai tapper trop machinalement quand je l'ai reecrit
L'idee c'etait surtout de montrer ou il remplirait le mieux sa fonction

encore desolé
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Bon, qqn aurait une autre idée?
Ou alors un moyen pour directement identifier la nature des objets droppés (savoir si c'est un dossier ou un fichier)

Merci !!
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
Re
Les idées....
Bein je te les ai données...
- Try , catch  : c'est la gestion d'erreur native du framework
- On error goto : tu oublies

Nature des objets droppés :
Tester si un dossier existe en .NET c'est if directory.Exists(chemin)

@+
Megafan
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Comme le dit Megafan...

Try
        File1.Path = Dossier
        For FichierEnCour = 0 To File1.ListCount - 1
            List1.AddItem File1.List(FichierEnCour)
        Next FichierEnCour
Catch Ex As Exception
End Try

Et je te conseil de mieux déclarer tes variables:
- Dim Dossier As Variant Variant? C'est quoi? En 5 ans de .NET, j'ai jamais utilisé (je suppose que c'est un 'Object')
- For FichierEnCour As Integer = 0 To File1.ListCount - 1

Mais tu n'as effectivement pas besoin de faire un Try:

For Each Dossier As String In Data.Files
    If IO.Directory.Exists(Dossier) Then
        File1.Path = Dossier
        For Each File As String In File1.List
            List1.AddItem File
        Next FichierEnCour
    End If
Next Dossier

D'ailleur c'est IO.Directory.GetFiles pour retourner tous les fichiers d'un dossier.
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Bon, .NET ca à l'air cool mais je marche en VB6 moi, donc...
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Oui, je remarque que ma question s'est placée dans la partie .NET et VB5... bizard, pourtant j'avais selectionné VB6
Messages postés
27
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
12 juin 2008

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim Dossier As Variant
For Each Dossier In Data.Files
On Error resume next
if err.number<<0 then
err.clear
goto Suite
end if
File1.Path = Dossier
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
Suite :
Next Dossier
Messages postés
27
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
12 juin 2008

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim Dossier As Variant
For Each Dossier In Data.Files
On Error resume next
if err.number<>0 then
err.clear
goto Suite
end if
File1.Path = Dossier
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
Suite :
Next Dossier
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Merci beaucoup, mais ca marche pas :(

Enfin si, mais j'obtenait le même résultat avec simplement "On Error Resume Next" au début de ma Sub...

c'est à dire que pour chaque élément Dossiers qui engendre une erreur, le programme continue et remplit la liste avec le contenu du dernier répertoire ajouté...
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"Oui, je remarque que ma question s'est placée dans la partie .NET et
VB5... bizard, pourtant j'avais selectionné VB6"

VB5? VB2005 n'est pas VB5, mais VB8
Et c'est sur que si tu post dans la mauvaise section, tu risque pas d'avoir beaucoup de réponses utiles...
Messages postés
30
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
26 janvier 2011

Personellement je conseillerai une structure Try Catch il faut absolument éviter l'utilisation des Goto meme en VB 6 et je te conseille trés largement de te former a vb.net tu va comprendre les avantages (sauf si tu fonctionnes sur d'anciennes configurations)

Necromhttp://www.membres.lycos.fr/stargatesgccenter