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

Access Discussion :

Import fichiers .CLS par code VBA


Sujet :

Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut Import fichiers .CLS par code VBA
    Bienvenue chez moi

    Le web propose beaucoup de lecture sur ce sujet surtout pour Excel moins sur Access, voir d'ailleurs sur Developpez.com ces posts très intéressants:
    http://www.developpez.net/forums/d27...-frm-d-projet/
    http://www.developpez.net/forums/d10...d-base-access/

    L'objectif
    Je veux remplacer le code VBA d'un formulaire ou d'un rapport par celui d'un fichier, par défaut .CLS

    Le problème

    La routine pompée sans vergogne sur les 2 posts cités plus haut, charge tous les .CLS comme un nouveau module .BAS et n'écrase donc pas le code du formulaire ou du rapport :

    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
    Sub importVBACode(pPathImportDir As String)
     
        Dim sFileName As String, sExt As String
     
        If ExisteDir(pPathImportDir) = False Then MsgBox "Répertoire inexistant!" & Chr(13) & "Opération annulée!", vbCritical: Exit Sub
     
        sFileName = Dir(pPathImportDir & "*.*")
        Do While sFileName <> ""
            sExt = Right(sFileName, 3)
            Select Case sExt
                Case "cls", "bas"
                    Application.VBE.ActiveVBProject.VBComponents.Import (pPathImportDir & sFileName)
            End Select
            sFileName = Dir
        Loop     
    End Sub
     
    Function ExisteDir(pPathDir As String) As Boolean
     
        On Error Resume Next
          ExisteDir = GetAttr(pPathDir) And vbDirectory
     
    End Function
    Une est la bienvenue


    Pour ceux qui cherchent encore, la routine d'export, toujours pompée férocement sur les 2 posts cités

    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
    72
    Sub exportVBACode(pPathExportDir As String)
     
        Dim obj As Access.AccessObject
        Dim IdFile As Integer
        Dim sMsg As String
     
        ' Traiter tous les modules un par un
        sMsg = "Ecraser le fichiers VBA des modules (.bas)?"
        If OverWriteFile(sMsg) = False Then Exit Sub
     
        For Each obj In CurrentProject.AllModules
            DoCmd.OpenModule obj.Name
     
            ' Ouvrir le fichier texte
            IdFile = FreeFile
            Open pPathExportDir & obj.Name & ".bas" For Output As #IdFile
     
            DoCmd.Close acModule, obj.Name
     
            ' Ferme le fichier texte
            Close #IdFile
        Next
     
     
        'Traiter tous les formulaires un par un
        sMsg = "Ecraser le fichiers VBA des formulaires (.cls)?"
        If OverWriteFile(sMsg) = False Then Exit Sub
     
        For Each obj In CurrentProject.AllForms
            DoCmd.OpenForm obj.Name, acDesign
            If Forms(obj.Name).HasModule Then
                ' Ouvrir le fichier texte
                IdFile = FreeFile
                Open pPathExportDir & "Form_" & obj.Name & ".cls" For Output As #IdFile
     
                ' Ferme le fichier texte
                Close #IdFile
            End If
            DoCmd.Close acForm, obj.Name
        Next
     
     
        'Traiter tous les états un par un
        sMsg = "Ecraser le fichiers VBA des état (.cls)?"
        If OverWriteFile(sMsg) = False Then Exit Sub
     
        For Each obj In CurrentProject.AllReports
            DoCmd.OpenReport obj.Name, acDesign
            If Reports(obj.Name).HasModule Then
                IdFile = FreeFile
                Open pPathExportDir & "Report_" & obj.Name & ".cls" For Output As #IdFile
                ' Ferme le fichier texte
                Close #IdFile
     
            End If
            DoCmd.Close acReport, obj.Name
        Next
     
        MsgBox "Opération terminée !", vbInformation, "Code VB exporté"
    End Sub
     
    Private Function OverWriteFile(pMsg As String) As Boolean
     
        Dim bEcraseFile As Boolean
     
        oOverWrite = True
        If MsgBox(pMsg, vbQuestion + vbYesNo + vbDefaultButton2, "Export Modules") = vbNo Then
            oOverWrite = False
        End If
        OverWriteFile = oOverWrite
     
    End Function

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Bonjour,
    Non il n'écrase pas, pourquoi ne pas l'effacer avant ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.VBE.ActiveVBProject.VBComponents.Remove Application.VBE.ActiveVBProject.VBComponents.Item("Form_test")
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [AC-2003] Modifier le chemin du fichier.mdw par code vba
    Par maclolo2 dans le forum Sécurité
    Réponses: 1
    Dernier message: 11/04/2012, 16h17
  2. [Importation]Importer un fichier Excel par code
    Par Bes74 dans le forum Access
    Réponses: 1
    Dernier message: 03/04/2007, 12h46
  3. Définir marge par code VBA
    Par tamyme dans le forum Access
    Réponses: 2
    Dernier message: 10/03/2006, 09h43
  4. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 13h19
  5. Réponses: 3
    Dernier message: 06/09/2005, 10h27

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