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 :

Importation fichier excel dans access [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Par défaut Importation fichier excel dans access
    Bonjour à tous,

    Je souhaiterais importer un fichier excel dans ma base de données en éliminant les doublons, je suis sous access VBA avec le code suivant :

    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
    Private Sub Importer()
     
    '***********************************************************
    'VARIABLES LOCALES
    Dim SQL As String
    Dim MaCle As Integer, n As Integer, i As Integer
     
    '************************************************************
    'OUVERTURE DE LA BASE ET INITIALISATIONS
    Dim BD As DAO.Database
    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
     
    Set BD = CurrentDb()
    Set rst1 = BD.OpenRecordset("MaTable", DB_OPEN_DYNASET)
    Set rst2 = BD.OpenRecordset("MaTable", DB_OPEN_TABLE)
     
    '************************************************************
    'OUVERTURE DU FICHIER EXCEL ET INITIALISATIONS
    Dim appExcel As Excel.Application
    Dim wbExcel As Excel.Workbook
    Dim wsExcel As Excel.Worksheet
     
    Set appExcel = CreateObjet("Excel.Application")
    Set wbExcel = appExcel.Workbooks.Open("C:\chemin\importer.xls")
    Set wsExcel = wbExcel.Worksheets(1)
     
    Dim DerniereLigne As Integer
    DerniereLigne = wsExcel.Range("A1").End(xlDown).Row
    '************************************************************
     
        For i = 1 To DerniereLigne
     
            MaCle = wsExcel.Cells(i, 1).Value
            SQL = "SELECT COUNT (*) FROM Operations WHERE Operations.serie =" & MaCle & " ;"
            Set rst1 = DB.OpenRecordset(SQL, BDReadOnly)
     
            If rst1 = 0 Then ' Ajout de l'enregistrement à la table si la cle n'est pas présente dans la table
                  rst2.AddNew
                      rst2![cle] = MaCle
                  rst2.Close
           End If
        Next i
    End Sub

    J'ai un problème sur le bloc d'ouverture du fichier Excel : "type défini par l'utilisateur non défini". Comment palier à ce problème?
    Pourriez vous également m'orienter concernant les RecordSet utilisés, j'ai lu un tutoriel sans conviction quant au code émi.

    Merci pour vos suggestions

    BH

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Déjà, mettre une gestion d'erreur serait le moyen de savoir où ça plante...

    Ensuite, il te faut qualifier les objets à chaque fois ou alors utiliser des blocs With/End With à partir du moment où l'objet Cells est utilisé car il peut appartenir à plusieurs parents.

    Par ailleurs, si .AddNew est utilisé, un .Update serait le bienvenue si tu veux que tes données soient insérées...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Par défaut
    J'ai trouvé un code similaire reprenant tes solutions, cependant, une erreur persiste sur le bloc déclaration des variables
    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
    79
    80
    81
    82
    83
     
    Private Sub ImportXL()
    'La fonction renvoie vrai si l'import réussit et faux dans le cas contraire
     
     Dim xlPath As String 'xlPath : chemin du fichier Excel
     Dim wsName As String 'wsName : nom de la feuille Excel qui contient les données à importer
     Dim startRow As Integer 'startRow : ligne du fichier Excel où commence l'import
     Dim pKeyCol1 As String 'pKeyCol : colonne du fichier Excel qui est la première clé primaire de la table Access
     Dim pKey1 As String 'pKey : nom du champ "identifiant"
     Dim pKeyCol2 As String 'pKeyCol : colonne du fichier Excel qui est la seconde clé primaire de la table Access
     Dim pKey2 As String 'pKey : nom du champ "identifiant"
     Dim acTable As String 'acTable : table Access qui reçoit les données
     
     
     xlPath = "C:\chemin...xls"
     wsName = "Feuil1"
     startRow = 1
     pKey1 = "MaCle1"
     pKey2 = "MaCle2"
     pKeyCol1 = "A"
     pKeyCol2 = "B"
     acTable = "MaTable"
     
        'active la routine de gestion d'erreur.
    On Error GoTo erreur
     
        'déclaration des variables
        Dim app As Excel.Application
        Dim wkb As Excel.Workbook
        Dim wks As Excel.Worksheet
     
        'initialisation des variables
        Set app = New Excel.Application
        Set wkb = app.Workbooks.Open(xlPath)
        Set wks = wkb.Worksheets(wsName)
     
        Dim i As Integer, SQL As String
        i = 1
     
        'pour éviter les messages lors de l'ajout des enregistrements
        DoCmd.SetWarnings False
     
        With wks
            'arrêter l'importation lorsque l'on rencontre une case vide
            While .Range(pKeyCol & i).Value <> "" '(où pKeyCol représente la colonne et i la ligne)
     
                'condition de remplissage de la table => eviter les doublons
                'si l'enregistrement existe déjà dans la table destination,
                'on passe à la ligne suivante sans l'importer
                If DCount("*", acTable, pKey1 & " LIKE '" & .Range(pKeyCol1 & i).Value & "' AND " & pKey2 & " LIKE '" & .Range(pKeyCol2 & i).Value & " '") = 0 Then
     
                    'requête SQL (ajouter autant de champs que nécessaire)
                    SQL = "INSERT INTO " & acTable & " ( [MaCle1], [MaCle2] ) VALUES (" & Chr(34) & .Range("A" & i) & Chr(34) & ", " & Chr(34) & .Range("B" & i) & Chr(34) & ");"
                    DoCmd.RunSQL SQL
     
                End If
     
                'on incrémente la variable i pour passer à la ligne suivante
                i = i + 1
            Wend
     
        End With
     
     '*****************************************************
     
        'on réactive les messages d'erreurs
        DoCmd.SetWarnings True
     
        'libération variables
        Set wks = Nothing
        Set wkb = Nothing
        Set app = Nothing
     
        MsgBox "Import du fichier Excel réussi.", vbInformation + vbOKOnly, "Opération terminée..."
     
     
        Exit Sub
     
    erreur:    ' Routine de gestion d'erreur.
        MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbInformation
        ImportXL = False
     
    End Sub
    Auriez vous une idée sur ce problème?
    Merci à tous

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    acTable est le nom d'une constante Access, il faut que tu changes celui-ci.

    Philippe

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Par défaut
    Très bien j'ai pris en compte le changement, je n'ai plus de problème avec la déclaration de variable, le code s'execute.
    Cependant lorsque je le teste sur un fichier correcte, j'ai une erreur 1004 : La méthode 'Range' de l'objet '_Worksheet' a échouée.

    Sauriez vous d'où vient ce problème?

    Cdl,

    B

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Par défaut
    C'est bon l'import marche, l'erreur est humaine, par contre je ne peux ni ouvrir, ni supprimer le fichier excel après l'import, auriez vous es suggestions à me proposer.

    Cdl,

    B

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/11/2010, 12h36
  2. Importation fichier excel dans Access
    Par bovins dans le forum VBA Access
    Réponses: 11
    Dernier message: 22/05/2009, 14h55
  3. Import fichier Excel dans Access
    Par MYNOTAURE dans le forum Access
    Réponses: 1
    Dernier message: 11/03/2007, 13h43
  4. Pb Importation de fichiers Excel dans Access
    Par elkhy dans le forum Access
    Réponses: 8
    Dernier message: 22/05/2006, 17h33
  5. Réponses: 7
    Dernier message: 23/11/2005, 18h20

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