Module de classe

bonjour

j'ai le macro suivant qui copie un tableau et le coller dans un nouveau fichier excel

Sub Macro2()

    Range("Tableau1").Copy
    Workbooks.Add
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("Feuil1").Name = "GR"
    Range("A1").Select

End Sub

svp comment ajouter ce module classe d'une façon automatique dans ce nouveau fichier excel "Feuil1" juste après l’exécution du macro 2

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A1")) Is Nothing Then
       ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=5, Criteria1:=Range("A1")
  End If

Range("A1").Select
End Sub

merci

Bonjour,

sujet intéressant et pas courant

premier problème : pour la recopie du tableau :

    ActiveSheet.ListObjects("Tableau1").Range.Copy

à tester ...

Sub dupliquer()

    ActiveSheet.ListObjects("Tableau1").Range.Copy
    Workbooks.Add
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("Feuil1").Name = "GR"
    Range("A1").Select
    AjouterMacro "GR"

End Sub

Sub AjouterMacro(ici)
' cocher la réference Microsoft Visual Basic for Applications Extensibility 5.3
    With ActiveWorkbook.VBProject.VBComponents(Worksheets(ici).CodeName).CodeModule
        ligne = .CountOfLines
        .InsertLines ligne + 1, "Private Sub Worksheet_Change(ByVal Target As Range)"
        .InsertLines ligne + 2, "If Not Intersect(Target, Range(""A1"")) Is Nothing Then"
        .InsertLines ligne + 3, "ActiveSheet.ListObjects(""Tableau1"").Range.AutoFilter Field:=5, Criteria1:=Range(""A1"")"
        .InsertLines ligne + 4, "End If"
        .InsertLines ligne + 5, "Range(""A1"").Select"
        .InsertLines ligne + 6, "End Sub"
    End With
End Sub
18dupliquer-macro.xlsm (167.95 Ko)

Ceci est plus simple ... le code recopie strictement la macro contenue dans la feuille d'origine

Sub dupliquer()
' cocher la réference Microsoft Visual Basic for Applications Extensibility 5.3
Dim myMacro As VBComponent
    Set myMacro = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
    ActiveSheet.ListObjects("Tableau1").Range.Copy
    Workbooks.Add
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Name = "GR"
    Range("A1").Select
    RecopierMacro myMacro, ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName)
End Sub

Sub RecopierMacro(depuis As VBComponent, jusque As VBComponent)
    With jusque.CodeModule
        For i = 1 To depuis.CodeModule.CountOfLines
            .InsertLines i, depuis.CodeModule.Lines(i, 1)
        Next
    End With
End Sub

bonjour Mr et merci pour votre réponse

c'est très efficace ce que tu ma trouvé comme solution mais un tous petit problème

moi je souhaite copier le private sub vers la feuil de nouveau fichier

je vous explique avec des image et

au début j'ai mis le macro2 dans module1

en suite le private sub dans feuil1 et j'ai enregistrer le tous dans un fichier type macro complémentairement excel copie.xlam

après j'ai ajouter une icone dans la barre d'outil rapide pour exécuter cette macro facilement

je souhaite que le private sub qui existe dans copie.xlam feuil1 seras copier dans le nouveau fichier excel feuil1 après l’exécution de macro2

capture2 capture3 capture1

Bonjour,

je souhaite que le private sub qui existe dans copie.xlam feuil1 seras copier dans le nouveau fichier excel feuil1 après l’exécution de macro2

C'est bien le cas ... si le private sub n'est pas recopié dans le nouvel onglet, c'est que de ton côté soit la réference Microsoft Visual Basic for Applications Extensibility 5.3 soit tu n'as pas appliqué ce qui figure sur la copie d'écran que j'ai mis en première page

C'est cette sub routine qui fait la recopie de la macro

Sub RecopierMacro(depuis As VBComponent, jusque As VBComponent)
    With jusque.CodeModule
        For i = 1 To depuis.CodeModule.CountOfLines
            .InsertLines i, depuis.CodeModule.Lines(i, 1)
        Next
    End With
End Sub

En refaisant des tests, j'au remarqué aussi qu'il fallait que l'éditeur de macro soit ouvert. Je vais investiguer.

Le problème a déjà été rencontré et une solution décrite ici

https://forum.excel-pratique.com/viewtopic.php?forum_uri=excel&t=29521&start=

Je vais donc l'implémenter également.

Hello,

cette version fonctionne même si l'éditeur de macro est fermé

22dupliquer-macro.xlsm (169.04 Ko)

Hello,

cette version fonctionne même si l'éditeur de macro est fermé

bonsoir

et merci beaucoup pour votre temps que tu me donné pour résoudre mon problème

j'ai lancer le fichier test.xls qui contient le tableau

apres jai lancer le fichier copies.xlam qui contient macro et private sub dans le feuil1

apres l'exécution le nouveau fichier classeur1 ne contient pas le private sub dans "copies feuil1"

merci beaucoup et bonne année

23ilies.rar (22.21 Ko)

Bonjour a tous

meilleurs voeux a tous

je constate que le private sub fais parti de la feuille 1

donc la macro copie le tableau puis le colle dans un nouveau classeur

pourquoi ne pas copier la feuille plutôt que le tableau ce qui entraine la copie des macros associées

voir fichier joint

16ilies.xlsm (17.27 Ko)

pourquoi ne pas copier la feuille plutôt que le tableau ce qui entraine la copie des macros associées

En effet, je m'étais posé la question ... et puis je me suis dit que la feuille pouvait contenir autre chose et qu'enfin c'était un bon exercice de style.

Du reste, je me rends compte que la feuille de base ne comporte aucune macro qui est contenue dans un module xlam complémentaire. La demande est pertinente.


cette version fonctionne même si l'éditeur de macro est fermé

j'ai lancer le fichier test.xls qui contient le tableau

apres jai lancer le fichier copies.xlam qui contient macro et private sub dans le feuil1

apres l'exécution le nouveau fichier classeur1 ne contient pas le private sub dans "copies feuil1"

merci beaucoup et bonne année

Bonne année à toi aussi

As-tu essayé en l'état le fichier posté ? avec les 2 recommandations ? Il fonctionne ...

j'ai lancer le fichier test.xls qui contient le tableau

apres jai lancer le fichier copies.xlam qui contient macro et private sub dans le feuil1

C'est une nouvelle donnée pour moi qui n'utilise pas de xlam !! j'avais interprété ta demande qui ne comportait qu'un seul fichier, le tableau faisait partie du fichier contenant la macro.

Puisque le fichier avec le tableau ne comporte pas de macro ... essaie alors cette version de ta "macro2"

Il faut :

  • cocher la réference Microsoft Visual Basic for Applications Extensibility 5.3 dans l'éditeur de macro
  • cocher la case "Accès approuvé au modèle d'objet du projet VBA" de la feuille
acces approuve au modele d objet du projet vba
Sub macro2()
' cocher la réference Microsoft Visual Basic for Applications Extensibility 5.3
    ActiveSheet.ListObjects("Tableau1").Range.Copy
    Workbooks.Add
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Name = "GR"
    Range("A1").Select

    With ActiveWorkbook.VBProject.VBComponents(WsCodeName(ActiveSheet)).CodeModule
        ligne = .CountOfLines
        .InsertLines ligne + 1, "Private Sub Worksheet_Change(ByVal Target As Range)"
        .InsertLines ligne + 2, "If Not Intersect(Target, Range(""A1"")) Is Nothing Then"
        .InsertLines ligne + 3, "ActiveSheet.ListObjects(""Tableau1"").Range.AutoFilter Field:=5, Criteria1:=Range(""A1"")"
        .InsertLines ligne + 4, "End If"
        .InsertLines ligne + 5, "Range(""A1"").Select"
        .InsertLines ligne + 6, "End Sub"
    End With

End Sub

Function WsCodeName$(Ws As Object)
On Error Resume Next
With Application.VBE.MainWindow
     WsCodeName = Ws.CodeName
End With
End Function

Coucou

des nouvelles ?

bonsoir

désolé pour ce retard

je suis un comptable et après l’édition du grand livre le logiciel de comptabilité de ma société me donne un fichier excel très moche et très inutile et comme chaque fois je modifier ce fichier pour mieux travaillé j'ai enregistrer grand livre.xlam pour automatisé les choses

et après l’exécution du grand livre.xlam je souhaite copier le private sub de feuil1 grand livre.xlam vers feuil1 de nouveau fichier

merci beaucoup

https://www.cjoint.com/c/HAewFFOrtGt

Bjr,

in fine cela fonctionne ou pas avec xlam ?

j'ai tenté d'utiliser xlam mais je ne sais pas faire ! par contre la macro est testée et fonctionne, je suppose qu'il faut donc l'incorporer au fichier xlam ou l'adapter

merci beaucoup Mr steelson grâce a votre explication j'ai appris beaucoup choses

Rechercher des sujets similaires à "module classe"