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

Access Discussion :

extraction de données excel pour recuperation dans access


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut extraction de données excel pour recuperation dans access
    bonjour,
    voila j'ai un probleme avec ma macro en vba.
    en j'arrive a recuperer les données sans problemes.
    mon probleme c au niveau des doublons. je m'explique j'aimerais que lors de l'extraction ma macro se connecte a ma base access et verifie si l'enregistrement existe deja, si c le cas alors on le met ajour sinon on l'ajoute comme nouvel enregistrement.

    ma base se compose de deux tables, une table banque et une table facture.
    vous trouvez ci dessous le code que j'ai ecrit.
    voila merci de votre aide.


    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
     
    Sub extraction()
     
    Dim cnt As New ADODB.Connection
    Dim Rst As New ADODB.Recordset
    Dim Rst1 As New ADODB.Recordset
    Dim i
     
     
         cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source= C:\Documents and Settings\Nicolas\Mes documents\bd1.mdb;" & _
    "Jet OLEDB:Database"
     
         'Ouverture de la table banque
     Rst.Open "banque", cnt, adOpenStatic, _
            adLockOptimistic, adCmdTable
     
     ' on parcour la table jusqu'au dernier enregistrement
     With Rst
     Rst.MoveFirst
      While Rst.EOF = False
        's'il existe
       If Worksheets("30-12").Range("G3") = Rst.Fields("N° banque") Then
        MsgBox ("mise à jour des données")
       Else
        Rst.MoveNext
       End If
      Wend
          Rst.MoveLast
            .AddNew
            'Ajout de tout les champs
            ![N° banque] = Worksheets("30-12").Range("G3")
            ![nom banque] = Worksheets("30-12").Range("G4")
            .Update
     End With
     
         'ouverture de la table facture
           Rst1.Open "facture", cnt, adOpenStatic, _
            adLockOptimistic, adCmdTable
     
        For i = 7 To 65535
        If Not IsEmpty(Range("A" & i)) Then
        'tant qu'on ne tombe pas sur une ligne vide on extrait
     
             With Rst1
        .AddNew
        ![N° facture] = Worksheets("30-12").Range("G2")
        ![nom fournisseur] = Worksheets("30-12").Range("A" & i)
        ![montant ttc] = Worksheets("30-12").Range("D" & i)
        ![Date] = Worksheets("30-12").Range("C" & i)
        ![decade] = Worksheets("30-12").Range("D2")
        ![N° banque] = Worksheets("30-12").Range("G3")
        .Update
            End With
     
         'sinon on fait ça
          Else
          MsgBox ("extraction terminée")
          Exit For
          End If
     
     
          Next i
          Rst1.Close
          Rst.Close: cnt.Close
     
          End Sub

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    les tables lièes c'est parfois bien pratique et ça supporte le sql

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    hello
    qu'entends tu par tables liées.
    parceque mes tables banques et factures sont liées dans ma base de données.

    personne pour me donner un coup de pouce?

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

    Tu n'as pas besoin de te connecter à une autre base, puisque tes tables sont liés, c'est comme si elles appartenaient à ta base.

    Starec

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    hello

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    deso starec mais je n'ai pas bien saisie ton exlication, pourrait tu etre plus claire stp.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    Je viens de relire ton script, tu as du Excel, est-ce que ton code est sous Excel ou Access ?

    Que fais tu sous Access et que fais tu sous Excel, où sont des données ?

    Starec

  8. #8
    Membre régulier

    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 106
    Points
    106
    Par défaut
    sans rentrer dans les détails, je verrai bien quelque chose comme ca:

    tu créés un recordset qui contient une requete count(*) avec comme condition la valeur dont on doit vérifier l'existence.

    Si le count de ton recordset est 0 alors tu fais un INSERT INTO, sinon tu fais un UPDATE.

    Je te laisse écrire tes requetes, avec 2 tables ca doit pas bien etre difficile.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    ok merci Tomo je vais essayé d'orienter mes recherches dans ce sens la.
    Pour repondre a starec je dirai que mes données sont dans excel. de la je cree une macro qui exporte les données sous Access (ma macro est cité plus haut dans la discussion).
    pour ça il n'y a pas de problemes je souhaite juste mettre a jour les données dans les tables corespondantes.
    pour le moment en fait a chaque fois que je rajoute des données ca me reextrait tout et pas juste les nouvelles données.

    voila merci de votre aide.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Re

    Si dans ton fichier Excel tu as toutes les données depuis le début, tu peux vider ta table, et la remplir à nouveau.

    Starec

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    c vrai que vider la table pourrait etre une solution, a vrai dire j'y avait deja pensé, mais je pense que c choisir la faciliter et c un peu lourd aussi de devoir vider la table a chaque fois que l'on veut inserer de nouveaux elements

  12. #12
    Invité
    Invité(e)
    Par défaut
    Re

    Non c'est très rapide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim strSql as string
    strSql = "DELETE * FROM LATABLE;"
    DoCmd.RunSQL strSql
    Avant de remplir ta table

    Stared

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    je n'arrive pas inserer la ligne sql dans ma macro access. c'est comme si la commande "docmd.runsql" n'etait pas reconnu.
    ce me marque un messag d'erreur "objet requis"

    hello
    bon je suis toujours bloquer sur ma macro vba mais ca avance doucement quand meme.
    en fait je me suis rendu compte qu'une ligne de test ne marche pas corectement et je ne sais pas pourquoi peut etre un probleme de syntaxe.
    voici la ligne en question.
    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
    With Rst
          Do Until Rst.EOF = True
          [U][  If Rst.Fields("N° banque").Value = Worksheets("30-12").Range[U]("G3").Value Then
            MsgBox ("lusa")
            Rst.MoveLast
            Else
            Rst.MoveNext
            End If
          Loop
              If Rst.EOF = True Then
                .AddNew
                'Ajout de tout les champs
                ![N° banque] = Worksheets("30-12").Range("G3")
                ![nom banque] = Worksheets("30-12").Range("G4")
                .Update
              End If
        End With

    en fait je test si la valeur est deja present dans la base de données ( table banque) si c le cas je et juste a jour sion j'insere.
    mais que la ligne existe ou pas l'application tente l'insertion.
    voila si quelqu'un a une idée je lui en serait tres reconnaissant.

    juste un message pour faire remonter un peu mon poste qui ne s'est pas actualiser a la bonne date

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    voila mon programme tourne a peu pres comme il faut, je voudrait juste savoir comment faire pour supprimer les données d'une table access via un recordset.
    si quelqu'un connait la bonne syntaxe je suis a l'ecoute.

    voila merci

  15. #15
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    pourquoi ne pas utiliser alors un SQL de type DELETE ?
    Citation Envoyé par scons
    voila mon programme tourne a peu pres comme il faut, je voudrait juste savoir comment faire pour supprimer les données d'une table access via un recordset.
    si quelqu'un connait la bonne syntaxe je suis a l'ecoute.

    voila merci

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    oui en y reflechissant bien je pense que c la meilleure solution cafeine, car c'est une supression avec condition en fait.
    le truc c'est que j'ai deja essayé d'inclure du sql dans mon code vba mais je dois pas le faire corectement car pour le moment ca ne marche pas.
    mais je vais me pencher dessus ce soir et faire quelques recherches sur le net.

    en tout cas merci de preter attention a mon post.

    voila bonne soirée.

    bonjour

    voila il ne me reste plus qu'as pouvoir mettre a jour ma table facture en faisant une suppression suivi d'un ajout.

    le probleme c'est que je n'arrive pas a intorduire du sql dans ma macro vba sous Excel.

    j'aimerais savoir s'il y a une syntaxe particuliere car le "docmd.runsql" qui fonctionne sous Access n'est pas reconnu sous Excel.


    merci

  17. #17
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    On peut faire du SQL dans Excel, en utilisant DAO ... ça ressemble furieusement à Access.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    c bon pour l'utilisation des commandes sql en fait il fallait inclure la reference a microsoft access dans excel.

    donc maintenant j'arrive a faire ma suppression mais le probleme c que je suis obliger d'avoir ma base access ouverte pour pouvoir utiliser ma macro.

    c desagrement vien de l'utilisation du sql dans ma macro car j'ai fait le test sans et ca marche.

    voila un bout de code
    Sub extraction()

    Dim cnt As New ADODB.Connection
    Dim Rst As New ADODB.Recordset
    Dim Rst1 As New ADODB.Recordset
    Dim i
    Dim x As String
    Dim sql As String

    sql = "delete facture.* from facture where facture.[N° facture]='30/12/07//3' and facture.[N° banque]='1'"

    cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source= C:\Documents and Settings\Administrateur\Mes documents\echeancier\bd1.mdb;" & _
    "Jet OLEDBatabase"

    'Ouverture de la table banque
    Rst.Open "banque", cnt, adOpenStatic, _
    adLockOptimistic, adCmdTable

    'ouverture de la table facture
    Rst1.Open "facture", cnt, adOpenStatic, _
    adLockOptimistic, adCmdTable

    'recuperation du numero de banque
    x = Worksheets("30-12").Range("G3")
    'cnt.Execute ("delete facture.* from facture where facture.[N° facture]='30/12/07//3' and facture.[N° banque]='2'")
    With Rst
    'tant qu'on a pas parcouru toute la table
    Do Until Rst.EOF = True
    'si numero de banque de la table banque et le meme que celui du fichier excel
    If Rst.Fields("N° banque").Value = x Then
    docmd.RunSQL sql
    voila si quelqu'un sait comment on peut supprimer des données dans une base access quand celle-ci est fermée je suis tout ouie

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    bon j'ai fini par arriver a trouver comment pouvoir me connecter a une base access fermé et y executer des requete sql. c'etait la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomconection.execute"requete sql"
    par contre il me reste un details genant a regler et je cherche desesperement la bonne syntaxe.
    en fait j'aimerais utiliser une valeur excel dans ma requete sql, et pour ça j'utilise des variables qui recuperes ces données mais ca ne marche pas.
    voici ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cnt.Execute "delete * from facture where facture.[N° facture]= y and  facture.[N° banque]= x"
    voila si quelqu'un pouvait me donner un coup de pouce ca serait bien sympa

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    j'ai l'impression qu'il n'y a que moi qui parle ici, pourtant il ne me semble pas demander quelque chose de trop compliquer, et qu'on ne me dise pas non plus que je ne cherche pas de solution.
    je suis quand meme arrivé jusqu'a ce stade tout seul en fin de compten plus je poste les solutions que j'a trouvé pour eviter a d'autre utilisateur de galerer sur des probleme de syntaxe comme ça m'est arrivé.

    donc voila pour un forum d'entraide je trouve que ca bouge pas beaucoup.
    desoler si je pousse ce coup de gueule mais c vrai que c chaint de galerer sur des probleme de syntaxe alors qu'on a le forme.

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

Discussions similaires

  1. Solution pour Extraction de données Excell ? Routines?
    Par ccbbrr172 dans le forum Alimentation
    Réponses: 8
    Dernier message: 28/03/2008, 15h37
  2. Importation données Excel vers une BD Access
    Par del__k dans le forum Access
    Réponses: 2
    Dernier message: 06/08/2007, 17h05
  3. extraction de données excel
    Par gzanax dans le forum Excel
    Réponses: 2
    Dernier message: 13/03/2007, 14h41
  4. Réponses: 1
    Dernier message: 01/08/2006, 09h36
  5. [VB.NET] Importation données Excel pour alimenter BDD Sql Server
    Par Aphrauditte dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/05/2006, 16h24

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