Excel Déplacement d'une feuille et des macros
Résolu/Fermé
ppil
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
-
1 oct. 2007 à 15:12
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 - 9 oct. 2007 à 13:22
ppil Messages postés 33 Date d'inscription lundi 1 octobre 2007 Statut Membre Dernière intervention 8 octobre 2009 - 9 oct. 2007 à 13:22
A voir également:
- Excel Déplacement d'une feuille et des macros
- Déplacer une colonne excel - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Word et excel gratuit - Guide
9 réponses
ppil
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
13
8 oct. 2007 à 13:14
8 oct. 2007 à 13:14
Bonjour,
Merci à Lupin et Eric. Grace à vous deux mon problème est résolu. Voici le code final:
Sub ExportCodeMod()
' Dimension variables
Dim strCode As String
Dim vbCom As VBComponent
Dim modObj As Object
Dim strCode1 As String
Dim vbCom1 As VBComponent
Dim modObj1 As Object
Dim iNumFeuil As Integer
'
' Copie des macros de la feuille 6
'
' Set object to the module you want to export.
Set modObj1 = _
Application.VBE.ActiveVBProject.VBComponents.Item("Feuil6")
' Place code in a string.
strCode1 = modObj1.CodeModule.Lines(1, modObj1.CodeModule.CountOfLines)
'
' Copie des macros du module 3
'
' Set object to the module you want to export.
Set modObj = _
Application.VBE.ActiveVBProject.VBComponents.Item("Module3")
' Place code in a string.
strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines)
'
' Déplace la feuille active
'
' Donne le chemin actuel
vRépertoireActuelle = ThisWorkbook.Path
' Donne le nom de la feuille active actuelle
vFeuilActuelle = ActiveSheet.Name
' Déplace la feuille Actuelle active
Sheets(vFeuilActuelle).Move
' Add code to sheet(2) from string variable.
' Cherche le numéro de la feuille
For i = 1 To 2
If Left(ActiveWorkbook.VBProject.VBComponents(i).Name, 5) = "Feuil" Then
iNumFeuil = i
End If
Next i
' Add code to "FeuilX" from string variable.
Application.VBE.ActiveVBProject.VBComponents(1) _
.CodeModule.AddFromString (strCode1)
' Create a new module in workbook.
Application.VBE.ActiveVBProject.VBComponents.Add (vbext_ct_StdModule)
' Add code to new module from string variable.
Application.VBE.ActiveVBProject.VBComponents.Item("Module1") _
.CodeModule.AddFromString (strCode)
' Sauvegarde le nouveau fichier
ActiveWorkbook.SaveAs Filename:=vRépertoireActuelle & "\Planning semaine\" & vFeuilActuelle
End Sub
Il n'est pas forcèment optimal, mais il marche très bien.
ppil
Merci à Lupin et Eric. Grace à vous deux mon problème est résolu. Voici le code final:
Sub ExportCodeMod()
' Dimension variables
Dim strCode As String
Dim vbCom As VBComponent
Dim modObj As Object
Dim strCode1 As String
Dim vbCom1 As VBComponent
Dim modObj1 As Object
Dim iNumFeuil As Integer
'
' Copie des macros de la feuille 6
'
' Set object to the module you want to export.
Set modObj1 = _
Application.VBE.ActiveVBProject.VBComponents.Item("Feuil6")
' Place code in a string.
strCode1 = modObj1.CodeModule.Lines(1, modObj1.CodeModule.CountOfLines)
'
' Copie des macros du module 3
'
' Set object to the module you want to export.
Set modObj = _
Application.VBE.ActiveVBProject.VBComponents.Item("Module3")
' Place code in a string.
strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines)
'
' Déplace la feuille active
'
' Donne le chemin actuel
vRépertoireActuelle = ThisWorkbook.Path
' Donne le nom de la feuille active actuelle
vFeuilActuelle = ActiveSheet.Name
' Déplace la feuille Actuelle active
Sheets(vFeuilActuelle).Move
' Add code to sheet(2) from string variable.
' Cherche le numéro de la feuille
For i = 1 To 2
If Left(ActiveWorkbook.VBProject.VBComponents(i).Name, 5) = "Feuil" Then
iNumFeuil = i
End If
Next i
' Add code to "FeuilX" from string variable.
Application.VBE.ActiveVBProject.VBComponents(1) _
.CodeModule.AddFromString (strCode1)
' Create a new module in workbook.
Application.VBE.ActiveVBProject.VBComponents.Add (vbext_ct_StdModule)
' Add code to new module from string variable.
Application.VBE.ActiveVBProject.VBComponents.Item("Module1") _
.CodeModule.AddFromString (strCode)
' Sauvegarde le nouveau fichier
ActiveWorkbook.SaveAs Filename:=vRépertoireActuelle & "\Planning semaine\" & vFeuilActuelle
End Sub
Il n'est pas forcèment optimal, mais il marche très bien.
ppil
Utilisateur anonyme
8 oct. 2007 à 14:15
8 oct. 2007 à 14:15
Bonjour,
Voici donc quelques observations et quelques variantes :-)
je ne comprends pas la suite d'instruction :
il me semble qu'il manque des paramètres à l'instruction [Move].
genre : [ Sheets("Feuil1").Move After:=Sheets(2) ]
Cordialement
Lupin
Voici donc quelques observations et quelques variantes :-)
Sub ExportCodeMod() ' Dimension variables Dim strCode As String, vbCom As VBComponent Dim modObj As Object, modObj1 As Object Dim vbCom1 As VBComponent, iNumFeuil As Integer Dim CheminFichier As String ' Copie des macros de la feuille 6 With Application.VBE.ActiveVBProject ' Sélectionner l'objet (le module) que vous vouler exporter. Set modObj1 = .VBComponents.Item("Feuil6") ' Place le code dans une variable "string" (chaîne). strCode1 = modObj1.CodeModule.Lines(1, modObj1.CodeModule.CountOfLines) ' Copie des macros du module 3 ' Sélectionner l'objet (le module) que vous vouler exporter. Set modObj = .VBComponents.Item("Module3") ' Place le code dans une variable "string" (chaîne). strCode = modObj.CodeModule.Lines(1, modObj.CodeModule.CountOfLines) End With ' Donne le chemin actuel vRépertoireActuelle = ThisWorkbook.Path ' Donne le nom de la feuille active actuelle vFeuilActuelle = ActiveSheet.Name ' Déplace la feuille Actuelle active Sheets(vFeuilActuelle).Move ' Cherche le numéro de la feuille For i = 1 To 2 If Left(ActiveWorkbook.VBProject.VBComponents(i).Name, 5) = "Feuil" Then iNumFeuil = i End If Next i With Application.VBE.ActiveVBProject ' Ajoute le code à la "FeuilX" en provenance de la variable. .VBComponents(1).CodeModule.AddFromString (strCode1) ' Création d'un nouveau module VBA dans le classeur actif. .VBComponents.Add (vbext_ct_StdModule) ' Add code to new module from string variable. .VBComponents.Item("Module1").CodeModule.AddFromString (strCode) End With ' Sauvegarde le nouveau fichier CheminFichier = vRépertoireActuelle & "\Planning semaine\" & vFeuilActuelle ActiveWorkbook.SaveAs Filename:=CheminFichier End Sub '
je ne comprends pas la suite d'instruction :
Sheets(vFeuilActuelle).Move ' Add code to sheet(2) from string variable. ' Cherche le numéro de la feuille For i = 1 To 2
il me semble qu'il manque des paramètres à l'instruction [Move].
genre : [ Sheets("Feuil1").Move After:=Sheets(2) ]
Cordialement
Lupin
ppil
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
13
9 oct. 2007 à 13:22
9 oct. 2007 à 13:22
Lupin,
Non, l'instruction que j'ai mis suffis.
Le paramètre [ Sheets("Feuil1").Move After:=Sheets(2) ] ne fonctionnerai pas. Du fait que je n'ai qu'une seule feuille (sheet) dans mon nouveau fichier (classeur).
Donc parfois la simplicité marche aussi.
Amitié
ppil
Non, l'instruction que j'ai mis suffis.
Le paramètre [ Sheets("Feuil1").Move After:=Sheets(2) ] ne fonctionnerai pas. Du fait que je n'ai qu'une seule feuille (sheet) dans mon nouveau fichier (classeur).
Donc parfois la simplicité marche aussi.
Amitié
ppil
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
1 oct. 2007 à 18:51
1 oct. 2007 à 18:51
Bonjour,
Pas de réponse à ta question mais pourquoi ne traites-tu pas ton pb autrement ?
Supprimer les autres feuilles et enregistrer sous...
eric
Pas de réponse à ta question mais pourquoi ne traites-tu pas ton pb autrement ?
Supprimer les autres feuilles et enregistrer sous...
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ppil
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
13
2 oct. 2007 à 08:09
2 oct. 2007 à 08:09
Bonjour Eric,
Oui, merci, mais...
J'y avais déjà penser, mais le problème est que l'on perd toute les modifs du fichier source. Alors il faut d'abord enregistrer la source puis Supprimer les autres feuilles et enregistrer sous... Mais cela prends un temps fou. Et mon but premier est de racourcir les temps de traitements, notre réseau est lent, voir très lent par moment.
Il faut plus de 2 minutes pour sauvegarder le fichier source.
Donc je cherche à l'allèger
Et je ne voulais pas copier toutes les (nombreuses) macros du fichier.
Je suis peut-être un peu exigeant, mais je trouve étrange de ne pas pouvoir le faire...
ppil
Oui, merci, mais...
J'y avais déjà penser, mais le problème est que l'on perd toute les modifs du fichier source. Alors il faut d'abord enregistrer la source puis Supprimer les autres feuilles et enregistrer sous... Mais cela prends un temps fou. Et mon but premier est de racourcir les temps de traitements, notre réseau est lent, voir très lent par moment.
Il faut plus de 2 minutes pour sauvegarder le fichier source.
Donc je cherche à l'allèger
Et je ne voulais pas copier toutes les (nombreuses) macros du fichier.
Je suis peut-être un peu exigeant, mais je trouve étrange de ne pas pouvoir le faire...
ppil
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
2 oct. 2007 à 12:14
2 oct. 2007 à 12:14
Sûrement que ça existe mais je suis comme toi, je n'ai jamais rencontré de fonctions/methodes pour gérer les modules, désolé.
Pour gagner un peu de temps en attendant il y a la solution de travailler sur une copie locale et d'envoyer en dernier une fois toutes les modifs faites.
eric
Pour gagner un peu de temps en attendant il y a la solution de travailler sur une copie locale et d'envoyer en dernier une fois toutes les modifs faites.
eric
ppil
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
13
4 oct. 2007 à 14:53
4 oct. 2007 à 14:53
Merci Eric,
Travailler en local n'est pas non plus possible. C'est un fichier commun. Différents utilisateurs viennent durant la journée, nourrir le fichier.
J'ai trouvé une demie solution. J'ai mis les macros concernées au niveau de la feuille que je déplace. Cela marche très bien. Les macros suivent la copie. Mais...
Le problème que j'ai avec cette solution, est que je ne sais pas comment, en VBA, affecté une macro à un bouton. C'est-à-dire que la macro est liés à la feuille, donc mon code initial suivant n'est pas suffisant:
Selection.OnAction = "RemarquesLundi"
"RemarquesLundi" étant le nom de ma macro
Le code dans ce cas devrait être :
Selection.OnAction = "Feuil8!RemarquesLundi"
Malheureusement je ne connais pas le numéro de la feuille, 8 dans mon exemple, car il peut varier d'une fois à l'autre.
Est-ce que quelqu'un à une solution?
ppil
Travailler en local n'est pas non plus possible. C'est un fichier commun. Différents utilisateurs viennent durant la journée, nourrir le fichier.
J'ai trouvé une demie solution. J'ai mis les macros concernées au niveau de la feuille que je déplace. Cela marche très bien. Les macros suivent la copie. Mais...
Le problème que j'ai avec cette solution, est que je ne sais pas comment, en VBA, affecté une macro à un bouton. C'est-à-dire que la macro est liés à la feuille, donc mon code initial suivant n'est pas suffisant:
Selection.OnAction = "RemarquesLundi"
"RemarquesLundi" étant le nom de ma macro
Le code dans ce cas devrait être :
Selection.OnAction = "Feuil8!RemarquesLundi"
Malheureusement je ne connais pas le numéro de la feuille, 8 dans mon exemple, car il peut varier d'une fois à l'autre.
Est-ce que quelqu'un à une solution?
ppil
Utilisateur anonyme
4 oct. 2007 à 17:06
4 oct. 2007 à 17:06
Bonjour,
Vous trouverez tout le code VBA nécessaire à manipuler les objets VBA ainsi que les objets Excel dans
le classeur [ VisioXLA ] publié sur Excel-Download.
Vous trouverez une routine qui lit les modules. De plus il y a un menu attaché au classeur Excel, ce menu
est généré de façon automatique à l'ouverture et supprimer à la fermeture du classeur.
https://www.excel-downloads.com/resources/categories/utilitaires.18/
( reperer VisioXla )
Lupin
Vous trouverez tout le code VBA nécessaire à manipuler les objets VBA ainsi que les objets Excel dans
le classeur [ VisioXLA ] publié sur Excel-Download.
Vous trouverez une routine qui lit les modules. De plus il y a un menu attaché au classeur Excel, ce menu
est généré de façon automatique à l'ouverture et supprimer à la fermeture du classeur.
https://www.excel-downloads.com/resources/categories/utilitaires.18/
( reperer VisioXla )
Lupin
Bonsoir,
https://support.microsoft.com/en-us/help/245801/
Résumé
Vous souhaitez peut-être insérer le code VBA stocké par programme dans un nouveau classeur que vous créez avec la méthode Workbooks.Add. Cela peut être nécessaire si vous créez par programme les nouveau classeur dans lesquels vous souhaitez que place des données et macro.
Cet article décrit les méthodes automatisées que vous pouvez utiliser pour que prendre le code VBA stocké dans un module dans un autre classeur ouvert, une plage nommée d'un calcul ou un fichier texte et pouvez l'insérer dans un nouveau classeur vide
(traduction microsoft ;-) )
Tu y trouveras des choses pouvant t'interesser...
eric
https://support.microsoft.com/en-us/help/245801/
Résumé
Vous souhaitez peut-être insérer le code VBA stocké par programme dans un nouveau classeur que vous créez avec la méthode Workbooks.Add. Cela peut être nécessaire si vous créez par programme les nouveau classeur dans lesquels vous souhaitez que place des données et macro.
Cet article décrit les méthodes automatisées que vous pouvez utiliser pour que prendre le code VBA stocké dans un module dans un autre classeur ouvert, une plage nommée d'un calcul ou un fichier texte et pouvez l'insérer dans un nouveau classeur vide
(traduction microsoft ;-) )
Tu y trouveras des choses pouvant t'interesser...
eric