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

VBA Access Discussion :

Récupération d'un code d'une base Access non en cours.


Sujet :

VBA Access

  1. #1
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut Récupération d'un code d'une base Access non en cours.
    bonjour à tous, c'est encore moi,
    comme je n'en ai pas réellement fini avec le sujet, je post un nouveau topic vu que l'ancien a la mention résolu.

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.VBE.VBProjects
    ne fonctionne (apparemment ?) que pour les fichiers ouverts ou en cours. Quelqu'un pourrait-il me dire comment faire la manip pour accéder au code d'une autre base access par exemple...
    Voici le code ou j'en suis (attention ca fait peur):
    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
    Function MajCodeVBA(PathBase As String) As Boolean
    Dim db As DAO.Database
    Dim RS As DAO.Recordset
    Dim strSQL As String
    Dim vbproj
    Dim i As Integer
    Dim j As Integer
    'On Error GoTo fin
     
    strSQL = "SELECT ancienne_valeur, nouvelle_valeur from T_CONVERSION_Queries;"
    Set RS = CurrentDb.OpenRecordset(strSQL)
        Set db = Application.DBEngine.OpenDatabase(PathBase)
     
     
     
        For i = 1 To Application.VBE.vbprojects(1).VBComponents.Count
            For j = 1 To Application.VBE.vbprojects(1).VBComponents.Item(i).CodeModule.CountOfLines
                Application.VBE.vbprojects(1).VBComponents.Item(i).CodeModule.ReplaceLine j, Replace(Application.VBE.vbprojects(1).VBComponents.Item(i).CodeModule.Lines(j, 1), RS!ancienne_valeur, RS!nouvelle_valeur)
            Next j
        Next i
        MajCodeVBA = True
    Exit Function
     
    'fin:
    '    MajCodeVBA = False
    End Function
    le code fonctionne pour le projet en cours, mais pas moyen de faire appel aux modules de fichiers autres...
    Des idées svp ?

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

    Je ne sais pas si je vais répondre à ton problème, mais c'est peut-être une idée à creuser.

    Application c'est ta base Access en cours, peut-être qu'en essayant d'en instancier une autre (comme quand on instance Excel pour ouvrir un classeur).

    Et d'ouvrir cette nouvelle instance d'Access pour accéder à ton code ?

    C'est juste une hypothèse, je n'ai jamais essayé.

    Starec

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut
    Je me heurte pour l'instant au problème qu'access ne me compte aucun projet dans le fichier envoyé en paramètre, alors qu'il y en a au moins 2...

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

    Pourrais-ton voir le code ?
    A la place de (1) tu dois pourvoir mettre le nom du projet entre "".

    Starec

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut
    voila le code oui,
    j'ai ajouté un compteur k en plus.

    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
    Function MajCodeVBA(PathBase As String) As Boolean
    Dim db As DAO.Database
    Dim RS As DAO.Recordset
    Dim strSQL As String
    Dim AppAccess As Access.Application
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    'On Error GoTo fin
     
        strSQL = "SELECT ancienne_valeur, nouvelle_valeur from T_CONVERSION_Queries;"
        Set RS = CurrentDb.OpenRecordset(strSQL)
     
        Set AppAccess = CreateObject("Access.Application")
        'Set db = Application.DBEngine.OpenDatabase(PathBase)
        Set db = AppAccess.DBEngine.OpenDatabase(PathBase)
        For k = 1 To AppAccess.VBE.VBProjects.Count
        For i = 1 To AppAccess.VBE.VBProjects.Item(k).VBComponents.Count
            For j = 1 To AppAccess.VBE.VBProjects.Item(k).VBComponents.Item(i).CodeModule.CountOfLines
                Do Until RS.EOF
                    AppAccess.VBE.VBProjects.Item(k).VBComponents.Item(i).CodeModule.ReplaceLine j, Replace(AppAccess.VBE.VBProjects.Item(k).VBComponents.Item(i).CodeModule.Lines(j, 1), RS!ancienne_valeur, RS!nouvelle_valeur)
                    RS.MoveNext
                Loop
                RS.MoveFirst
            Next j
        Next i
        Next k
     
        RS.Close
        db.Close
        Set AppAccess = Nothing
        MajCodeVBA = True
    Exit Function
     
    'fin:
    '    MajCodeVBA = False
    End Function
    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut


    Dans une application Access il n'y a qu'un projet.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut
    donc je dois simplifier en mettant juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim temp as VBProject
    for each temp in AppAccess.VBE.Projects
    ?

  8. #8
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Pour accéder à une base de données autre que la base courante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim oAccess As New Access.Application
        Dim oDb As DAO.Database
        With oAccess
            .OpenCurrentDatabase ("mabase")
            Set oDb = .CurrentDb

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut
    rah mon sauveur
    voici le code qui marche bien
    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
    Function MajCodeVBA(PathBase As String) As Boolean
    Dim db_encours As DAO.Database
    Dim db_temporaire As DAO.Database
    Dim RS As DAO.Recordset
    Dim strSQL As String
     
    Dim temp As VBComponent
    Dim AppAccess As Access.Application
    Dim Accmodule As Module
    Dim i As Integer
    Dim j As Integer
    'On Error GoTo fin
    Dim oAccess As New Access.Application
    Dim oDb As DAO.Database
     
        strSQL = "SELECT ancienne_valeur, nouvelle_valeur from T_CONVERSION_Queries;"
        Set RS = CurrentDb.OpenRecordset(strSQL)
     
        With oAccess
            .OpenCurrentDatabase (PathBase)
            Set oDb = .CurrentDb
        End With
     
     
     
        For i = 1 To oAccess.VBE.VBProjects(1).VBComponents.Count
            For j = 1 To oAccess.VBE.VBProjects(1).VBComponents.Item(i).CodeModule.CountOfLines
                Do Until RS.EOF
                    Debug.Print oAccess.VBE.VBProjects(1).VBComponents.Item(i).CodeModule.Lines(j, 1)
                    oAccess.VBE.VBProjects(1).VBComponents.Item(i).CodeModule.ReplaceLine j, Replace(oAccess.VBE.VBProjects(1).VBComponents.Item(i).CodeModule.Lines(j, 1), RS!ancienne_valeur, RS!nouvelle_valeur)
                    RS.MoveNext
                Loop
                RS.MoveFirst
            Next j
        Next i
        RS.Close
        'Set CurrentDb = db_encours
        Set oAccess = Nothing
        oDb.Close
        Set oDb = Nothing
        MajCodeVBA = True
    Exit Function
     
    'fin:
    '    MajCodeVBA = False
    End Function
    je vais pouvoir continuer maintenant

    merci aussi à starec pour les premières idées

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je t'avais dit qu'il fallait patienter.

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

Discussions similaires

  1. Changer le Mot de Passe d'une Base Access par Le code
    Par sigap dans le forum Contribuez
    Réponses: 9
    Dernier message: 21/12/2010, 12h36
  2. Test et récupération des propiétés d'une base access
    Par dorison dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/04/2008, 09h20
  3. Récupération de données d'une base access
    Par ologele dans le forum VB 6 et antérieur
    Réponses: 39
    Dernier message: 05/08/2006, 14h37
  4. [VB] Ouverture d'une base Access par le code
    Par jouf dans le forum Access
    Réponses: 4
    Dernier message: 15/06/2006, 18h54
  5. Réponses: 2
    Dernier message: 15/04/2006, 21h12

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