Lancement d'Access depuis VB

Exemple d’un bouton qui ouvre une BDD sous Access:

Private Sub BtnBdd_Click()
    Dim MaBase As String, Tmp As String
    MaBase = Data.DatabaseName
    Tmp = « C:\Program Files\Microsoft Office\Office\MSACCESS.EXE  » & Chr(34) & MaBase & Chr(34)
    Res = Shell(Tmp, vbMaximizedFocus)
End Sub

Compactage d'une BDD

Le projet doit faire référence à un moteur de Bdd. (Déjà fait dans L’appli vide MRD).

Procédure qui compacte:

Sub CompactageBdd(MaSourceBdd as string , MaCibleBdd as string)
   DBEngine.CompactDatabase MaSourceBdd, MaCibleBdd
End Sub

Attention:

  • Le compactage se fait sur une base fermée.
  • La base compactée (ici MaCibleBdd) ne doit pas exister.

Récupérer la description d'un champ Access

Mettre dans un module:

Function fnctGetFieldDescription(ByVal WhatField As String, Optional ByVal PropertyName As String = « Description », Optional ByVal CreateIt As Boolean = False)
    Dim oDB As DAO.Database
    Dim oTBL As DAO.TableDef
    Dim oField As DAO.Field
    Dim oPRP As DAO.Property
    Dim strDescription As String

    On Error GoTo L_Err_FieldDescription
    strDescription = vbNullString

    Set oDB = FrmDepart.Data.Database
    Set oTBL = oDB.TableDefs(« Liste »)
    Set oField = oTBL.Fields(WhatField)
    strDescription = oField.Properties(PropertyName)

L_Ex_FieldDescription:
    Set oDB = Nothing
    Set oTBL = Nothing
    Set oPRP = Nothing
    Set oField = Nothing
    fnctGetFieldDescription = strDescription
    Exit Function

L_Err_FieldDescription:
    If Err = 3270 Then
       If CreateIt Then
           Set oPRP = oField.CreateProperty(PropertyName, dbText, « Nouvelle description »)
           oField.Properties.Append oPRP
            MsgBox « La propriété ‘ » & PropertyName & « ‘ a été ajoutée au champ  » & WhatField & « … », 48, « Propriété ajoutée à la collection »
       End If
    Else
        MsgBox « Impossible d’avoir des information sur le champ ‘ » & WhatField & « ‘ ! » & vbCrLf & Err.Description, 48, « Erreur »
    End If
    Resume L_Ex_FieldDescription
End Function

Appeler la fonction:

    MaDescription = fnctGetFieldDescription(.Fields(« MonChamp »))

Conversion d'une date pour compatibilité Access

Function MakeUsDate(MaDate As Variant, Optional TimeAussi As Boolean = False)
    If Not IsDate(MaDate) Then Exit Function
    MakeUsDate = « # » & Month(MaDate) & « / » & Day(MaDate) & « / » & Year(MaDate)
    If TimeAussi Then MakeUsDate = MakeUsDate &  »  » & Hour(MaDate) & « : » & Minute(MaDate) & « : » & Second(MaDate)
    MakeUsDate = MakeUsDate & « # »
End Function

L’utilisation dans une requète SQL se fait de la sorte:

    Data.Recordset.FindFirst « Jour =  » & MakeUSDate(MaFrenchDate)

Utilisation d'un Data dynamique

Le projet doit faire référence à un moteur de Bdd. (Déjà fait dans L’appli vide MRD).

Il faut déclarer les variables: (Déjà fait dans L’appli vide MRD).

Global MaTmpBdd As Database
Global MonTmpRec As Recordset

A mettre dans la procédure qui l’utilise:

    Set MaTmpBdd = OpenDatabase(« Mettre le nom de la base ici »)
    Set MonTmpRec = MaTmpBdd.OpenRecordset(« Mettre le nom de la table ici », dbOpenDynaset)

Conversion d'une table Access en feuille Excel

Cet exemple, pompé en 10 min d’après le prog d’arrachement, est brut et sert à créer un fichier Excel « Etiq.xls » comportant une feuille « Etiquette » contenant tous les enregistrements de la table « Etiquette » de la Bdd « Etiq.mdb ».

Attention: pour que ça fonctionne, il faut que la feuille « Etiquette » du fichier Excel n’existe pas.

Dans la zone déclaration d’une feuille (ou d’un module)

Dim Ws As Workspace

Dans la procédure d’un contrôle (par exemple)

Private Sub Command1_Click()
    Dim Bdd As String
    Dim Xls As String
    Bdd = « D:\documents and Settings\ebap188\My Documents\etiq.mdb »
    Xls = Replace(Bdd, « .mdb », « .xls »)    

    Dim DataBdd As Database
    Dim DataXls As Database    

    Set Ws = Workspaces(0)
    Set DataBdd = Ws.OpenDatabase(Bdd)
    Set DataXls = Ws.OpenDatabase(Xls, 0, 0, « Excel 8.0; »)    

    ‘DataBdd.Execute « SELECT * into [Excel 8.0;database= » & Xls & « ].Etiquette FROM Etiquette WHERE [Specif 1] = ’11KW/400V' »
     DataBdd.Execute « SELECT * into [Excel 8.0;database= » & Xls & « ].Etiquette FROM Etiquette »
End Sub

Si l’erreur Isam apparaît, c’est qu’il faut dans l’install Office cocher le truc qui va bien dans les données (de mémoire. Faut fouiller pour plus de détail).