Bonjour à tous les XLDiens.
Je bute sur un truc à priori idiot : j'ai le codename de la feuille, je n'arrive pas à obtenir son name (ou le contraire, à force de buter là-dessus, je commence à confondre !).
Dans tous les cas, ayant l'un il doit bien avoir un moyen de connaitre l'autre.
Voici ma macro, chargée de placer du code dans des feuilles et dans un module standard sur un classeur, mais selon 1 critère : que le nom de la feuille enrichie contienne la séquence de caractères passée dans le paramètre "modele_is".
Alors si vous avez un moment, une envie, une curiosité, que vous n'êtes pas trop ballonné par le précédent reveillon, pas encore absorbé par celui qui s'approche, bref si vous avez le virus xldien, sautez sur cette occasion et sortez moi de là, cela fera 2 heureux, dont surtout moi, bien sur !
Amicalement
DMC
Je bute sur un truc à priori idiot : j'ai le codename de la feuille, je n'arrive pas à obtenir son name (ou le contraire, à force de buter là-dessus, je commence à confondre !).
Dans tous les cas, ayant l'un il doit bien avoir un moyen de connaitre l'autre.
Voici ma macro, chargée de placer du code dans des feuilles et dans un module standard sur un classeur, mais selon 1 critère : que le nom de la feuille enrichie contienne la séquence de caractères passée dans le paramètre "modele_is".
Code:
Private Function macro_insert(ma_place As String, File_Is As String, Modele_Is As String)
Dim ma_macro_is As String
Dim VBComp As Object
Dim wBComp As Object
Dim X As Integer
ma_macro_is = ThisWorkbook.Name
Workbooks.Open Filename:=ma_place & File_Is
Sheets(1).Activate
' insertion des macros
'boucler sur chaque module du nouveau classeur (ThisWorkbook + Feuilles + Modules + UserForms + Modules de classe)
For Each VBComp In Workbooks(File_Is).VBProject.VBComponents
Select Case VBComp.Type
Case 1 ' vbext_ct_StdModule ' 1
' I = VBComp.CodeModule.CountOfDeclarationLines + 1
X = VBComp.CodeModule.CountOfLines
If X > 0 Then Workbooks(File_Is).VBProject.VBComponents.Remove VBComp
Case 100 'vbext_ct_Document ' 100 (And vbComp.Name = CodeNouvFeuille)
'si il s'agit d'un module de type Feuille
'copier le code contenu dans le Module "Module2" de ce classeur
' uniquement si modules de feuilles tarifs
zz = Worksheets(Modele_Is).CodeName
zz2 = Worksheets(Modele_Is).Name
[B][COLOR="red"]'If InStr(1, VBComp.Name, Modele_Is, vbTextCompare) > 0 Then[/COLOR][/B] <----- c'est cette ligne que je veux mettre au point !!!
With Workbooks(ma_macro_is).VBProject.VBComponents("Module2").CodeModule
If VBComp.CodeModule.CountOfLines > 0 Then 'enlever le code déjà existant
VBComp.CodeModule.DeleteLines 1, VBComp.CodeModule.CountOfLines
End If
VBComp.CodeModule.AddFromString .Lines(1, .CountOfLines)
End With
'End If
End Select
Next VBComp
'Ajoute un module standard dans le classeur
Set wBComp = Workbooks(File_Is).VBProject.VBComponents.Add(1)
'Renomme le module
'wBComp.Name = "ModuleFonctions"
With Workbooks(ma_macro_is).VBProject.VBComponents("Module3").CodeModule
wBComp.CodeModule.AddFromString .Lines(1, .CountOfLines)
End With
Workbooks(File_Is).SaveAs ma_place & Left(File_Is, InStr(1, File_Is, ".xls") - 1) & ".xls", xlNormal
ActiveWorkbook.Close
End Function
Alors si vous avez un moment, une envie, une curiosité, que vous n'êtes pas trop ballonné par le précédent reveillon, pas encore absorbé par celui qui s'approche, bref si vous avez le virus xldien, sautez sur cette occasion et sortez moi de là, cela fera 2 heureux, dont surtout moi, bien sur !
Amicalement
DMC