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 :

[AC 2010] Vérifier les entêtes de champ d'une table avant import


Sujet :

VBA Access

  1. #21
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,
    Je vois dans ton code que c'est TestFichierExcel qui conditionne le passage dans ce message.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vbFormatOk = TestFichierExcel(vsFicName, vsTableName)
    Il faut voir ce que fait ce test.

    Le débogage peut t'aider à comprendre et à devenir autonome.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  2. #22
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    bonjour,

    Le plus simple c'est de poster une version de ta base ou juste de ton formulaire avec tes chemins, etc ...
    Ou fait aussi une capture écran de ton formulaire que l'on puisse mieux comprendre ce qui se passe
    @+


    Pensez au tag

  3. #23
    Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 69
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    j'ai finalement débogué le code :

    j'ai placé ce code dans un module nommé Import excel :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Compare Database
    Option Explicit
     
    Function TestFichierExcel(ByVal FileName As String, ByVal TableName As String) As Boolean
    Dim MaFeuille As Excel.Worksheet
    Dim I As Integer
    Dim Appex As Excel.Application
    Dim wbExcel As Excel.Workbook
    Dim wsExcel As Excel.Worksheet
    Set Appex = CreateObject("Excel.Application")
     
    Dim vbFormatOk As Boolean
    I = 1
     
        'On ouvre excel en mode caché
        Appex.Application.Visible = False
        Appex.Workbooks.Open FileName
     
        With Appex
            vbFormatOk = True
            While I < CurrentDb.TableDefs(TableName).Fields.Count And vbFormatOk
                If Replace(CurrentDb.TableDefs(TableName).Fields(I).Name, "#", ".") <> .Cells(1, I + 1) Then
                    vbFormatOk = False
                End If
                I = I + 1
            Wend
            If vbFormatOk Then
                vbFormatOk = (.Cells(1, I + 1) = "") 'test si la colonne suivante est bien vide
            End If
        End With
     
        'On ferme excel
        Appex.Application.Quit
     
        TestFichierExcel = vbFormatOk
     
    End Function
     
    Sub ImportFichierExcel(ByVal FileName As String, ByVal TableName As String)
     
        Dim appExcel As Excel.Application
        Dim wbExcel As Excel.Workbook
        Dim wsExcel As Excel.Worksheet
     
        Set appExcel = CreateObject("Excel.Application")
        Set wbExcel = appExcel.Workbooks.Open(FileName)
        Set wsExcel = wbExcel.Worksheets(1)
     
        DoCmd.TransferSpreadsheet acImport, 8, TableName, FileName, True
     
        Set wbExcel = Nothing
        Set wsExcel = Nothing
        Set appExcel = Nothing
     
    End Sub
    Enfin j'ai placé le reste du code dans mon formulaire :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Private Sub btn_import_Click()
     
    If IsNull(Me.Txt_path1) Or IsNull(Me.txt_path2) Or IsNull(Me.txt_path3) Then
        MsgBox "Les fichiers ne sont pas sélectionnés.", vbCritical, "Manque infos"
        Exit Sub
    End If
     
    ImportTousFichiersExcel
     
    End Sub
     
     
    Sub ImportTousFichiersExcel()
    Const cnNbrFichier = 3
    Dim I As Integer
     
    Dim vsFicName As String
    Dim vsTableName As String
    Dim vbFormatOk As Boolean
    I = 1
    vbFormatOk = True
     
        While I <= cnNbrFichier And vbFormatOk
            If IsNull(Me.Controls("txt_path" & I)) Then
                MsgBox "Fichier non saisi", vbCritical, "Manque Infos"
                Exit Sub
            End If
            vsFicName = Me.Controls("txt_path" & I)
            vsTableName = Choose(I, "Import Situation Commandes et Livraisons", "Import Reste à Livrer Interdiv", "Import OTD Interdiv ZM13")
            vbFormatOk = TestFichierExcel(vsFicName, vsTableName)
            I = I + 1
        Wend
     
        If vbFormatOk Then
            For I = 1 To cnNbrFichier
                vsFicName = Me.Controls("txt_path" & I)
                vsTableName = Choose(I, "Import Situation Commandes et Livraisons", "Import Reste à Livrer Interdiv", "Import OTD Interdiv ZM13")
                ImportFichierExcel vsFicName, vsTableName
            Next
     
            'Lancement des requêtes de MAJ
            DoCmd.SetWarnings False
            DoCmd.OpenQuery "MAJ-01"
            DoCmd.OpenQuery "MAJ-02"
            DoCmd.OpenQuery "MAJ-04"
            DoCmd.OpenQuery "MAJ-05"
            DoCmd.OpenQuery "MAJ-06"
            DoCmd.OpenQuery "MAJ-08"
            DoCmd.OpenQuery "MAJ-09"
            DoCmd.OpenQuery "MAJ-10"
            DoCmd.OpenQuery "MAJ-11"
            DoCmd.OpenQuery "MAJ-12"
            DoCmd.OpenQuery "MAJ-133"
            DoCmd.OpenQuery "MAJ-14"
            DoCmd.OpenQuery "MAJ-15"
            DoCmd.OpenQuery "MAJ-16"
            DoCmd.OpenQuery "MAJ-17"
            DoCmd.OpenQuery "MAJ-18"
            DoCmd.OpenQuery "MAJ-19"
            DoCmd.OpenQuery "MAJ-20"
            DoCmd.OpenQuery "MAJ-2110"
            DoCmd.OpenQuery "MAJ-2111"
            DoCmd.OpenQuery "MAJ-2112"
            DoCmd.OpenQuery "MAJ-22"
            DoCmd.OpenQuery "MAJ-23"
            DoCmd.OpenQuery "MAJ-24"
            DoCmd.OpenQuery "MAJ-25"
            DoCmd.OpenQuery "MAJ-26"
            DoCmd.OpenQuery "MAJ-27"
            DoCmd.OpenQuery "MAJ-28"
            DoCmd.OpenQuery "MAJ-29"
            DoCmd.SetWarnings True
     
            MsgBox "L'importation est terminée"
        Else
            MsgBox "Le format du fichier Excel : '" & vsFicName & vsTableName & "' n'est pas conforme !", vbExclamation
        End If
    End Sub
    Encore un énorme merci pour votre aide.

    Par contre j'ai un soucis avec les fichiers Excel ouvert lors de l'import qui restent dans les processus actif du gestionnaire des tâches. Mais la procédure d'import fonctionne correctement.

  4. #24
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Pourquoi tu fais de l'automation si tu utilises une fonction ACCESS de transfert ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #25
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Effectivement c'est normal que tes fichiers restent ouvert dans Excel car tu ne referme par ton application dans ton code :
    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
    Sub ImportFichierExcel(ByVal FileName As String, ByVal TableName As String)
     
        Dim appExcel As Excel.Application
        Dim wbExcel As Excel.Workbook
        Dim wsExcel As Excel.Worksheet
     
        Set appExcel = CreateObject("Excel.Application")
        Set wbExcel = appExcel.Workbooks.Open(FileName)
        Set wsExcel = wbExcel.Worksheets(1)
     
        DoCmd.TransferSpreadsheet acImport, 8, TableName, FileName, True
     
        Set wbExcel = Nothing
        Set wsExcel = Nothing
        Set appExcel = Nothing
     
    End Sub
    La seule ligne qui te sert est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub ImportFichierExcel(ByVal FileName As String, ByVal TableName As String)
         DoCmd.TransferSpreadsheet acImport, 8, TableName, FileName, True
    End Sub
    @+


    Pensez au tag

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/12/2007, 19h06
  2. [DB2]Obtenir tous les noms des champs d'une table
    Par ptr83 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/11/2006, 09h31
  3. Réponses: 5
    Dernier message: 11/08/2006, 16h43
  4. Réponses: 2
    Dernier message: 01/08/2006, 13h38
  5. [MySQL] Supprimer les informations des champs dans une table (suite)
    Par snakejl dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 26/05/2006, 15h37

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