IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Ne pas générer d'erreur lors de la vérification sur l'existence d'un fichier [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut Ne pas générer d'erreur lors de la vérification sur l'existence d'un fichier
    Bonjour à tous,

    Pourriez vous m'aider?

    Voilà je vérifie l'existence de fichiers avec qui fonctionne si et seulement si les répertoire parents existe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(Dir(chem, vbDirectory)) <> 0 Then
    Seul problème quand un des répertoires parents n'existe pas j'ai une erreur 52, j'aimerais un moyen ou il ni à aucune erreur système si un des répertoire n'existe pas mais juste un tour comme false ou 0 afin de pouvoir utiliser mon else.

    Auriez vous une idée?
    Merci à vous bonne soirée.

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,

    As-tu essayé la gestion d'erreur On Error ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub blah_blah()
     
    On Error GoTo errHandler        'généralement au début du code
     
    'lignes de code...
     
    If Len(Dir(chem, vbDirectory)) <> 0 Then
     
    'lignes de code...
     
    Exit Sub
     
    errHandler:
    If Err.Number = 52 Then
        'faire ceci
    Else
        'faire cela
    End If
     
    End Sub
    Dès que une erreur est rencontrée, VBA va interrompre le cours normal d'exécution et va sauter à ton paragraphe errHandler: où il fera ce que tu lui diras de faire.

    bonne chance.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Autre possibilité :
    Si tu t'attends à une erreur que tu veux outrepasser, tu peux utiliser "On Error Resume Next". Cela veux dire "négligez l'erreur et continuer le cours normal du programme à la ligne suivante"

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub divide_by_zero()
    Dim i As Integer
    Dim d As Double
     
    '... lignes de code
     
    i = 2
    'i = 0
     
    'i = un nombre qui pourrait éventuellement être 0
     
    On Error Resume Next
    d = 5 / i
    On Error GoTo 0
     
    MsgBox ("d = " & d)
     
    End Sub
    le "on error Goto 0" supprime l'effet du précédent "on Error Resume next". don si plus loin dans ton code tu as une autre erreur, il va bloquer.

    Pour tester, essaye avec les deux valeurs i=2 et i=0

    Bonne chance.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Tu as 2 possibilités :
    1. Traiter le chemin comme une série de chemins successifs commençant à la racine et t'arrêter quand il n'existe pas.
      Donc pour X:\TonRep\TonAutreRep
      tu testes X:, X:\Tonrep, X:\TonRep\TonAutreRep.
      Avec un split et une boucle cela se fait facilement.
    2. Gérer l'erreur.


    Personnellement je gérerai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public function DirExiste(prmChemin) as boolean
       dim result as boolean:result=false
       on error goto Err_DirExiste
     
       if Dir(chem, vbDirectory)<>"" then
           result=true
       end if
     
    Exit_DirExiste
        DirExiste=result
        exit function
     
    Err_DirExiste:
        select case err.number
           case 52
              'OK' ne rien faire
           case else
               call msgbox(err.number & ", " & err.description, vbexclamation)
        end select
     
        resume exit_DirExit
     
    end function
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Merci de vos réponses,

    Le problème c'est que certains fichiers sont en base mais n'existe plus, ce if est situé dans le parcours d'un recordset.
    J'ai pas mon code sous les yeux mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Je parcours mon recordset (qui contient plusieurs chemins)
     
     j'affecte le chemin d'un fichier a chem mais je ne sais pas si il existe
    If Len(Dir(chem, vbDirectory)) <> 0 Then
     J'execute mon traitement sur le fichier
    endif
     
     
    fin de parcours
    Si je fais un un resume next le traitement s’exécute mais puisque le fichier n'existe pas ça marchera pas. Finalement je veux juste savoir si les fichiers existes pour savoir si je peux effectuer le traitement sur ces fichiers, je veux que le parcours de mon recordset continue ensuite.

    Vous me conseillez quoi?

    Merci pour votre aide.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Personnellement j'irai avec la méthode brutale et modifierai le code comme suit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    On error goto Err_Traitement 'Au tout début du traitement
    '
    ' ici ton code
    '
    If Len(Dir(chem, vbDirectory)) <> 0 Then
     J'execute mon traitement sur le fichier
    endif
     
    ContinuerTraitement:
     
    '
    'Ici le code suivant
    '
    Exit_Traitement:
       exit sub
     
    Err_traitement:    
         select case err.number
           case 52
              resume ContinuerTraitement
           case else
               call msgbox(err.number & ", " & err.description, vbexclamation)
        end select
     
        resume exit_Traitement
     
    end sub
    Ou alors si tu as d'autres endroits où tu vas faire ce genre de tests j'intégrerai la fonction DirExiste que j'ai posté avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DirExiste(chem) <> 0 Then
     J'execute mon traitement sur le fichier
    endif
    A+
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Merci pour la réponse,

    Je vais suivre ton conseil et traité l'erreur avec un resume vers l'étiquette pour continuer le parcours du recordset

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/05/2014, 15h05
  2. Réponses: 2
    Dernier message: 14/09/2012, 00h05
  3. Réponses: 1
    Dernier message: 16/10/2007, 13h11
  4. Réponses: 5
    Dernier message: 04/10/2007, 14h45
  5. Réponses: 11
    Dernier message: 21/11/2006, 01h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo