[résolu] Ecrire code dans module VBA

breizhoneg

XLDnaute Nouveau
Bonjour le Forum

J'ai recehrche un peut sur le forum, mais je n'ai pas trouvé quelque chose resemblant a mon souci.
J’ai un petit souci. J’ai un bout de code que j’ai écrit dans la colonne « A » d’une feuille excel. Je souhaite copié collé ce code dans le module d’un autre fichier. J’arrive à générer un module dans le fichier de destination, mais je n’arrive pas à écrire le code dans ce module.


Si l’un d’entre vous avez un bout de code similaire… Par avance merci de votre aide.

BzH
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Ecrire code dans module VBA

Bonjour breizhoneg, Kjin, Bernard,


Voici une solution (si j'ai bien compris) :
VB:
Public Sub Test()
Dim feuilCode As Worksheet, nouvModule As Object, i As Long, derLigCode As Long, code As String, fichierDest As Workbook

    'définir la feuille contenant le code à ajouter dans un nouveau module
    Set feuilCode = ThisWorkbook.Sheets("Sheet1")
    With feuilCode
        'récupérer le numéro de la derlière ligne remplie en colonne A
        derLigCode = .Range("A" & .Rows.Count).End(xlUp).Row
        
        'boucler de la première à la dernière ligne de code
        For i = 1 To derLigCode
            'ajouter la nouvelle ligne de code
            code = code & vbNewLine & .Range("A" & i).Text
        Next i
    End With
    
    'ouvrir le classeur destination
    Set fichierDest = Application.Workbooks.Open("C:\test.xls")
    'créer un nouveau module (1) dans le classeur destination
    Set nouvModule = fichierDest.VBProject.VBComponents.Add(1)
    'modifier le nom du nouveau module créé
    nouvModule.Name = "TestNouveauModule"
    'ajouter le code au module (du fichier destination
    nouvModule.CodeModule.AddFromString code
    'fermer le classeur destionation en sauvant les modifications
    fichierDest.Close True
End Sub

A+
 

breizhoneg

XLDnaute Nouveau
Re : Ecrire code dans module VBA

Bonjour Kjin, Bernard et mromain,

J'essayerai d'être plus claire lors de ma prochaine demande. En tout cas merci pour vos réponse.

Mromain c'est exactement cela que je recherche. Par contre quand j'exécute ton code j'ai le message d'erreur suivant :
Can't enter break mode at this time

Malgés le message d'erreur cela fonctionne parfaitement. Si vous aviez une astuce pour éviter ce message d'erreur?

Merci d'avance
 

mromain

XLDnaute Barbatruc
Re : Ecrire code dans module VBA

Re bonjour,


Essaye en désactivant les alertes en début de macro et en les réactivant en fin de macro :
VB:
Public Sub Test()
Dim feuilCode As Worksheet, nouvModule As Object, i As Long, derLigCode As Long, code As String, fichierDest As Workbook
    
    'désactiver les allertes
    Application.DisplayAlerts = False

    ...
    
    'réactiver les allertes
    Application.DisplayAlerts = True
End Sub

A+
 

CBernardT

XLDnaute Barbatruc
Re : Ecrire code dans module VBA

Re,

Excellent code pour copier un code.

Il peut être bien d'éviter d'avoir à modifier le chemin du fichier cible.
Par exemple avec une Boite de dialogue qui permet la définition du chemin du fichier cible :

Dim TheFile
TheFile = Application.GetOpenFilename("all files(*.*),*.*")
If TheFile = False Then Exit Sub

D'autre part, je supprimerai les lignes :

'modifier le nom du nouveau module créé
nouvModule.Name = "TestNouveauModule"

Cela rend impossible la création de plusieurs modules, deux modules ne pouvant avoir le même nom.
 

kjin

XLDnaute Barbatruc
Re : Ecrire code dans module VBA

Bonjour,
Note qu'écrit dans un module plutôt que dans une feuille, un module et son code peut être exporté au format ".bas" et réimporté dans n'importe quel fichier, par macro évidemment
A+
kjin
 

breizhoneg

XLDnaute Nouveau
Re : Ecrire code dans module VBA

Re,

Merci a vous tous pour le coup de main. Maintenant cela marche parfaitement.

@ Bernanrd: Serais tu devin?!? C'est justement ce que je souhaite faire...
@Kjin : J'avais pas pensé importer un module au format .bas dans un chier. Ca pourrais être une autre solution envisageable..

BzH
 

mromain

XLDnaute Barbatruc
Re : Ecrire code dans module VBA

Bonjour à tous, BzH,

Du coup, voici une autre version qui permet de charger le code VBA contenu dans un fichier texte dans un nouveau module d'un classeur.
Le code a été adapté en fonction :
VB:
Private Sub AjouterModule(pathClasseurXls As String, pathFichierCodeTxt As String)
Dim nouvModule As Object, fichierDest As Workbook
   
    'ouvrir le classeur destination
    Set fichierDest = Application.Workbooks.Open(pathClasseurXls)
    'créer un nouveau module (1) dans le classeur destination
    Set nouvModule = fichierDest.VBProject.VBComponents.Add(1)
    'ajouter le code au module (du fichier destination)
    nouvModule.CodeModule.AddFromFile pathFichierCodeTxt
    'fermer le classeur destionation en sauvant les modifications
    fichierDest.Close True
    
End Sub

Cette fonction est facilement utilisable dans une procédure avec une boite de dialogue.
Le code suivant montre un exemple. La boite de dialogue permet de sélectionner plusieurs fichiers Excel et ajoute un module avec le code dans chacun d'eux.
VB:
Sub Test()
Dim fenetrefichiers As FileDialog, pathFichierExcel As Variant, pathFichierTxtCode As String

    'définir le path du fichier contenant le code à rajouter dans les fichiers Excel
    pathFichierTxtCode = "C:\TestFichierTxt.txt"
    
    'configurer la fenêtre de sélection des fichiers
    Set fenetrefichiers = Application.FileDialog(msoFileDialogFilePicker)
    fenetrefichiers.AllowMultiSelect = True
    fenetrefichiers.Filters.Add "Fichiers Excels", "*.xls; *.xls"
    
    'lancer la fenêtre de sélection
    fenetrefichiers.Show
    
    'désactiver les allertes et le rafraichissement de l'écran
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    On Error Resume Next
    
    'boucler sur chaque éléments sélectionnés
    For Each pathFichierExcel In fenetrefichiers.SelectedItems
        'ajouter un nouveau module avec le code contenu dans le fichier texte
        AjouterModule CStr(pathFichierExcel), "C:\TestFichierCode.txt"
    Next pathFichierExcel
    
    'réactiver les allertes et le rafraichissement de l'écran
    On Error GoTo 0
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
End Sub
A+
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
531

Statistiques des forums

Discussions
312 323
Messages
2 087 297
Membres
103 511
dernier inscrit
mickael.das