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 prendre en compte un fichier dbf.protégé et passer au suivant pour importation dans Base Access [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Employé
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 86
    Par défaut Ne pas prendre en compte un fichier dbf.protégé et passer au suivant pour importation dans Base Access
    Bonjour

    Merci d'avance

    Je viens de m'apercevoir que dans les fichiers que je reçois tous les jours , certains (pas nombreux) sont protégés et avant que je règle ce problème avec l'expéditeur, je souhaiterai faire l'impasse sur ce fichier et continuer mon importation (et si possible m'indiquer le nom du fichier à problème par box).

    Voici mon code d'importation qui fonctionne très bien
    il s'arrëte sur la ligne

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    DoCmd.TransferDatabase acImport, "dBase IV", "E:\", , NomFich, False, False
     
    Voici mon code 
     
    Function ImporteDbl1()
     
    Dim NomFich As String
    Dim StrSQL1 As String, StrSQL2 As String
    Dim NomTbl As String
    Dim fd As FileDialog, VPathFic As String
    Dim Rqa     As String
     
    NomFich = Dir("E:*.dbf")
     
     ' tranferer tous les fichiers dbf. de l'emplacement C:/ etc ... Ce qui génére une table nomée 0 dans access puis 1 etc ...
     
    Do While NomFich <> ""
     
    DoCmd.TransferDatabase acImport, "dBase IV", "E:\", , NomFich, False, False
     
      'executer la requete R_Ajouts_TNT
     
    Rqa = "R_Ajouts_TNT"
    DoCmd.SetWarnings False
    DoCmd.OpenQuery Rqa
     
     
      ' Supprimer la table 0 de la base
     
    DoCmd.DeleteObject acTable, "0"
     
     
    NomFich = Dir
    Loop
     
    End Function

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Par défaut
    bonjour,

    je pense qu'il y a trois possibilités à gérer :
    • TransferDatabase s'exécute normalement :
      -> Exécuter la requete R_Ajouts_TNT.
    • TransferDatabase provoque une erreur liée à la protection du fichier :
      ->
      Continuer la boucle des imports;
      -> Enregistrer le nom du fichier fautif;
      -> NE PAS executer la requete R_Ajouts_TNT pour ce fichier.
    • TransferDatabase provoque un autre type d'erreur =>
      -> Proposer à l'utilisateur d'arrêter la boucle des imports;
      -> Enregistrer le nom du fichier fautif;
      -> NE PAS
      executer la requete R_Ajouts_TNT pour ce fichier.
    Le mieux est de placer TransferDatabase dans une fonction à part qui possède un gestionnaire d'erreur et retourne des infos suffisantes à la fonction principale qui adaptera ses actions.

    Exemple de fonction appelée par la fonction principale :
    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
    Private Function ImportDbaseIV(ByVal Path As String, ByVal NomFichier As String, ByRef ErreurFichiers As String, ByRef StopImport As Boolean) As Boolean
    On Error GoTo catch
    Dim sErr As String
    DoCmd.TransferDatabase acImport, "dBase IV", Path, , NomFichier, False, False
    ImportDbaseIV = True
    finally:
    Exit Function
    catch:
    ErreurFichiers = ErreurFichiers & "- " & NomFichier & vbCrLf
    If Err.Number <> 999 Then 'Erreur différente du n° d'erreur du à un fichier protégé
    sErr = "Une erreur est survenue lors de l'import du fichier '" & NomFichier & "'" & vbCrLf & _
    vbTab & "-> Erreur n°" & Err.Number & " (" & Err.Description & ")" & vbCrLf & vbCrLf & _
    "Souhaitez-vous poursuivre les importations suivantes ?"
    StopImport = (MsgBox(sErr, vbYesNo + vbDefaultButton2 + vbQuestion, "Importation dBase IV...") = vbNo)
    End If
    Resume finally
    End Function


    Et l'adaptation de la fonction principale :
    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
    28
    29
    Function ImporteDbl1()
    Dim NomFich As String
    Dim StrSQL1 As String, StrSQL2 As String
    Dim NomTbl As String
    Dim fd As FileDialog, VPathFic As String
    Dim Rqa As String
    Dim RapportImports As String, StopImport As Boolean
    NomFich = Dir("E:*.dbf")
    ' tranferer tous les fichiers dbf. de l'emplacement C:/ etc ... Ce qui génére une table nomée 0 dans access puis 1 etc ...
    Do While NomFich <> "" And Not StopImport
    If ImportDbaseIV("E:\", NomFich, RapportImports, StopImport) Then
    'DoCmd.TransferDatabase acImport, "dBase IV", "E:\", , NomFich, False, False
    'executer la requete R_Ajouts_TNT
    Rqa = "R_Ajouts_TNT"
    DoCmd.SetWarnings False
    DoCmd.OpenQuery Rqa
    
    ' Supprimer la table 0 de la base
    DoCmd.DeleteObject acTable, "0"
    End If
    NomFich = Dir
    Loop
    If Len(RapportImports) > 0 Then
    MsgBox "L'importation a échoué pour les fichiers suivants :" & RapportImports, vbExclamation, "Rapport d'importation"
    Else
    MsgBox "Tous les fichiers sont importés, Good Job Guy !", vbInformation, "Rapport d'importation"
    End If
    End Function


    En orange : les lignes ajoutées
    En rouge : Ligne désactivée


    A vérifier car code non testé et à adapter si besoin...

    Philippe

  3. #3
    Membre confirmé
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Employé
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 86
    Par défaut Fichier protégé
    Bonjour et Merci Philben

    malheureusement je ne peux pas essayer le code , en effet , je suis en vacances et les fichiers que j'ai pris ne sont pas protégés hein! hein! et je n'arrive pas à convertir un fichier Dbf en protégé . je garde ta 1 iere solution

    Merci pour tout

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

Discussions similaires

  1. [Batch] Fichier à ne pas prendre en compte
    Par JiCeBe dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 28/08/2009, 11h33
  2. Réponses: 2
    Dernier message: 31/08/2007, 16h52
  3. ne pas prendre en compte la casse ni les accents
    Par pigpen dans le forum JDBC
    Réponses: 14
    Dernier message: 10/05/2007, 14h40
  4. [.NET] ne pas prendre en compte les "0"
    Par californialove dans le forum MFC
    Réponses: 16
    Dernier message: 05/06/2006, 10h05
  5. [XHTML] Ne pas prendre en compte les balises XHTML
    Par simnitch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/08/2005, 15h58

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