Copie de code entre onglet via macro
Résolu/Fermé
no0ny
Messages postés
5
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 septembre 2016
-
22 juil. 2016 à 22:10
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 27 juil. 2016 à 11:26
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 27 juil. 2016 à 11:26
A voir également:
- Copie de code entre onglet via macro
- Copie cachée - Guide
- Code ascii de a - Guide
- Rouvrir onglet fermé - Guide
- Code puk bloqué - Guide
- Copie écran samsung - Guide
9 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
23 juil. 2016 à 08:51
23 juil. 2016 à 08:51
Bonjour,
comme ceci:
comme ceci:
Option Explicit Private Sub CommandButton1_Click() Dim LeClasseurCible As Workbook Set LeClasseurCible = Workbooks("Classeur1.xls") 'le classeur doit être ouvert adapter le nom TransfertModule LeClasseurCible End Sub Sub TransfertModule(wkb As Workbook) Dim moduleTexte As String With ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule 'adapter nom de la Feuille moduleTexte = .Lines(1, .CountOfLines) End With moduleTexte = Replace(moduleTexte, "Option Explicit", "") wkb.VBProject.VBComponents("Feuil1").CodeModule.AddFromString moduleTexte 'adapter nom de la Feuille End Sub
no0ny
Messages postés
5
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 septembre 2016
25 juil. 2016 à 12:46
25 juil. 2016 à 12:46
Merci,
très pratique la fonction mais ne passe pas pour mon cas.
J'ai un onglet Semaine 30 qui génère Semaine 31
Et il me faut un moyen de copier mon code Worksheet_BeforeDoubleClick de la semaine 30 à la semaine 31.
Je sais pas si c'est super clair, mais on fait notre maximum :)
très pratique la fonction mais ne passe pas pour mon cas.
J'ai un onglet Semaine 30 qui génère Semaine 31
Et il me faut un moyen de copier mon code Worksheet_BeforeDoubleClick de la semaine 30 à la semaine 31.
Je sais pas si c'est super clair, mais on fait notre maximum :)
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
25 juil. 2016 à 12:59
25 juil. 2016 à 12:59
sans code, difficile de répondre!
peut-être en renseignant les feuilles comme ceci:
peut-être en renseignant les feuilles comme ceci:
Sub TransfertModule(wkb As Workbook) Dim moduleTexte As String With ThisWorkbook.VBProject.VBComponents("semaine30").CodeModule 'adapter nom de la Feuille moduleTexte = .Lines(1, .CountOfLines) End With moduleTexte = Replace(moduleTexte, "Option Explicit", "") wkb.VBProject.VBComponents("semaine31").CodeModule.AddFromString moduleTexte 'adapter nom de la Feuille End Sub
no0ny
Messages postés
5
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 septembre 2016
25 juil. 2016 à 13:52
25 juil. 2016 à 13:52
En code j'en ai pas, je test les fonctions depuis un bouton
Quand je test avec ton morceaux de code il me sort une erreur 424 Objet requis
C'est sur cette ligne ci
wkb.VBProject.VBComponents("semaine31").CodeModule.AddFromString moduleTexte
J'ai refixé le nom dans l'explorateur de projet VBA en "semaine31"
Quand je test avec ton morceaux de code il me sort une erreur 424 Objet requis
C'est sur cette ligne ci
wkb.VBProject.VBComponents("semaine31").CodeModule.AddFromString moduleTexte
J'ai refixé le nom dans l'explorateur de projet VBA en "semaine31"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
25 juil. 2016 à 14:11
25 juil. 2016 à 14:11
en lisant ceci, il y a bien une macro!
Le problème c'est que j'aimerais le déplacer dans le nouvel classeur que je génère avec ma macro.
Ce n'est pas clair du tout!
Il faut que dans le classeur créé, il y est des feuilles nommées semaine30 et semaine31. Sinon cela ne peut fonctionner. Ce que je voudrais c'est la macro qui crée ce classeur!
Le problème c'est que j'aimerais le déplacer dans le nouvel classeur que je génère avec ma macro.
Ce n'est pas clair du tout!
Il faut que dans le classeur créé, il y est des feuilles nommées semaine30 et semaine31. Sinon cela ne peut fonctionner. Ce que je voudrais c'est la macro qui crée ce classeur!
no0ny
Messages postés
5
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 septembre 2016
Modifié par no0ny le 25/07/2016 à 14:27
Modifié par no0ny le 25/07/2016 à 14:27
Sub crea() Dim semaine As Byte 'creation d'une variable semaine pour le numéro de semaine semaine = WorksheetFunction.WeekNum(Date, 21) + 1 'Récupération du Numero de semaine Sheets.Add 'création d'un onglet ActiveSheet.Name = "semaine" & semaine 'Renommage de l'onglet avec le numéro de la semaine "Semaine X" End Sub
Voila ce code pour faire mon onglet avec mon nom de semaine
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
25 juil. 2016 à 14:57
25 juil. 2016 à 14:57
Avec le code c'est quand même plus facile!
Dim semaine As Byte 'creation d'une variable semaine pour le numéro de semaine Sub crea() semaine = WorksheetFunction.WeekNum(Date, 21) + 1 'Récupération du Numero de semaine Sheets.Add 'création d'un onglet ActiveSheet.Name = "semaine" & semaine 'Renommage de l'onglet avec le numéro de la semaine "Semaine X" End Sub Sub TransfertModule(wkb As Workbook) Dim moduleTexte As String With ThisWorkbook.VBProject.VBComponents("semaine" & semaine).CodeModule 'adapter nom de la Feuille moduleTexte = .Lines(1, .CountOfLines) End With moduleTexte = Replace(moduleTexte, "Option Explicit", "") wkb.VBProject.VBComponents("semaine" & semaine).CodeModule.AddFromString moduleTexte 'adapter nom de la Feuille End Sub
no0ny
Messages postés
5
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 septembre 2016
25 juil. 2016 à 16:30
25 juil. 2016 à 16:30
Parfait ça fonctionne.
Merci beaucoup Le Pivert :)
Merci beaucoup Le Pivert :)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
27 juil. 2016 à 10:58
27 juil. 2016 à 10:58
Bonjour,
Il est possible de s'affranchir de tout ceci (écrire un module de code par feuille), en passant par 2 modules de classe, 1 nom (gestionnaire de noms), 1 module standard et le module ThisWorkbook.
Par contre, cela nécessitera de supprimer tous les modules objets des feuilles déjà créées...
Si vous êtes intéressés, n'hésitez pas à relancer ce sujet.
Il est possible de s'affranchir de tout ceci (écrire un module de code par feuille), en passant par 2 modules de classe, 1 nom (gestionnaire de noms), 1 module standard et le module ThisWorkbook.
Par contre, cela nécessitera de supprimer tous les modules objets des feuilles déjà créées...
Si vous êtes intéressés, n'hésitez pas à relancer ce sujet.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
27 juil. 2016 à 11:26
27 juil. 2016 à 11:26
Je mets ce code à titre d'exemple uniquement :
!!! A placer dans un nouveau classeur !!!
dans un module standard :
Dans un module de classe nommé : ClApplication
Dans un module de classe nommé : ClFeuille
Dans le module ThisWorkbook :
Ne reste qu'à définir le nom dans le gestionnaire de noms :
Onglet Formules
Gestionnaire de noms
Nouveau
>> Nom : Feuilles_Classe
>> RefersTo : Lister les feuilles séparées par un ; comme ceci :
Feuil1;Feuil3;Feuil4
Valider.
Fermer puis ouvrir le classeur
!!! A placer dans un nouveau classeur !!!
dans un module standard :
Public Classe As New ClApplication Public SheetsColl() As New ClFeuille Public Index As Long Public Sub Init() Dim monString As String, F As Variant, E As Variant, Sh As Worksheet Set Classe.App = Application monString = Replace(ThisWorkbook.Names("Feuilles_Classe").RefersTo, "=", "") F = Split(monString, ",") If UBound(F) = 0 Then Exit Sub For Each E In F Set Sh = Sheets(E) SheetsAdd Sh Next E End Sub Public Sub SheetsAdd(Wsh As Worksheet) Index = Index + 1 ReDim Preserve SheetsColl(Index) Set SheetsColl(Index).Feuille = Wsh End Sub
Dans un module de classe nommé : ClApplication
Option Explicit Public WithEvents App As Application Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object) Dim strNom As String, E As Variant SheetsAdd Sh E = Split(ThisWorkbook.Names("Feuilles_Classe").RefersTo, ",") If UBound(E) = 0 Then strNom = Sh.Name Else strNom = ThisWorkbook.Names("Feuilles_Classe").RefersTo & "," & Sh.Name End If ThisWorkbook.Names("Feuilles_Classe").RefersTo = strNom End Sub
Dans un module de classe nommé : ClFeuille
Option Explicit Public WithEvents Feuille As Worksheet Private Sub Feuille_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'placer ici la procédure événementielle (valable pour chacune des feuilles) MsgBox Target.Address End Sub
Dans le module ThisWorkbook :
Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) Set Classe.App = Nothing End Sub Private Sub Workbook_Open() Dim str As String On Error GoTo CreateNom str = ThisWorkbook.Names("Feuilles_Classe").RefersTo Init Exit Sub CreateNom: ActiveWorkbook.Names.Add Name:="Feuilles_Classe", RefersTo:="=""""""""" Init End Sub
Ne reste qu'à définir le nom dans le gestionnaire de noms :
Onglet Formules
Gestionnaire de noms
Nouveau
>> Nom : Feuilles_Classe
>> RefersTo : Lister les feuilles séparées par un ; comme ceci :
Feuil1;Feuil3;Feuil4
Valider.
Fermer puis ouvrir le classeur