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 :

Importer fichier Excel dans Access avec contrôle sur champ numérique


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Importer fichier Excel dans Access avec contrôle sur champ numérique
    Bonjour à tous,

    Avant toute chose, je m'excuse si ma question est triviale (je suis débutant). Voilà mon problème:

    - je dispose d'une base de donnée Access avec une table ayant les colonnes 1- Clef primaire "ID" / 2- Champs texte "Nom" / 3- Champs numérique "Nº de série"

    - je dispose d'un fichier Excel possédant 2 champs 1- Champs texte "Nom" / 2- Champs texte "Nº de série"

    - je souhaite importer le fichier Excel dans ma table Access avec les règles de gestion suivantes. 1) rejeter les lignes dont le contenu du nº de série est déjà dans l'Access 2) créer les autres lignes (avec génération automatique de la clef primaire par Access)


    Pouvez vous me confirmer avant tout de chose que c'est possible? Et si quelqu'un a le courage de m'expliquer...


    Merci beaucoup!

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonsoir,
    C'est possible en 2 temps
    1) Importer les données de la feuille Excel dans une table ou lier la feuille Excel
    2) Créer une requête Ajout qui doit ressembler à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO Table1 ( nom, ID ) SELECT Feuil1.nom, Feuil1.ID FROM Feuil1 LEFT JOIN Table1 ON Feuil1.nom = Table1.nom WHERE (((Table1.nom) Is Null));

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 353
    Points : 23 819
    Points
    23 819
    Par défaut
    Oui c'est possible, ce qui m'intrigue dans ta question c'est le
    (avec génération automatique de la clef primaire par Access)
    Souhaites-tu
    1. que Access donne un numéro de série ou
    2. qu'il récupère celui que tu lui donnes lors de l'importation.


    Si c'est 2) comme je le pense, le plus simple est de définir ta table et d'indiquer que le numéro de série est la clef primaire de ta table. (En mode design, choisir le champ NoSerie et appuyer sur l'icône clef).

    Une clef primaire est TOUJOURS unique donc si tu essayes de mettre 2 fois le même numéro de série Access va rejeter ton energistrement. Il te suffira d'ignorer les erreurs et tu auras une table 'propre'.

    Si c'est 1), cela va être un peu plus complex.

    A+

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour. Avant tout, merci pour vos premières réponses.

    En fait ce n'est ni 1) ni 2). Dans ma base Access, j'ai 3 champs:
    - une clef primaire gérée par Access (qui s'incrémente automatiquement lorsque je crée une nouvelle entrée dans ma base)
    - un champ Nom (description du produit)
    - un champ Nº de série qui n'est pas une clef. De fait, il n'est pas unique dans ma table access (je peux avoir un même nº de série sur plusieurs entrées).

    L'Excel comporte 2 colonnes: le nº de série et un nom. Je souhaite qu'à l'import le contrôle soit fait entre le champ nº de série de l'Excel et nº de série de l'Access (qui n'est pas une clef). C'est jouable?

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 230
    Points : 129
    Points
    129
    Par défaut
    Bonjour chumo,

    J'ai également eu besoin d'importer des données d'excel vers access. et je devais respecter l'ordre des colonnes...

    Je vais te donner mon code qui permet d'importer facilement tes données.


    tu peux également aller voir sur ce post : ICI


    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    Private Sub LeNomDUBoutonCmd_Click()
     
    Dim oApp As Excel.Application
    Dim oWkb As Excel.Workbook
    Dim oWSht As Excel.Worksheet
    Dim i As Long, strTrc As String
    Dim db As DAO.Database, rsDest As DAO.Recordset
    Dim fDlg As Office.FileDialog, strFichier As String
     
    On Error GoTo ErrH:
     
    ' --------------------------
    ' Selection du fichier Excel
    ' --------------------------
    Set fDlg = Application.FileDialog(msoFileDialogOpen)
    ' Définition du ou des filtres
    fDlg.Filters.Clear
    fDlg.Filters.Add "Fichier Excel", "*.xl*"
    ' Dossier de départ
    fDlg.InitialFileName = CurrentProject.Path
    ' Type d'affichage
    fDlg.InitialView = msoFileDialogViewList
    If fDlg.Show Then
       strFichier = fDlg.SelectedItems(1)
    End If
    Set fDlg = Nothing
    ' Si l'utilisateur a cliqué sur Annuler quitter la procédure
    If Len(strFichier) = 0 Then Exit Sub
     
     On Error GoTo ErrH:
    ' --------------------------
    ' Ouverture du fichier Excel
    ' --------------------------
    Set oApp = CreateObject("excel.application")
    Set oWkb = oApp.Workbooks.Open(strFichier)   'Fichier sélectionné par l'utilisateur
    Set oWSht = oWkb.Worksheets("Feuil1") 'mettre ici le nom de la feuille excel qui contient les données à importer
     
    ' On ouvre un recordset sur la table dans laquelle on veut
    ' ajouter des enregistrements
    Set db = CurrentDb
    Set rsDest = db.OpenRecordset("T_ImportExcel", dbOpenDynaset)
     
    'première ligne ou commence l'import 
    '(ligne 2 car les titres des colonnes se trouvent sur la ligne 1 dans mon cas)
    i = 2
     
    'Tant que la colonne 1 (A) n'est pas vide
    While Len(oWSht.Cells(i, 1).Text) > 0
     
        '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 
        '(Dans ce cas : Ma table de destination ([T_import excel] et  le champ [N° de DOSSIER] ) 
       'si la donnée de la la colonne 7 de mon fichier excel est en doublon 
       ' avec le champ de ma table alors pas d'importation de l'enregistrement
        If DCount("*", "[T_ImportExcel]", "[N° de DOSSIER] = " & oWSht.Cells(i, 7)) = 0 Then
     
     
        'le numéro 1 correspond au numéro de la colonne source, tel que : A=1, B=2, C=3 ...
           rsDest.AddNew
           strTrc = "Champ [Nom]" ' <-- champ de ta table
             rsDest("NOM") = oWSht.Cells(i, 1) '<--Nom de la colonne dans excel
     
           strTrc = "Champ [NUMERO dossier]"
             rsDest("DOSSIERNum") = oWSht.Cells(i, 2)
     
    'tu répètes ces 2 lignes ci dessus au temps de fois que tu as de colonnes à importer (dans cet exemple j'importe la colonne 1 et 2)
     
           strTrc = "Sauver Nouvel Enregistrement"
           rsDest.Update
        End If
        strTrc = ""
        'on incrémente la variable i pour passer à la ligne suivante
        i = i + 1
    Wend
     
    Sortie:
    Set oWSht = Nothing
    If Not (oWkb Is Nothing) Then oWkb.Close False
    Set oWkb = Nothing
    If Not (oApp Is Nothing) Then oApp.Quit
    Set oApp = Nothing
    If Not (rsDest Is Nothing) Then rsDest.Close
    Exit Sub
    DoCmd.OpenQuery "requetajout"
    ErrH:
    Select Case Err.Number
        Case 3022 ' Risque de doublon - Violation Clé/Index unique
             ' on annule l'ajout et on continue
             rsDest.CancelUpdate
             Resume Next
        ' Erreur ignorées. Pour les prendre en compte, mettre en commentaire
        ' l'instruction Resume Next
        Case 3163 ' Le champ est trop petit pour accepter la quantité de données que vous voulez ajouter
             Resume Next
        Case 3349 ' Dépassement de capacité sur un champ numérique
             Resume Next
        Case 3421 ' Erreur de conversion de type
             Resume Next
        Case 3075
             Resume Next
    End Select
     
    MsgBox "Erreur No. " & Err.Number & " : " & Err.Description, , _
           "Ligne " & i & ". " & strTrc
    Resume Sortie
     
    End Sub
    en espérant t'aider

    cordialement

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Genial. Je teste tout ça et vous tien au courant. Merci!!

Discussions similaires

  1. [AC-2010] Importation fichier excel dans access
    Par benoaa dans le forum VBA Access
    Réponses: 10
    Dernier message: 03/07/2014, 14h39
  2. [AC-2003] Importation d'un fichier excel dans Access avec traitement
    Par Mishe dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/03/2013, 16h23
  3. Importer un fichier excel dans access avec découpage en tables
    Par taz_wanted dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/05/2011, 09h46
  4. Importation fichier excel dans Access
    Par bovins dans le forum VBA Access
    Réponses: 11
    Dernier message: 22/05/2009, 14h55
  5. Import fichier Excel dans Access
    Par MYNOTAURE dans le forum Access
    Réponses: 1
    Dernier message: 11/03/2007, 13h43

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