"On Error..." marche pas !

Résolu
PrinceSilk Messages postés 56 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 26 mai 2013 - 11 juin 2008 à 19:44
necrom Messages postés 30 Date d'inscription samedi 8 mars 2003 Statut Membre Dernière intervention 26 janvier 2011 - 19 juin 2008 à 09:19
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

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
12 juin 2008 à 15:28
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+
3
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
11 juin 2008 à 19:55
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
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
11 juin 2008 à 20:14
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+
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
11 juin 2008 à 20:21
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
0

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

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
11 juin 2008 à 20:25
...
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é
0
PrinceSilk Messages postés 56 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 26 mai 2013
11 juin 2008 à 23:22
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 !!
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
12 juin 2008 à 08:43
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
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
12 juin 2008 à 11:41
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.
0
PrinceSilk Messages postés 56 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 26 mai 2013
12 juin 2008 à 12:12
Bon, .NET ca à l'air cool mais je marche en VB6 moi, donc...
0
PrinceSilk Messages postés 56 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 26 mai 2013
12 juin 2008 à 12:15
Oui, je remarque que ma question s'est placée dans la partie .NET et VB5... bizard, pourtant j'avais selectionné VB6
0
joelmarie Messages postés 27 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 12 juin 2008
12 juin 2008 à 12:43
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
0
joelmarie Messages postés 27 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 12 juin 2008
12 juin 2008 à 12:44
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
0
PrinceSilk Messages postés 56 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 26 mai 2013
12 juin 2008 à 13:14
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é...
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
12 juin 2008 à 13:56
"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...
0
necrom Messages postés 30 Date d'inscription samedi 8 mars 2003 Statut Membre Dernière intervention 26 janvier 2011
19 juin 2008 à 09:19
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
0
Rejoignez-nous