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

Excel Discussion :

Code VBA qui modifie du Code VBA ?


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Code VBA qui modifie du Code VBA ?
    Bonjour à tous,

    J'ai un logiciel qui au fil du temps me génére des fichiers avec une extension associée au logiciel même (pas de .xls). Chacun de ses fichiers est généré à partir d'un fichier source : ils ont tous la même structure et le même code VBA.
    Les codes VBA sont bien évidemment protégés par mot de passe.
    Mais voilà, j'ai une ligne de code que je dois modifier dans tous mes fichiers existants !
    La première chose que j'ai faite bien évidemment a été de modifier manuellement le code du fichier source pour que tous les fichiers à venir aient le bon bout de code. Par contre, pour les fichiers existants, j'ai un vrai probleme.

    Supposons que tous mes fichiers soient dans le répertoire X, et qu'ils portent tous l'extension .xyz, ma macro devrait faire ceci :

    Soit n le nombre de fichier *.xyz dans le repertoire X, et "test" le mot de passe de l'éditeur VBA du fichier. le morceau de code à modifier se trouve dans la feuille "toto"
    Alors, pour i allant de 1 à n, :
    Ouvrir le fichier(i), et déprotéger le code vba en saisissant le mdp "test".
    Supprimer tout le code de la feuille "toto", et coller le code stocké dans une string "str"
    Fermer l'editeur vba (si besoin de l'avoir ouvert), fermer le fichier.
    Passer au suivant.

    Voila l'idée.
    Merci de votre aide car je galère vraiment sur ce code, et rien ne marche.

    Merci d'avance,

    sb

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Voila le code que j'ai tapé jusqu'à maintenant et qui me plante. J'ai essayé de commenter au mieux pour que vous puissiez m'aider.

    Par avance MERCI !

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Function maj()
     
        Application.DisplayAlerts = False
        Dim oFS As Office.FileSearch
        Dim i, nbModulesTraites As Integer
        Dim nomFichier, code1, code2 As String
        Set oFS = Application.FileSearch
        sRep = ActiveWorkbook.Path
     
     
        ' PREMIERE ETAPE : OUVRIR LE FICHIER SOURCE AVEC LE NOUVEAU CODE A RECOPIER DANS
        ' TOUS LES AUTRES FICHIERS *.plm
        ' RECUPERER LES 2 CODES MODIFIES DANS 2 STRINGS Code1 et Code2
     
        ' Fichier source (sModele) avec tout le bon code VBA
        sModele = "ModeleProg.plm"
        Workbooks.Open sRep & "\" & sModele
     
        Dim vbProj As Object
        Set vbProj = ActiveWorkbook.VBProject
        Set Application.VBE.ActiveVBProject = vbProj
        ' Mot de passe "test"
        SendKeys "test" & "~~"
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
        DoEvents
     
        ' Recupere les 2 codes VBA à modifier ensuite dans tous les fichiers *.plm
        With ActiveWorkbook.VBProject.VBComponents("Feuil5").CodeModule
          code1 = .Lines(1, .CountOfLines)
        End With
        With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
          code2 = .Lines(1, .CountOfLines)
        End With
     
        Set vbProj = Nothing
        Application.VBE.ActiveWindow.Close
        ActiveWorkbook.Close True
     
     
        ' DEUXIEME ETAPE : recopier les 2 codes Code1 et Code2 dans tous les 
        'fichiers *.plm
     
        With oFS
            .NewSearch
            .FileType = msoFileTypeAllFiles
            .Filename = "*plm"
            ' Repertoire <<test>>
            .LookIn = "C:\Documents and Settings\info\Bureau\test"
            .Execute
            nbModulesTraites = .FoundFiles.Count
            For i = 1 To .FoundFiles.Count
                Set wb = Workbooks.Open(.FoundFiles(i))
                nomFichier = .FoundFiles(i)
     
                Set vbProj2 = ActiveWorkbook.VBProject
                Set Application.VBE.ActiveVBProject = vbProj2
                ' mot de passe pour l'éditeur VBA : "test"
                SendKeys "test" & "~~"
                Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
                DoEvents
     
                ' Le premier code a changer se trouve dans la feuil5
                With wb.VBProject.VBComponents("Feuil5").CodeModule
                  .DeleteLines 1, .CountOfLines
                End With
                With wb.VBProject.VBComponents("Feuil5").CodeModule
                  .AddFromString code1
                End With
                ' Le deuxieme code a changer se trouve dans le module1
                With wb.VBProject.VBComponents("Module1").CodeModule
                  .DeleteLines 1, .CountOfLines
                End With
                With wb.VBProject.VBComponents("Module1").CodeModule
                  .AddFromString code2
                End With
                Application.VBE.MainWindow.Visible = False
                Application.VBE.ActiveWindow.Close
                Set vbProj2 = Nothing
                MsgBox (wb.Name = ActiveWorkbook.Name)
                wb.Close True
                Set wb = Nothing
            Next i
        End With
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    End Function

Discussions similaires

  1. VBA code qui modifie le code
    Par hedidev1 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/03/2015, 15h33
  2. [E-00] Code VBA qui insère du code VBA
    Par _Sool_ dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/11/2008, 09h16
  3. [VBA] Excel modifier un code source.
    Par mike9191 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2007, 12h56
  4. Qui modifie mon code PL?
    Par flonardi dans le forum Oracle
    Réponses: 3
    Dernier message: 31/05/2006, 10h44

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