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 :

Sauvegarder un module vba (modifié) situé dans une autre base Access et sauvegarder celui-ci [AC-2013]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Par défaut Sauvegarder un module vba (modifié) situé dans une autre base Access et sauvegarder celui-ci
    Bonjour à tous,

    Ayant épluché le web et n'ayant pas trouver de solutions à mon problème, je me permet de vous solliciter!
    L'idée est que j'écris depuis une base Access dans un module vba situé dans une autre base et que je voudrais sauvegarder celui-ci.
    En quittant simplement ca ne marche pas, et en essayant de sauvegarder celui-ci je me fais doucement envoyer promener, comme quoi j'ai pas les droits blah blah blah

    voici mon code!
    (tout ce qui est en commentaire et qui concerne le module a sauvegarder a été testé mais ne fonctionne pas.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Public Function numero_gpe()
     
    Dim objaccess2 As Object
    Dim ds As Database
    Dim valeuraremplacer As String
     
    Set ds = DBEngine.OpenDatabase(CurrentProject.Path & "\Mabase.accdb")
    Set objaccess2 = GetObject(CurrentProject.Path & "\Mabase.accdb")
     
                    For k = 0 To objaccess2.Forms.Count - 1
     
                        objaccess2.DoCmd.Close acForm, Application.Forms(k).Name, acSaveYes
     
                    Next
     
    valeuraremplacer= InputBox("Entrez le texte a introduire dans le module")
     
    For i = 1 To objaccess2.VBE.ActiveVBProject.VBComponents.Count
           'Debug.Print VBE.ActiveVBProject.VBComponents(i).Name
     
           If objaccess2.VBE.ActiveVBProject.VBComponents(i).Name Like "*module_a_chercher*" Then
     
            For j = 1 To objaccess2.VBE.ActiveVBProject.VBComponents(i).CodeModule.CountOfLines
     
     
                If objaccess2.VBE.ActiveVBProject.VBComponents(i).CodeModule.Lines(j, 1) Like "*caracteres sur la ligne a chercher" Then
     
                    'Debug.Print VBE.ActiveVBProject.VBComponents(i).CodeModule.Lines(j, 1)
     
                    objaccess2.VBE.ActiveVBProject.VBComponents(i).CodeModule.ReplaceLine j, Chr(34) & "texte a remplacer sur la ligne" & valeuraremplacer & "));" & Chr(34) & ")"
     
                    objaccess2.DoCmd.RunCommand acCmdCompileAndSaveAllModules
     
                    'objaccess2.DoCmd.Close acModule, "module_a_chercher"
                    'objAccess.DoCmd.Save
                    'ds.Close
                    'objaccess2.VBE.ActiveVBProject.VBComponents(i).Name = "module_a_chercher2"
                    'objaccess2.DoCmd.Close acModule, "module_a_chercher", acSavePrompt
     
                    For k = 0 To objaccess2.Forms.Count - 1
     
                        objaccess2.DoCmd.Close acForm, Application.Forms(k).Name, acSaveYes
     
                    Next
     
                    objaccess2.DoCmd.RunCommand acCmdCompileAndSaveAllModules
                    objaccess2.CloseCurrentDatabase
     
                    'objaccess2.DoCmd.OpenModule "module_a_chercher"
                    'MsgBox "Sauvegarder puis fermez a la main le module vba qui s'est ouvert et cliquez sur OK"
     
                    objaccess2.Quit
     
                    ds.Close
                    Set ds = Nothing
                    Set objaccess2 = Nothing
                    Exit Function
     
                Else
     
                End If
     
            Next
           Else
     
           End If
     
        Next
     
     
    End Function
    edit: Je me rend compte que je n'ai pas mis le message d'erreur lorsque je mets la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objaccess2.DoCmd.Close acModule, "module_a_chercher", acSaveYes
    Voici l'erreur:
    Nom : Capture2.JPG
Affichages : 353
Taille : 22,9 Ko
    Merci pour votre aide,
    Aymeric

  2. #2
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,
    autre approche plus pragmatique :
    - tu exportes le module

    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
    Sub ExportAllCode()
     
    For Each c In Application.VBE.VBProjects(1).VBComponents
    Select Case c.Type
        Case 2
            Sfx = ".cls"
        Case 100
            Sfx = ".frm"
        Case 1
            Sfx = ".bas"
        Case Else
            Sfx = ""
    End Select
    If Sfx <> "" Then
        c.Export _
            FileName:=CurrentProject.Path & "\" & _
            c.Name & Sfx
    End If
    Next c
     
    End Sub
    - tu modifies le fichier texte du module
    - tu reimportes le module
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Par défaut
    Salut,

    Merci pour ton retour,
    J'essaie ça de suite et te tiens au courant.

    edit:

    En couplant ton code et le mien, voici la commande que j'execute pour ré-importer le module dans la base Access et l'erreur:
    (après export, modificiation, enregistrement et remplacement du fichier .bas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objaccess2.VBE.ActiveVBProject.VBComponents.Import (CurrentProject.Path & "\" & VBE.ActiveVBProject.VBComponents("module_a_chercher).Name & ".bas")
    Et l'erreur:

    Nom : Capture3.JPG
Affichages : 210
Taille : 27,4 Ko

    edit2: Bon ba en fait j'ai trouvé la solution, j'ai remplacé la commande par un docmd.copyobject en ayant préalablement fermé l'objet Access utilisé.

    Merci,
    Aymeric

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/05/2010, 15h14
  2. Réponses: 11
    Dernier message: 20/03/2007, 00h13
  3. Réponses: 3
    Dernier message: 19/12/2006, 01h16
  4. Réponses: 4
    Dernier message: 28/08/2006, 13h04
  5. Ajouter un champ dans une autre base Access
    Par scaalp dans le forum Access
    Réponses: 2
    Dernier message: 20/10/2005, 15h34

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