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 excel vers access avec recherche données [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut Importation excel vers access avec recherche données
    Bonsoir a tous
    Etant novice dans la matière, je me dirige vers vous.
    je suis sur la création d'une petite base access.
    Je recherche un code VBA qui me permet importer des données Excel vers access, là j'ai réussit a trouver des exemples.
    Mon fichier excel a deux colonnes, la première le code de mon article et la deuxième le prix de mon article.
    je voudrais si cela est possible, que mon code recherche dans ma table access le code de mon article et qu'il remplace que le prix de l'artcile.
    Evidemment si le code n'est pas présent dans la table access il ne se passe rien

    J'espère que j'était assez claire dans mes explications.
    Je ne demande pas la solution toute faite, mais un petit coup pouce serait le bien venu.

    Merci a vous tous

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 241
    Points : 19 367
    Points
    19 367
    Billets dans le blog
    61
    Par défaut
    Bonsoir,

    Tu utilises l'automation en VBA pour parcourir ta feuille Excel, ligne par ligne.

    Pour chaque ligne tu copie la référence de l'article (Ref) et le prix (PU) dans 2 variables et ensuite,
    tu utilises par exemple DAO, pour mettre à jour le prix de l'article comme ceci:

    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
     
    Dim Ref as string
    Dim PU As Currency
    Dim db as DAO.Database
    Dim rs as DAO.RecordSet
     
    ' automation pour ouvrir Sheet1
     
    set db=currentdb
    set rs=db.Openrecordset("T_Article",dbopendynaset)
     
    i=2
     
    Do while sheet1.Cells(i,1).Value<>"" ' parcourt le fichier Excel
     
    Ref=Sheet1.cells(i,1)
    PU=Sheet1.cells(i,2)
     
    rs.FindFirst "RefArticle='" & Ref & "'" ' recherche l'article avec la même référence dans la table Access
     
       if not rs.NoMatch then ' si trouvé, met à jour le prix unitaire de l'article
          rs.Edit      
          rs!PU=PU
          rs.Update
       end if
     
    i=i+1 ' ligne suivant
     
    Loop
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    bonsoir et merci pour votre réponse
    Vue mon niveau je vais étudier ce code
    Le temps de le comprendre je met cette discussion comme résolu
    Désolé si je remet une discussion du même style

    Je suis toujours preneur d'exemples

    Encore merci et bonne soirée

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir a tous
    Il y a quelque temps je vous ai demandé de l'aide, je tenais a remercié User pour sa réponse.
    Donc voici le 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub MAJprix()
     
    Dim Ref As String
    Dim PU As Currency
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
     
    ' automation pour ouvrir Sheet1
     
    Set db = CurrentDb
    Set rs = db.OpenRecordset("TABmat", dbOpenDynaset)
     
    i = 2
     
    Do While Sheet1.cells(i, 1).Value <> "" ' parcourt le fichier Excel
     
    Ref = Sheet1.cells(i, 1)
    PU = Sheet1.cells(i, 2)
     
    rs.FindFirst "REFmat='" & Ref & "'" ' recherche l'article avec la même référence dans la table Access
     
       If Not rs.NoMatch Then ' si trouvé, met à jour le prix unitaire de l'article
          rs.Edit
          rs!PU = PU
          rs.Update
       End If
     
    i = i + 1 ' ligne suivant
     
    Loop
     
    End Sub
    Etant novice en code VBA j'ai commencé a lire des tutos, malheureusement beaucoup d'informations

    Voici ma première question:
    Comment faire pour indiquer le chemin complet de mon fichier excel.

    Merci a vous

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cSQL = "update MyTableAcces inner join [MaFeuilleExcel$] in 'c:\MyRepertoire\MyFichier.xlsx' 'excel 8.0;HDR=Yes;IMEX=1;' as frm on frm.REFmat=MyTableAcces.REFmat set MyTableAcces.Pu=frm.Pu;"
    CurrentDb.Execute cSQL
    Voici ma première question:
    Comment faire pour indiquer le chemin complet de mon fichier excel.
    Que veux tu dire par là?
    Dernière modification par Invité ; 03/06/2016 à 09h43.

  6. #6
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonjour py86acces, rdurupt et User,

    J'en profite pour ajouter ce bout de code...à toi py86acces de l'adapter à tes besoins...
    Par contre moi je n'arrive pas à compter le nombre de ligne de la feuil1 avant l'export...
    J'utilise pour l'instant un MsgBox, mais il y a une valeur Null...
    Ma question est :

    Comment compter avant d'exporter ?

    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
     
    Dim oApp As Excel.Application
    Dim oWkb As Excel.Workbook
    Dim oWSht As Excel.Worksheet
     On Error Resume Next
     
     
    '-----------------------------------------------------------------------------
       Dim Cn As ADODB.Connection
        Dim oCat As ADOX.Catalog
        Dim Fichier As String
        Dim Feuille As ADOX.Table
        Dim nblig As String
     
     Dim fd As Office.FileDialog
     
     
      ' Créer un objet FileDialog
      Set fd = Application.FileDialog(msoFileDialogOpen)
     
      ' Titre de la boîte de dialogue
      fd.title = "Sélectionnez le fichier - monfichier.xls -"
     
      ' Ne pas autoriser la sélection multiple
      ' (donc 1 seul fichier est sélectionnable à la fois)
      fd.AllowMultiSelect = False
     
      ' Texte du bouton
      fd.ButtonName = "Sélectionner"
     
      ' Nom du fichier de départ
      fd.InitialFileName = "monfichier.xls"
     
      ' Type de vue au départ
      fd.InitialView = msoFileDialogViewLargeIcons
     
      ' Afficher la boîte de dialogue
      If fd.Show() Then
      '  MsgBox "Vous avez sélectionné le fichier : " _
         ' & vbCrLf & fd.SelectedItems(1), vbInformation
     
     
     
        Fichier = fd.SelectedItems(1)
     
        Set Cn = New ADODB.Connection
        Set oCat = New ADOX.Catalog
     
        Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
     
        Set oCat.ActiveConnection = Cn
     
        On Error Resume Next
            'Vérifie si la feuille "Feuil1" existe dans le classeur fermé
            Set Feuille = oCat.Tables("Feuil1$")
         'ici calcul le nombre de ligne
            nblig = sheet.Range("C65536").End(xlUp).Row
     
        On Error GoTo 0
     
            If Feuille Is Nothing Then
             MsgBox "Dans le classeur - monfichier.xls - la (Feuil1) n'existe pas..."
             Else
     
       'essai du nombre de ligne
       MsgBox nblig
     
    '-----------------------------------------------------------------------------
     
    Set oApp = CreateObject("excel.application")
    Set oWkb = oApp.Workbooks.Open(fd.SelectedItems(1))
    Set oWSht = oWkb.Worksheets("Feuil1")
    'premier ligne ou tu commence ton import
    I = 2
     
    'pour éviter les messages lors de l'ajout des enregistrements
    DoCmd.SetWarnings False
     
    'tant que la cellule n'est pas vide
    While oWSht.Range("C" & I).Value <> ""
     
      cSQL = "insert into [ICI ma table] ( [colonne1], [colonne2], [colonne3], [colonne4], [colonne5], [colonne6] ) values (" & Chr(34) & oWSht.cells(I, 1) & Chr(34) & ", " & Chr(34) & oWSht.cells(I, 2) & Chr(34) & ", " & Chr(34) & oWSht.cells(I, 3) & Chr(34) & ", " & Chr(34) & oWSht.cells(I, 4) & Chr(34) & ", " & Chr(34) & oWSht.cells(I, 5) & Chr(34) & ", " & Chr(34) & oWSht.cells(I, 6) & Chr(34) & ")"
     
    'exécute la requète
      DoCmd.RunSQL cSQL
     
     
      I = I + 1
    Wend
     
    DoCmd.SetWarnings True
    '-----------------------------------------------------------------------------
     
     End If
      Set fd = Nothing
     
     End If
     
        Set Feuille = Nothing
        Set oCat = Nothing
        Cn.Close
        Set Cn = Nothing
    Merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    prsonnelement je vois plus comme ça!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cSQL = " INSERT INTO [MaFeuilleExcel$] in 'c:\MyRepertoire\MyFichier.xlsx' 'excel 8.0;HDR=Yes;IMEX=1;' as frm left join on MyTableAcces.REFmat =frm.REFmat (MyTableAcces.REFmat ,MyTableAcces.pu) values(frm.REFmat ,frm.Pu) where MyTableAcces.REFmat  is null;"
    CurrentDb.Execute cSQL
    Dernière modification par Invité ; 03/06/2016 à 13h06.

  8. #8
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonjour rdurupt,

    Très bien je ne te contredit pas...
    Disons que pour mon exemple le fichier excel possède beaucoup de colonnes et cela laisse le choix de celles que l'on veut importer.
    Si je peux me permettre, comment pourrais-je compter avant d'exporter ?

    Merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    Disons que je suis dans Access (CurrentDb), je peux bien évidemment faire une requête Access, mais je peux faire un liason externe.

    Si je fais une liaison externe vers une autre base Access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[MyTable] in 'c:\MyRepertoire\MyFichier.accdb"
    La j'utilise le même driver que la connexion CurrentDb, je n'ai pas à précis le driver.

    Si j'utilise une base d'un autre format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[MaFeuilleExcel$] in 'c:\MyRepertoire\MyFichier.xlsx' 'excel 8.0;HDR=Yes;IMEX=1;' as frm"
    La je précise le nom du driver comme dans le connecstring.

    Notes au je peux faire des jointures avec plusieurs types de formats , ainsi dans la même requête je peux joindre un fichier Csv avec une table Sql Serveur et un fichier Excel et insérer le tout en création de table Access.

    Il n'y a pas de limite dans le délire.

    Tu peux bien évidement faire des requête imbriquées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select * From (Select * From MaFeuilleExcel$] in 'c:\MyRepertoire\MyFichier.xlsx' 'excel 8.0;HDR=Yes;IMEX=1;') as frm"

    Tu peux faire un requête de regroupement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select REFmat,Count(REFmat)  From (Select * From MaFeuilleExcel$] in 'c:\MyRepertoire\MyFichier.xlsx' 'excel 8.0;HDR=Yes;IMEX=1;') Where REFmat = 'Toto'  Group By REFmat Having Count(REFmat)>2"
    une fois que tu as identifé ta jointure extene tu la traite comme une table faisant parti intégrale de ta base de données! si du place le script Sql de ta jointure Externe dans le requêteur d'Acces tu te rendras compte que tu la gère comme une table Access!
    Dernière modification par Invité ; 03/06/2016 à 13h58.

  10. #10
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    OK

    Bonsoir a tous et merci pour votre intérêt
    Là, vue mon niveau de compétence je vais prendre le temps de regardé vos réponses

    Pour ma part, mon fichier excel n'a que deux colonnes REF et PRIX et le nombre de ligne est variable, cela dépendra des données envoyé par nos fournisseurs.
    Le but, est que le code recherche les REF identique entre ma TABLE access et mon fichier excel et qu'il remplace remplace que les prix de ma table access par ceux de mon fichier excel.

    Si vous avez encore des codes dans ce sens je suis preneur pour les décortiquer.
    Encore un grand merci a vous
    Bonne soirée.

  11. #11
    Invité
    Invité(e)
    Par défaut

    bonsoir,
    Le but, est que le code recherche les REF identique entre ma TABLE access et mon fichier excel et qu'il remplace remplace que les prix de ma table access par ceux de mon fichier excel.
    Mon code au poste #5 fait exactement ça et il ne fait que 2 lignes!

  12. #12
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    une fois que tu as identifé ta jointure extene tu la traite comme une table faisant parti intégrale de ta base de données! si du place le script Sql de ta jointure Externe dans le requêteur d'Acces tu te rendras compte que tu la gère comme une table Access!
    Merci pour tes explications, effectivement cela permet de travailler sur le fichier excel...
    J'obtiens le nombre de ligne sans soucis...


    Dans tout ça, j'espère que (py86acces) tu as trouvé ce que tu cherchais....car j'ai quand même profiter de ta demande pour résoudre le miens.

    Cordialement,

  13. #13
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonjour et encore merci rdurupt


    Je pense que je dois faire les choses de travers, miles excuses
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function MAJprix()
    cSQL = "update TABmat inner join [FEUIL1$] in 'C:\Users\yohann.perrin\Desktop\GEST MAT\MAJprix.xls' 'excel 8.0;HDR=Yes;IMEX=1;' as frm on frm.REFmat=TABmat.REFmat set TABmat.PRIXmat=frm.PRIXmat;"
    CurrentDb.Execute cSQL
    End Function
    J'ai un message
    Nom : &.jpg
Affichages : 846
Taille : 95,9 Ko

    Pourquoi
    La je suis perdu et un peu lourdé

    Merci d'avance

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    désolé!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cSQL = "UPDATE (SELECT * From   [FEUIL1$]  IN 'C:\Users\Robert\Desktop\MAJprix.xls' 'excel 8.0;HDR=Yes;IMEX=1;')  AS frm INNER JOIN TABmat ON frm.REFmat = TABmat.REFmat SET TABmat.PRIXmat = [frm].[PRIXmat];"
    Pareil place le script Sql dans le requêteur pour voir la tête de ta requête!
    Images attachées Images attachées  
    Dernière modification par Invité ; 05/06/2016 à 17h51.

  15. #15
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir et encore merci pour ta patience
    Donc i j'ai bien compris
    je met le code sql dans une requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE (SELECT * FROM [FEUIL1$] IN 'C:\ESSAI\MAJprix.xls'[excel 8.0;HDR=Yes;IMEX=1;])  AS frm INNER JOIN TABmat ON frm.REFmat = TABmat.REFmat SET TABmat.PRIXmat = [frm].[PRIXmat]
    Encore des excuses mais pourquoi le message suivant
    Nom : s.png
Affichages : 833
Taille : 217,0 Ko

    merci

  16. #16
    Invité
    Invité(e)
    Par défaut
    test comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE (SELECT * FROM [FEUIL1$] IN 'C:\ESSAI\MAJprix.xls' 'excel 8.0;HDR=Yes;IMEX=1;')  AS frm INNER JOIN TABmat ON frm.REFmat = TABmat.REFmat SET TABmat.PRIXmat = [frm].[PRIXmat]
    si tu regarde l'image que j'ai joint c;est Ok, donc ça doit fonctionner chez toi on ce rapproche!

  17. #17
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonjour rdurupt,

    Peux-tu m'aider sur ce code :
    Je place le script Sql dans le requêteur et ça fonctionne....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM [Feuil1$] in 'C:\Users\Bruno\Documents\fichier.xls' 'excel 8.0;HDR=Yes;IMEX=1;'
    Je fais ma requête comme ceci et ça fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cSQL = "INSERT INTO [Tble_IDC_clients] SELECT * FROM [Feuil1$] in 'C:\Users\Bruno\Documents\fichier.xls' 'excel 8.0;HDR=Yes;IMEX=1;'"
     CurrentDb.Execute cSQL
    Par contre, si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Users\Bruno\Documents\fichier.xls
    par et là, problème !
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MesgBox strFichierExcel
    J'obtiens bien (C:\Users\Bruno\Documents\fichier.xls)...!

    En fait le SQL me sort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Users\Bruno\Documents\strFichierExcel
    Comment dois-je faire ?

    Merci

  18. #18
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir a tous
    J'ai tous remit a plat, nouveau fichier excel au format xlsx avec format texte pour la colonne REFmat et monétaire pour ma colonne REFprix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE (SELECT * FROM [FEUIL1$] IN 'C:\ESSAI\classeur1.xlsx'[excel 8.0;HDR=Yes;IMEX=1;])  AS frm INNER JOIN TABmat ON frm.REFmat = TABmat.REFmat SET TABmat.PRIXmat = [frm].[PRIXmat];
    Tout est OK
    Merci a rdurupt, BRUNO71 et User

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cSQL = "INSERT INTO [Tble_IDC_clients] SELECT * FROM [Feuil1$] in '" & strFichierExcel &  "' 'excel 8.0;HDR=Yes;IMEX=1;'"
     CurrentDb.Execute cSQL

  20. #20
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut Import de données excel vers access avec une condition Where
    Bonjour,

    Un an après, j'espère trouver une oreille attentive. ^^

    J'essaye sans succès d'adapter les codes que vous avez proposé au dessus.

    Dans ma situation j'ai un fichier Excel qui me permet d'alimenter une table Access "T_PlanDoc". Toutes les colonnes de l'excel ne m'intéresse pas, je dois donc les spécifier.
    De même, toutes les lignes ne m'intéressent pas, j'aimerai donc placer une condition where.

    Voilà le code que j'ai trouvé. Je l'apprécie car il permet de bien sectionner chaque parties de la reqûete mais ça pose problème car j'ai des erreur du type "il manque un point virgule à la fin de votre requête SQL" ou au contraire "des caractères ont été rencontrés après le point virgule"...
    Pour info les deux premières lignes de ma requête SQL fonctionne. Le problème intervient lorsque j'insère la clause where ou from

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        '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 " & StrNomTable & "( [NumDoc], [Livrable], [Jalon], [DateS1], [DateA1], [DateS2], [DateA2], [DateS3], [DateA3], [A_consulter],[Version] )"    'Definition des champs de la table Access à compléter
        cSQL = cSQL & "VALUES (" & Col1 & ", " & Col2 & ", " & Col3 & ", " & Col4 & ", " & Col5 & ", " & Col6 & ", " & Col7 & ", " & Col8 & ", " & Col9 & ", " & Col10 & "," & Col11 & ");"    'Définition des champs Excel à importer.
        'cSQL = cSQL & "FROM [Plan Documentaire] in '" & strFIchierExcel & "' 'excel 8.0;HDR=no;IMEX=1;';"
        'cSQL = cSQL & "WHERE (" & Col10  Is Not Null & ");"
     
     
        'exécute la requète
        DoCmd.RunSQL cSQL


    J'ai également essayé cette ligne directement mais elle est dure à apréhender et on me dit qu'il y a un problème car j'ai une virgule dans la définition des champs à importer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cSQL = "INSERT INTO " & StrNomTable & "( [NumDoc], [Livrable], [Jalon], [DateS1], [DateA1], [DateS2], [DateA2], [DateS3], [DateA3], [A_consulter],[Version] )_
     SELECT (" & Col1 & ", " & Col2 & ", " & Col3 & ", " & Col4 & ", " & Col5 & ", " & Col6 & ", " & Col7 & ", " & Col8 & ", " & Col9 & ", " & Col10 & ", " & Col11 & ")_
     FROM [Plan Documentaire] in '" & StrNomFichier & "' 'excel 8.0;HDR=Yes;IMEX=1 _
    WHERE Chr(34) & oWSht.Cells(i, 34) & Chr(34)  is not null;"


    Merci de votre aide

    Moriceot

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2003] Import Excel vers Access avec choix du répertoire et du fichier *.xls
    Par jeanpierre78 dans le forum IHM
    Réponses: 12
    Dernier message: 19/10/2011, 13h14
  2. Réponses: 3
    Dernier message: 06/05/2011, 12h39
  3. Réponses: 25
    Dernier message: 26/04/2011, 14h58
  4. Réponses: 3
    Dernier message: 13/03/2010, 23h37
  5. import excel vers access avec bouton "parcourir"
    Par zeloutre dans le forum Access
    Réponses: 3
    Dernier message: 04/04/2007, 20h06

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