begin process at 2008 05 12 08:25:40
1 170 153 membres
57 nouveaux aujourd'hui
13 956 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MISE À JOUR D 'UN BD ACCESS VIA UNE MACRO VBA ENREGISTRÉ DANS UN FICHIER EXCELL


Information sur le tutorial

Catégorie :VBA Date de création : 29/08/2007 20:03:31 Vu : 12 252 fois

Note :
Aucune note

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Ce tuto est le résultat de recherche sur ce site et sur d'autre site internet afin de trouver une méthode simple et efficace pour mettre à jour les champs d' une table access via excel. J'utilise donc la méthode ADO afin de connecter excel à la bd et transférer le contenu de certaine cellule dans une table access­.

Tutorial

Merci a tous les collaborateurs anonyme qui laisse des sources sur internet. Grace à ceux-ci nous pouvons greffer des bouts de code pris à gauche et à droite pour finir par aboutir à un code qui satifaisant nos besoins et nos attentes !

Bon code  !

emarck

'Dans un fichier excel créer une nouvelle macro et la modifier comme suit.

'Ne pas oublier d'aller dans le menu "Outils->Références" de la macro afin de sélectionner la référence suivante:

'Microsoft ActiveX Data Objects Recordset x.x Library  (dans mon cas j'ai pris la version 2.8 avec excel 2003)

' Pour débuter déclarer une variable public pour la connection comme ceci :

Public cnx As ADODB.Connection

' Ensuite créer la routine suivante  le nom  excel_to_access se retrouvera dans la liste des vos macros dans excel.

Vous pouvez ensuite associer un bouton  à cette macro afin de rendre l'opération plus transparente.

Si vous voulez que l'opération se fasse à l'ouverture de votre fichier excel, changer le nom excel_to_access pour  auto_open

ou auto_close si vous désirez que le tout s'active lors de la fermeture de votre fichier. 

Sub excel_to_access()
    
    Dim chemin As String // chemin est un nom que vous devez associer à une cellule dans excel
    Application.Goto Reference:="chemin"// permet de se positionner sur la cellule se nommant chemin
    
    chemin = ActiveCell // active la cellule en question
   
    ' Nous testons si le fichier est accessible
    If Len(Dir(chemin)) > 0 Then
        ' Déclaration de la variable de connexion
        Set cnx = New ADODB.Connection
       
        ' Connexion à la base
        ConnectDB cnx, chemin
    Else
        MsgBox "La base n'a pas pu être trouvée" & vbCrLf & _
                chemin & vbCrLf & _
                "n'est pas un chemin valide.", vbCritical + vbOKOnly
    End If
   
End Sub

'Routine de connection après avoir validé l'existance de la bd

Sub ConnectDB(ByRef cnx As ADODB.Connection, ByVal chemin As String)
    

    'Définition du recordset   

    Dim rec As New ADODB.Recordset
    'Définition du pilote de connexion
    cnx.Provider = "Microsoft.Jet.Oledb.4.0"
    'Définition de la chaîne de connexion
    cnx.ConnectionString = chemin
    'Ouverture de la base de données
    cnx.Open

    //ouverture de la table  T-Taux cotisation employeur

rec.Open "SELECT * FROM [T-Taux cotisation employeur]", cnx, adOpenKeyset, adLockOptimistic 

//Associtation des informations contenu dans les cellules excel avec les champs de la table access 
   
rec.Fields("Année") = Excel.Cells(2, 1).Value
rec.Fields("Ass maladie taux") = Excel.Cells(4, 2).Value
rec.Fields("Ass emploi taux base") = Excel.Cells(5, 2).Value
rec.Fields("Ass emploi taux collectif") = Excel.Cells(5, 3).Value
rec.Fields("Ass emploi taux non collectif") = Excel.Cells(5, 4).Value
rec.Fields("Ass emploi salaire max") = Excel.Cells(12, 2).Value
rec.Fields("RRQ taux") = Excel.Cells(6, 2).Value
rec.Fields("RRQ plancher") = Excel.Cells(6, 3).Value
rec.Fields("RRQ plafond") = Excel.Cells(13, 2).Value
rec.Fields("CSST taux") = Excel.Cells(10, 5).Value
rec.Fields("CSST salaire max") = Excel.Cells(14, 2).Value
rec.Fields("Fonds pension") = Excel.Cells(7, 2).Value
rec.Fields("Ass collectives") = Excel.Cells(21, 5).Value

//Mise à jour de la table access avec les nouvelles informations

rec.Update

Fermeture du recordset
rec.Close
Set rec = Nothing // déconnecter le recordset
End Sub 

Le nom  sub excel_to_access se retrouvera dans la liste des vos macros dans excel.

Vous pouvez ensuite associer un bouton  à cette macro afin de rendre l'opération plus transparente.

Si vous voulez que l'opération se fasse à l'ouverture de votre fichier excel, changer le sub nom excel_to_access pour sub auto_open

ou sub auto_close si vous désirez que le tout s'active lors de la fermeture de votre fichier.

Bon code !

emarck
 

  • signaler à un administrateur
    Commentaire de emarck le 30/08/2007 15:08:31

    Bonjour,
             les commentaires sont bienvenue !

    emarck

  • signaler à un administrateur
    Commentaire de Adn56 le 26/10/2007 10:58:37

    salut, j'essaye de comprendre ;) d'ou mes questions :
    -Il faut que la bdd soit créé avant, avec ces tables ?
    -La celulle "chemin" contient quoi ? c:\mondossier\mabase.mdb ?
    -rec.Fields("Année") = Excel.Cells(2, 1).Value , c'est la valeur de la celulle qui se place dans le champs Année, mais sur quelle ligne ?
    -Comment faire une recherche dans cette base du coup ?
    -supprimer une ligne de la base
    -modifier un champs, avec rec.Update ?
    arf j'ai encore plein d'autre questions pour enrichir ce tuto ;)
    ++

  • signaler à un administrateur
    Commentaire de Adn56 le 26/10/2007 11:16:36

    bon ca commence mal, j'ai bien inscrit la réf 2.8 comme toi, mais il me jette dés cette ligne : Public cnx As ADODB.Connection (type défini par l'utilisateur non défini) :( ??

  • signaler à un administrateur
    Commentaire de delcroil le 30/10/2007 14:59:25

    bonjour,

    je suis en train d'essayer de comprendre ton code. Excel.Cells(4,2).value? peux-tu préciser ce que ca veut dire (quelle est la plage de cellule visée).

    ADN56: Je pense que tu dois creer les tables toi meme. La cellule chemin doit bien contenir le chemin c:\mondossier\mabase.mdb.
    Je suis en train de faire des tests mais rien ne s'incrit dans ma base.

  • signaler à un administrateur
    Commentaire de emarck le 30/10/2007 20:58:36

    Bonjour,
    La ligne Public cnx As ADODB.Connection doit être dans la section déclaration (Générale)

    La cellule que j'ai nommé chemin contiendra le chemin d'accès comme cette exemple.

    c:\ma_mbd\mabd.mbd

    Il est sur que votre bd doit déjà existé. Le code ne permet pas de créer une bd de zéro, mais d'ouvrir une bd pour ensuite modifier les enregistrement.

    Les tables et champs doivent existé. Pour l'exemple je suis dans une table qui ne contien qu'un enregistrement.

    Le recordset se connecte à la bd via la requete sql sur ma table et se place par défaut sur l'enregistrement #1 qui est unique.

    Par exemple :
    rec.Fields("Année") = Excel.Cells(2, 1).Value

    Dit prend le contenu de la cellule #2 de la colonne #1
    ou si vous préférer de la cellule A2 de la feuil1 et copier le contenu de cette cellule dans le recordset "rec" à la position correspondant au champs "Année" de la table.

    Qui par défaut est dans le premier enregistrement de ma bd , car elle ne contien qu'une ligne.

    Si votre classeur excel contien des feuils nommé, donné le nom de la feuille dans votre ligne de code
    Si la feuil se nomme commande le code serait comme ceci:

    rec.Fields("Année") = commande.Cells(2, 1).Value
    Vous pouvez voir le nom de vos feuil dans la fenêtre
    Projet-VBAProject
    Je n'ai pas eu le temps de retoucher mon tuto , cependant, à voir vos question ça m'orriente dans quel direction allé. Sous peu je vais modifier le tuto avec plus d'option.

    Mais la logique est normalement la même que si vous feriez un appli vb avec un recodset.

    Vous pourriez par exemple prendre la partie de code ou je remplis le recordset et la mettre dans une fonction qui serait appelé seulement lorsque vous cliqueriez sur un bouton.

    Ainsi vous pourriez vous créer un bouton suivant précédent pour passer au prochain enregistrement ou au précédent avec le recordset. et un bouton mise à jour qui prendrais les infos de vos champs excell et les transfèrerais dans votre table access.

    Je vais tenter de refaire un exemple de code plus complet. au courant de la semaine.

    emarck



      

  • signaler à un administrateur
    Commentaire de emarck le 30/10/2007 21:32:10

    Pour le problème de connection avec ADODB.Connection

    Ajouter la reférence
    Microsoft ActiveX Data Object 2.8 Library

    ça devrait réglé le problème

    emarck

  • signaler à un administrateur
    Commentaire de fadily le 08/11/2007 17:04:42

    juste une chose pour la recherche on utilisant une liste deroulante (combobox)
    comment on peut le faire?

  • signaler à un administrateur
    Commentaire de emarck le 20/11/2007 22:43:43

    Bonjour voici un petit exemple de création d'une liste déroulante dans un tableur Excel.
    _____________________________________________________________
    'Création d'une liste déroulante dans un tableur Excel
    'J'ai utilisé Excel 2003
    'le chiffre 1 est la distance entre la bord gauche de la feuille
    'et le contrôle  de liste déroulante.
    'Le chiffre 2 est la distance entre le haut de la colone et le contrôle
    'Le chiffre 59 est la longueur du contrôle
    'Le chiffre 11 est la largeur du contrôle
    'Si vous ouvrez un nouveau chiffrier excel sans modifier la taille
    'des cellules le contrôle suivant entrera dans la cellule
    '#1 de la colonne #1. à vous d'ajuster les grandeurs par la suite

    Feuil1.DropDowns.Add(1, 2, 59, 11).Select
        
    'ajout de donner dans la liste déroulante
        Feuil1.DropDowns.AddItem "test"
        Feuil1.DropDowns.AddItem "test2"
        'Nous positionons la liste déroulante sur le second items.
        'Nous pouvons constaté que l'item test est #1 et test2 #2
        
        'Contrairement à certain langage de programmation
        'ou test aurait été l'item #0 et test2 l'item #1
        Feuil1.DropDowns.ListIndex = 2
    _________________________________________________________________

    Cette exemple permet de créer une liste déroulante de zero et d'insérer des donner à l'intérieur et d'ensuite sélectionner la seconde donnée pour l'afficher. Logiquement je remplacerais les donner test et test2 par vos donner à ajouter dans la bd
    et je ferais pointer le recordset sur le champs à mettre à jours. Ensuite
    il ne reste qu'à dire au recordset ou aller chercher l'information à ajouter.

    Si ont ce base que la commande suivante prend l'info d'une cellule et l'ajoute dans le champs voulu, un mix du code ci-dessus pourrait faire le travail.

    ex: rec.Fields("Année") = Excel.Cells(2, 1).Value
    deviendrait
    rec.Fields("Année") = Feuil1.DropDowns.ListIndex(2).Value

    Ceci reste à testé

    emarck

  • signaler à un administrateur
    Commentaire de theb3ast le 28/11/2007 17:29:44

    bonsoir tlm ;

    je suis tres novice en developpement VBA et sur acces et en regardant ton code je me posais une question , y'a t'il moyen via VBA(a partir du fichier excel ) d'agir sur une critere ds une requete de selection Acces .

    bon j'essaye d'etre plus clair : jai une requete de selection ds une base access , j'aurais besoin d'agir sur le critere "DATE" (qui est un champs ds ma requete) afin de le limiter a une date bien precise,(et donc pouvoir extraire que les champs avec la date que j'ai choisis)et cela a partir d'excel ...

    j'espere que tu pourra m'aider

    merci d'avance,

  • signaler à un administrateur
    Commentaire de mohaned le 29/11/2007 11:02:19

    merci beaucoup emarck;c'est se que je cherche depuis lentemps c'est trés magique

  • signaler à un administrateur
    Commentaire de emarck le 30/11/2007 00:27:54

    Merci c'est gentil. Je n'avais jamais pensé à faire ce genre de code jusqu'à ce que il me soit demandé au travail de lier excel et access. Tant mieux si ça peu aider des gens :o)

  • signaler à un administrateur
    Commentaire de emarck le 24/01/2008 17:34:07

    Bonjour theb3ast,  

             il peutêtre possible de modifier la requêtes dans excel. Théoriquement si ta requêtes actuel fonctionne en acces elle devrait fonctionner dans un vba excel. Seul chose à vérifier:

    rec.Open "SELECT * FROM rec.Open "SELECT * FROM [T-Taux cotisation employeur]", cnx, adOpenKeyset, adLockOptimistic

    Moidifie ta requête pour quel ressemble à celle-ci  c'est à dire encadre tes table avec des [ et ] puis pense au " " En théorie si tu mets ta requête modifier dans le rec.Open excel ira ouvrir la table généré par ta requête. Donc si ta requête contien des exceptions tel Where table1.date = "2008-01-23"... tu devrais pouvoir avoir accès juste au date spécifié.

    tu peux prendre exemple sur le code de liste déroulante en inversant les rec.Feilds afin qu' il soit alimenté par ta table et non l'inverse.

    ex: rec.Fields("Année") = Excel.Cells(2, 1).Value
    deviendrait
    rec.Fields("Année") = Feuil1.DropDowns.ListIndex(2).Value

    Espérant de donner quelques piste.

    emarck

  • signaler à un administrateur
    Commentaire de bintou123 le 11/03/2008 12:10:28

    Bonjour,

    Ce n'est pas un commentaire mais plutot une question.
    Tout d'abord bravo pour ton travil. Je voudrais dans le même sens créer une appli qui va m'aider à exporter les données d'une base de données Access vers une autre base de données de même structure.
    Merci.

  • signaler à un administrateur
    Commentaire de emarck le 12/03/2008 18:15:53

    Bonjour BINTOU123,
                       tout dépent de qu'elle type de bd tu parles. Est-ce-que tu veux transférer des données de Access à une seconde bd Access, ou de Access à Excel ou autres ?

    Si c'est de access à access il offre une fonction
    d'importation de table entre bd directement dans access.  

    emarck

  • signaler à un administrateur
    Commentaire de user03 le 24/04/2008 16:05:35

    Bonjour,
    je travaille mnt sur une application d'ajout,modif,recherche sur ACCESS , est ce que vous pouvez m'aider a trouver une application déja faite, ou uu tuto...

    Merci bcp

  • signaler à un administrateur
    Commentaire de emarck le 29/04/2008 22:57:06

    Bonjour,
             le code vba ci-dessus est fortement inspiré des codes vb6 et vb2003 permettant la liaison entre une bd access et une application vb.

    En fait, les routine sont identique soit

    1.créer une connection avec la bd avec une requête sql

    2.créer un créer un recordset.

    Ensuite le reste c'est presque identique au code vba ci-dessus, le recordset est le contenant dans lequel vous envoyer vos données afin de les intégrés dans la bd. Il est aussi le contenant utilisé par la bd pour vous transmettres de l' information.

    Il existe sur le site des exemples très complets à ce sujet.

    Est-ce-que ça réponds a votre question ?

    Je pense par contre a ajouter un tuto sur les bd et à remodeler celui-ci lorsque j'aurai plus de temps.

    emarck
      

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Boutique

Boutique de goodies CodeS-SourceS