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

Contribuez Discussion :

[Sources] [VBA] Importation sélective Excel -> Access sans doublons


Sujet :

Contribuez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut [Sources] [VBA] Importation sélective Excel -> Access sans doublons
    Bonjour à tous !

    Alors, ce code résume la discussion que j'ai eu avec totofe et présente les dernières avancées auxquelles nous sommes arrivés, grâce à son entière contribution.
    Vu que c'est un thème assez abordé et que l'importation Excel -> Access est souvent utilisée, j'ai pensé que proposer ce code dans les sources pourrait aider pas mal de développeurs en herbe .

    Le code permet de copier les plages de cellules voulues d'un fichier Excel vers les champs voulus d'une table Access, en évitant le doublons.

    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
    Private Sub Commande1_Click()
    'Ici l'importation se déclenche en cliquant sur le bouton "Commande1"
    'mais on peut aussi mettre ce code à l'ouverture d'un formulaire
    Dim oApp As Excel.Application
    Dim oWkb As Excel.Workbook
    Dim oWSht As Excel.Worksheet
     
    Set oApp = CreateObject("excel.application")
    Set oWkb = oApp.Workbooks.Open("chemin_du_fichier_xls") 'mettez ici le chemin vers votre fichier Excel
    Set oWSht = oWkb.Worksheets("nom_de_la_feuille_concernée_par_limportation") 'mettez ici le nom de la feuille qui contient les données à importer
     
    'première ligne ou commence l'import
    i = 11
     
    'pour éviter les messages lors de l'ajout des enregistrements
    DoCmd.SetWarnings False
     
    'tant qu'on n'est pas arrivés à la ligne 600 du tableur
    While i < 600
    'on peut aussi arrêter l'importation lorsque le programme rencontre une case
    'vide en remplaçant la ligne du While par :
    'While oWSht.Range("I" & i).Value <> "" '(où I 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("*", "[nom_da_la_table_destination]", "[nom_du_champ_destination_qui_ne_doit_pas_avoir_de_doublons] LIKE '" & oWSht.Cells(i, 9) & "'") = 0 Then
    'le numéro 9 correspond au numéro de la colonne source, tel que : A=1, B=2, C=3 ...
     
    'requète SQL (avec en paramètre la ligne i et le numéro de la colonne comme précisé au-dessus)
    cSQL = "insert into [table_destination] ( [champ1], [champ2] ) values (" & Chr(34) & oWSht.Cells(i, 13) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 11) & Chr(34) & ");"
    'ici, on ne prend que les colonnes M (=13) et K (=11).
     
    'exécute la requète
    DoCmd.RunSQL cSQL
     
    End If
     
    'on incrémente la variable i pour passer à la ligne suivante
    i = i + 1
     
    Wend
     
    'on réactive les messages d'erreurs
    DoCmd.SetWarnings True
    Set oWSht = Nothing
    Set oWbk = Nothing
    Set oApp = Nothing
    End Sub
    Bon, tous les commentaires ne sont là que pour la compréhension du code, mais si vous aviez toutefois des questions, n'hésitez pas

  2. #2
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Salut,

    Si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.SetWarnings False
    il faut à la fin remettre
    Mais il y a peut être plus simple pour importer une partie des données Excel vers Access

  3. #3
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut
    Citation Envoyé par Lou Pitchoun Voir le message
    Salut,

    Si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.SetWarnings False
    il faut à la fin remettre
    Message édité !
    J'avais oublié le End Sub, aussi

  4. #4
    Invité de passage
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Par défaut
    Désolé d'arriver si tard mais estce que le bouton se place dans le fichier excel ??

  5. #5
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut
    Non, personnellement, je l'ai placé sur un formulaire sous Access

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    Bonjour. Désolé de déterrer ce post mais comme il m'a servi pour un projet, je tiens à faire part d'une remarque, tout fonctionne correctement mais ne serait-il pas judicieux de libérer la mémoire utilisée par les variables objet à la fin de la fonction?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set oWSht = Nothing
    Set oWbk = Nothing
    Set oApp = Nothing

Discussions similaires

  1. Importer Feuil Excel dans Access
    Par beurnoir dans le forum Access
    Réponses: 4
    Dernier message: 21/10/2009, 16h46
  2. problème pour importer données excel dans Access
    Par sarah67 dans le forum Access
    Réponses: 8
    Dernier message: 20/02/2006, 08h17
  3. Importer Feuil Excel dans Access
    Par beurnoir dans le forum Access
    Réponses: 2
    Dernier message: 27/10/2005, 14h13
  4. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 11h53
  5. PB importation classeur excel sous access 2003
    Par techinfo37 dans le forum Access
    Réponses: 6
    Dernier message: 04/10/2005, 20h41

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