Module de classe automatique
bonjour
j'ai le macro suivant qui copie un tableau et le coller dans un nouveau fichier excel
Code:
1 2 3 4 5 6 7 8 9 10 11
| 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
Code:
1 2 3 4 5 6 7
| 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 |
Copier une feuille depuis un classeur de macro complémentaire
Bonjour,
Ayant eu un peu de temps aujourd'hui pour faire des tests, je reviens à ce fil #12
La commande que j'avais proposée dans ce fil
Code:
ThisWorkbook.Worksheets("Feuil4").Copy
Fonctionne également depuis un fichier xlam.
Comme je travaille avec des menus intégrés dans l'onglet compléments lorsque je lance des procédures présentes dans un fichier xlam, ma réponse du fil #13
Citation:
On peut bien entendu copier la feuille d'un classeur suffixé xlam rérérencé comme macro complémentaire mais ce n'est pas tout à fait la même façon de travailler.
n'était pas tout à fait correcte.
Deux scénarios
Imaginons un fichier de macro complémentaire nommé "180106Perso.xlam" contenant plusieurs feuilles dont l'une nommée M contient des procédures (Sub)
Dans un module nommé mMain, il y a une procédure dont voici le code
Code:
1 2 3
| Sub testCopyFromXlam()
ThisWorkbook.Worksheets("M").Copy
End Sub |
Scénario 1
Nous souhaitons copier la feuille M dans un nouveau classeur
Dans un classeur quelconque nous allons placer une procédure nommée Test (voir ci-dessous) qui va appeler la procédure testCopyFromXlam de la macro complémentaire
Code:
1 2 3
| Sub Test()
Run "180106Perso.xlam!testCopyFromXlam"
End Sub |
La feuille nommée M contenant des procédures, elles sont utilisables depuis ce nouveau classeur
Scénario 2
Nous souhaitons pouvoir copier une des feuilles que contient ce classeur de macro complémentaire vers un nouveau classeur et ce en le sélectionnant dans une liste déroulante.
Dans un classeur quelconque nous allons placer une procédure nommée Test (voir ci-dessous) qui va appeler la procédure LancerFormulaire de la macro complémentaire
Code:
1 2 3
| Sub Test()
Run "180106Perso.xlam!LancerFormulaire"
End Sub |
Les procédures présentes dans le fichier xlam
Dans le module nommé mMain
Code:
1 2 3
| Sub LancerFormulaire()
usfSheetList.Show
End Sub |
Procédure du UserForm nommé usfSheetList
[/B]Ce formulaire (UserForm) contient un contrôle nommé et a pour but d'afficher la liste des feuilles contenue dans le fichier xlam et de copier la feuille sélectionnée. Seule la feuille dont le CodeName est ShtMenu ne sera pas affichée.
Code:
1 2 3 4 5 6 7 8
| Private Sub UserForm_Activate()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
If LCase(Trim(sh.CodeName)) <> "shtmenu" Then
Me.lstWorkSheet.AddItem sh.Name
End If
Next
End Sub |
Procédure événementielle du lstWorkSheet_Click permettant de copier la feuille sélectionnée dans la liste
Code:
1 2 3 4 5 6 7 8
| Private Sub lstWorkSheet_Click()
If MsgBox("Voulez-vous copier la feuille " & _
Me.lstWorkSheet.Value, _
vbInformation + vbYesNo + vbDefaultButton2) = vbYes Then
ThisWorkbook.Worksheets(Me.lstWorkSheet.Value).Copy
Unload Me
End If
End Sub |
[EDIT]
Scénario 3
Nous souhaitons copier une des feuilles contenue dans le classeur de macro complémentaire mais sans la choisir dans une liste.
Pour cela il faudra prévoir un argument ShtName de type String représentant le nom de la feuille à copier et que nous définirons comme optionnel et avec comme valeur par défaut M, pour éviter d'enclencher une erreur si nous avons déjà créer des classeurs utilisant notre première procédure du scénario 1
Procédure modifiée dans le classeur de macro complémentaire
Code:
1 2 3
| Sub testCopyFromXlam(Optional ShtName As String = "M")
ThisWorkbook.Worksheets(ShtName).Copy
End Sub |
La procédure appelante à placer dans le module d'un classeur quelconque
Commande qui lance la copie de la feuille nommée A
Code:
Run "180106Perso.xlam!testCopyFromXlam", "A"
Commande qui lance la copie de la feuille nommée M (Argument optionnel avec comme valeur par défaut M
Code:
Run "180106Perso.xlam!testCopyFromXlam"
Attention !!! Il faudra prévoir une détection d'erreur pour le cas où le nom de la feuille passée comme argument n'existe pas