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

Macros et VBA Excel Discussion :

Ouverture d'une base fractionner .mdb.accdb depuis macro Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    je suis en train de bosser sur un projet BI :

    -Une base fractionnée Dorsale.mdb.accdb sur un serveur
    -Une frontale qui interagie avec la dorsale ( local)

    Je gère l'ouverture de fichiers Excel depuis la frontale.

    Le but est à l'ouverture du fichier Excel de lancer une requête de test sur une table tampon de ma dorsale ( si table vide --> faire une chose / si table non vide --> faire autre chose).

    Le chemin d'accès à ma dorsale est modifiable via un fichier Excel( permet de gérer les changement de serveur).

    Ma démarche a donc été :

    - Dans mon fichier EXCEL :
    --> Dans un module de créer une fonction me permettant de récupérer le chemin du répertoire ou se trouve la dorsale.

    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
     
    'mon string qui stocke le chemin
    Public SERVEUR As String
    Function GetServeur()
    '
    Dim SERVEUR_TAMPON
    SERVEUR_TAMPON = "C:\Users\" & Environ("UserName") & "\Desktop\mon dossier"
     
        Dim xls As Excel.Application
        Dim wk As Excel.Workbook
        Dim ws As Excel.Worksheet
     
     
        Set xls = CreateObject("Excel.Application")
     
    'mon fichier ou se trouve les chemins d'accès au serveur
                Set wk = xls.Workbooks.Open("" & SERVEUR_TAMPON & "\Paramétrage.xlsx")
     
     
                Set ws = wk.Sheets("Main")
                ws.Activate
     
                SERVEUR = ws.Range("B5")
     
                wk.Close
     
     End Function
    J'utilise cette fonction dans ma frontale et elle fonctionne très bien.

    --> Sur un click bouton de lancer La requête de test sur ma table TAMPON de ma dorsale en appelant ma fonction getserveur():
    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
     
    Private Sub CLICK_ACCEUIL()
    'appel de ma fonction
    Call GetServeur
    'test d'affichage du chemin
    MsgBox (SERVEUR + "\dorsale.mdb.accdb")
     
    'déclare mon database
    Dim base As Database
    'déclare ma requête
    Dim reqtest as string
    'déclar emon recordset
    Dim rs As DAO.Recordset
     
    reqtest = "SELECT * FROM TAMPON_MAJ;"
     
     
    'ouvre ma base
    Set base = DBEngine.OpenDatabase(SERVEUR + "\dorsale.mdb.accdb")
     
     
    'ouvre mon recordset
    Set rs = base.OpenRecordset(reqtest, dbOpenForwardOnly, dbReadOnly)
     
    If rs.RecordCount = 0 Then
     
        MsgBox ("pas de valeur")
    Else
        MsgBox ("il ya des valeurs")
    End If
     
    rs.Close
    base.Close
     
    End Sub

    Voilà mon problème le msgbox de test s'affiche mais vba plante ensuite sans code erreur (une fenêtre croix rouge et aucun message).

    J'ai de remplacer le chemin SERVEUR + "\dorsale.mdb.accdb" , par le chemin complet de la dorsale entre "" = même résultat
    J'ai tenté de remplacer le chemin SERVEUR + "\dorsale.mdb.accdb" par une variable BD = (monchemin...\dorsale.mdb.accbd) AVEC UNE FONCTION IDENTIQUE à get serveur = même résultat.


    Quelqu'un à t-il une idée ?
    Peu être ai-je mal compris le fonctionnement des dbengine....?
    L'opendatabase fonctionne -t -il avec des .mdb.accdb ?


    Merci

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    OK après migraine, la solution est là :

    La référence activée n'était pas la bonne : Microsoft office access database engine object est la référence à activer étant donné que le fichier dorsale est en .accdb à la différence du Microsoft DAO object Library qui ouvre le .mdb UNIQUEMENT


    Voilà si ca peut aider quelqu'un

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Ouvrir .accdb depuis macro Excel
    Par Tytelle dans le forum VBA Access
    Réponses: 11
    Dernier message: 26/04/2012, 15h54
  2. Ouverture d'une base Acces avec Builder 6 pro
    Par tryonyco dans le forum C++Builder
    Réponses: 7
    Dernier message: 30/08/2005, 15h45
  3. [C#] Insertion dans une base Access .mdb
    Par borgfabr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/03/2005, 15h30
  4. [MFC]Ouverture d'une base de donnee avec DAO
    Par Wyatt dans le forum MFC
    Réponses: 7
    Dernier message: 24/01/2005, 10h06

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