Faire travailler Excel avec Access

Bonjour tous,

Je viens vers vous car je souhaiterais développer sur excel userform un interface qui échangerai avec ACCESS.

CAD : Le userform de excel pourrait : Qestionner/Consulter/Ecrire dans Acces.

Cela est il deja possible? si oui (je l'espere :) )

Mon besoin serait le suivant, pourriez vous me dire comment :

1-> connexion entre access et excel

2-> Ecrire de user form excel à access

3-> Lire access dans userform excel

4-> Modifier access avec userform excel

Je sais que le sujet est trés large. juste savoir si cela et faisable....

Merci pour votre retour

Cordialement

Headfree

Bonjour,

Pas de souci pour créer/lire/écrire/modifier des données dans des tables Access depuis Excel.

Voici une démo (un peu ancienne) mais c'est surtout le code qui faut voir

13demo-access.zip (38.18 Ko)

Pierre

Bonjour,

En premier : Merci Pierrep56 pour ton retour.

D'un point de vu de excel vba & Userform je suis confirmé, mais et il y a toujours un mais. serais tu d'accord pour que l'on aborde le sujet étape par étapes.

Le premier étant d'expliquer la méthode de connexion entre excel & access stp

Merci pour ton retour

Coridalement

Headfree

Ok, no soucy,

Alors voici un de mes scripts de connexion à un accdb (copié/collé d'une de mes appli) :

Sub Connect_Access(Accdb As String)
    Set Cnx = CreateObject("ADODB.Connection")
    Cnx.provider = "MSDASQL"
    Cnx.Open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & Accdb & ";"
    Set Rst = CreateObject("ADODB.Recordset")
End Sub

Et tant qu'à faire, voici mes scripts de fermeture de connexion :

Sub Close_Cnx(Optional x As Byte)
    On Error Resume Next
    If x > 0 Then Rst.Close
    If Cnx_IsOpen Then Cnx.Close
    Set Cnx = Nothing
    Set Rst = Nothing
End Sub

Function Cnx_IsOpen() As Boolean
    On Error Resume Next
    Cnx_IsOpen = (Cnx.State = 1)
End Function

Ces scripts se situent dans un module dans lequel sont déclarées 3 variables au début :Public Cat As Object, Cnx As Object, Rst As Object
* Cat est pour un "ADOX.Catalog" (pour manipuler les tables d'access)
* Cnx pour une "ADODB.Connection" (pour la connection)
* et Rst pour le "ADODB.Recordset" (pour les données à lire

Une fois connecté, il y a 4 actions principales courantes : INSERT UPDATE SELECT DELETE.
Pour les INSERT, UPDATE et DELETE => un simple Cnx.Execute Requete suffit
Requete étant une string du Genre => Requete = "DELETE FROM [Table] WHERE `Id`=" & valeur

Pour les SELECT, j'ai un script mis au point depuis longtemps et qui fonctionne bien :

Function Select_Db(Req As String, Optional noHead As Integer = 1) As Variant
Dim T As Variant, Rcd As Variant, f As Integer
Dim lig As Long, col As Long, i As Long, j As Long

    On Error GoTo errhdlr
    ReDim Rcd(1 To 1, 1 To 1)
    Rst.Open Req, Cnx, 3
    lig = Rst.RecordCount
    If lig > 0 Then
        Rst.MoveFirst
        T = Rst.GetRows
        col = Rst.Fields.Count
        ReDim Rcd(1 To lig + 1, 1 To col)
        For j = 0 To col - 1
            Rcd(1, j + 1) = Rst.Fields(j).Name
            For i = 0 To lig - 1
                Rcd(i + 1 + noHead, j + 1) = IIf(IsNull(T(j, i)), Null, T(j, i))
            Next i
        Next j
    End If
    Select_Db = Rcd
    Exit Function

errhdlr:
    Rcd(1, 1) = "Erreur n°" & Err.Number & vbCrLf & Err.Description
    Select_Db = Rcd
    f = FreeFile()
    Open ThisWorkbook.Path & "\Log.txt" For Append As #f
    Print #f, Now() & " | " & Rcd(1, 1) & vbCrLf
    Close #f
End Function

C'est une fonction qui retourne un tableau de valeurs qu'on peut réutiliser par la suite comme on veut.
Par exemple pour une Requete= "SELECT `Champs1`,`Champs2` FROM [Table] WHERE `Id`=" & valeur

J'écris la fonction suivante :

Function Get_Exemple(valeur As Long) As Variant
Dim Requete As String

    Requete= "SELECT `Champs1`,`Champs2` FROM [Table] WHERE `Id`=" & valeur

    Connect_Access chemin & nom_de_la_base_access
    Get_Exemple = Select_Db(Req, 1)
    Close_Cnx
End Function

pour pouvoir l'appeler tout simplement comme suit :

Dim T as variant
    T = Get_Exemple(3) ' pour appeler par exemple l'enregistrement n° 3

et ainsi je récupère le `Champs1` dans la variable T(2,1) et le `Champs2` dans la variable T(2,2)
Rq, et si besoin, les entêtes seront dans T(1,1) et T(1,2)

Voilà le principe général que j'utilise couramment
Bonne lecture
Pierre

D'autres infos dans mes articles suivants :
http://tatiak.canalblog.com/archives/2016/05/25/33865554.html
http://tatiak.canalblog.com/archives/2017/10/29/35815984.html

SUper merci, je regarde cela en Weekend.

encore plus compliqué.si je souhaite faire une liste déroulante dans mon userform qui appelle dans une table access et attention avec une condition.

Possible ?

Merci

Cordialement

Headfree

Trop facile!

Avec le code proposé, on récupère un tableau à une ou plusieurs colonnes.

Il suffit de faire rentrer ce tableau dans la liste déroulante.

Par exemple, si j'ai une requête du genre :

"SELECT DISTINCT(`Champs_bidule`) FROM FROM [Table] WHERE " & Condition_machin

dans une function nommée "Get_Ma_Liste_des_Champs_bidule"

il suffit alors de dire :

Mon_Usf.Combobox_truc.list=Get_Ma_Liste_des_Champs_bidule

Et la Condition_machin peut être plus ou moins complexe en fonction du contexte. exemple de clause Where tirée d'une de mes appli :

   " WHERE NOT `Salariés`=''" & _
   " AND (NOT (`Fin Contrat` < " & Replace(deb, ",", ".") & _
   " OR `Début Contrat` > " & Replace(fin, ",", ".") & ")" & _
   " OR (ISNULL(`Fin Contrat`) AND `Début Contrat` < " & Replace(fin, ",", ".") & "))"

Pour des exemples en situation, on peux se référer au fichier "Chantier-v1.5c" proposé ici

https://forum.excel-pratique.com/excel/planning-hebdomadaire-vba-147478#p908239

ou ici "Activité-copie"

https://forum.excel-pratique.com/excel/planning-hebdomadaire-vba-133965/10#p908353

(les requêtes se font sur du Xl mais le principe est le même, seul le script de connexion est différent )

Pierre

Respect !

Bon je m'attaque à cela !

Encore merci de ton support.

Je ferme pas le sujet car je risque de revenir ;-)

Cordialement

Headfree

Rechercher des sujets similaires à "travailler access"