écrire avec macro dans feuille

CMoa

XLDnaute Occasionnel
Bonjour à tous :D

Je lutte avec une macro dont je n'arrive pas à envoyer le contenu dans toutes les feuilles de mon classeur.
Je sais l'envoyer dans le workbook mais pas dans la feuille.
Voici la macro:

Code:
Sub AjouterCode4()
Dim MonCode4 As String
    MonCode4 = MonCode4 & "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & vbCrLf
    MonCode4 = MonCode4 & "If Not Application.Intersect( Target, Range (""P7""))  Is Nothing Then " & vbCrLf
    MonCode4 = MonCode4 & "End If" & vbCrLf
    MonCode4 = MonCode4 & "End Sub"
ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule.InsertLines 58, MonCode4
End Sub
'Option Explicit

Merci pour votre aide.
 

pierrejean

XLDnaute Barbatruc
Re : écrire avec macro dans feuille

bonjour CToa

Si ton projet n'a pas autre chose qu'un module (Module1) :

Code:
Sub test()
Dim MonCode4 As String
    MonCode4 = MonCode4 & "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & vbCrLf
    MonCode4 = MonCode4 & "If Not Application.Intersect( Target, Range (""P7""))  Is Nothing Then " & vbCrLf
    MonCode4 = MonCode4 & "End If" & vbCrLf
    MonCode4 = MonCode4 & "End Sub"
For Each vbp In ActiveWorkbook.VBProject.VBComponents
If vbp.Name <> "Module1" Then
  vbp.codemodule.insertlines 58, MonCode4
End If
Next vbp
End Sub

sinon tu geres les exceptions comme pour Module1
 

CMoa

XLDnaute Occasionnel
Re : écrire avec macro dans feuille

Bonjour pierrejean
merci pour ta réponse.
cette macro bugue au niveau de
Code:
For Each [COLOR="Red"]vbp[/COLOR]
ça me dit : variable non définie.
Si j'ai bien compris cette macro créee un module et renvoie le code dans les feuilles?
@+
 

pierrejean

XLDnaute Barbatruc
Re : écrire avec macro dans feuille

Re
Je suppose que tu as une

Option explicit !

Elle oblige a declarer les variables

Comme je ne connais pas le type de variable ,le plus simple est de virer l'option explicit

par ailleurs je cherche quel est ce type (je ne suis pas du tout habitué a traiter les VbComponents
 

Pierrot93

XLDnaute Barbatruc
Re : écrire avec macro dans feuille

Bonsoir cmoa, PierreJean:)

ci dessous, liste des constantes, valeur et description de l'objet "VBcomponent", cf aide vba :

vbext_ct_StdModule 1 Module standard
vbext_ct_ClassModule 2 Module de classe
vbext_ct_MSForm 3 Feuille Microsoft
vbext_ct_ActiveXDesigner 11 Concepteur ActiveX
vbext_ct_Document 100 Module document

bonne soirée
@+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : écrire avec macro dans feuille

Re

@ Ctoa

J'ai omis de repondre a

Si j'ai bien compris cette macro créee un module et renvoie le code dans les feuilles?

non cette macro doit se trouver dans le Module1

il ne doit y avoir qu'un module

la macro avec option explicit

Code:
Option Explicit
Sub test()
Dim MonCode4 As String
Dim vbp As Variant
    MonCode4 = MonCode4 & "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & vbCrLf
    MonCode4 = MonCode4 & "If Not Application.Intersect( Target, Range (""P7""))  Is Nothing Then " & vbCrLf
    MonCode4 = MonCode4 & "End If" & vbCrLf
    MonCode4 = MonCode4 & "End Sub"
For Each vbp In ActiveWorkbook.VBProject.VBComponents
If vbp.Name <> "Module1" Then
  vbp.codemodule.insertlines 58, MonCode4
End If
Next vbp
End Sub
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : écrire avec macro dans feuille

Re

peut être comme ceci, pour envoyer ton code dans les modules de toutes les feuilles de ton classeur, enfin si j'ai bien compris la demande initiale :

Code:
Dim ws As Worksheet
For Each ws In Worksheets
    With ThisWorkbook.VBProject.VBComponents(ws.CodeName).CodeModule
      .InsertLines 58, MonCode4
    End With
Next ws

PierreJean:), pas sur que tu ais vu, j'ai mis plus haut les constantes que tu cherchais.
au plaisir de te croiser.

@+
 

bqtr

XLDnaute Accro
Re : écrire avec macro dans feuille

Bonsoir CMoa, pierrejean, Pierrot93

Voilà ce que je comprends : tu souhaites créer une macro événementielle dans chaque feuille de ton classeur par macro.

Test ce code :

Code:
Sub Ajoute_Code()

Dim Ws As Worksheet
Dim VBComp As VBComponent
Dim x As Integer

For Each Ws In ThisWorkbook.Worksheets

Set VBComp = ThisWorkbook.VBProject.VBComponents(Ws.CodeName)
    With VBComp.CodeModule
        x = .CountOfLines
        .InsertLines x + 1, "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
        .InsertLines x + 2, "If Not Application.Intersect( Target, Range (""P7""))  Is Nothing Then "
        .InsertLines x + 3, "End If"
        .InsertLines x + 4, "End Sub"
    End With
Next
End Sub
Testé et approuvé avec Excel 2003 :)

Ne pas oublié de déclarer la référence dans le menu VBA Outils/Références suivante :

Microsoft Visual Basic for Applications Extensibilité 5.3

Bonne soirée

Edit: Trop rapide Pierrot :)

 
Dernière édition:

CMoa

XLDnaute Occasionnel
Re : écrire avec macro dans feuille

bonsoir bqtr;Pierrot93 et pierrejean
Merci pour l'intérêt que vous avez porté à mon souci.
La macro de jeanpierre "oups" pierrejean fonctionne à merveille et je profite de la présence de tout ce "beau monde" pour vous demander comment transférer un userForm ainsi que son code.
@+
 

bqtr

XLDnaute Accro
Re : écrire avec macro dans feuille

Re,

La macro de pierrejean fonctionne effectivement, mais elle ajoute la macro dans tout le Project VBA.

-Dans les feuilles
-dans le Thisworkbook
-dans tout les modules de code sauf le module 1

A+
 

CMoa

XLDnaute Occasionnel
Re : écrire avec macro dans feuille

Re
en effet tu as raison.La macro s'exécute aussi dans le workbook.
Ceci dit je n'arrive pas à faire fonctionner la tienne parce-que je me sert d'un autre module pour la lancer et il ne la reconnait pas.J'ai le message suivant:
"sub non défini..."même en la déclarant public.
pour la lancer j'inscris le nom de la sub dans la macro qui gère tout ça mais ça ne marche pas,alors si j'ai pas le choix,j'effacerai ces lignes dans le workbook.
Par contre afin d'éviter d'importer manuellement un userForm:ya-t-il un moyen de faire ça par macro?
Je sais créer un userform par macro mais pour m'éviter de trouver les bonnes dimensions;inclure la photo etc...,je cherche un moyen d'utiliser celui que j'ai construit.
@+
 

bqtr

XLDnaute Accro
Re : écrire avec macro dans feuille

Re,

Pour l'import/export d'un USF tu peux essayer comme ceci en adaptant le chemin et le nom des fichiers : (il n'y a pas de gestion d'erreur)

Code:
Sub Export_USF()

Application.ScreenUpdating = False

ThisWorkbook.VBProject.VBComponents("UserForm1").Export "Q:\bilans\CopieUSF.frm"
Workbooks.Open "Q:\bilans\EE_FF.xls"
ActiveWorkbook.VBProject.VBComponents.Import "Q:\bilans\CopieUSF.frm"
ActiveWorkbook.Save
ActiveWorkbook.Close
Kill "Q:\bilans\CopieUSF.frm"
Kill "Q:\bilans\CopieUSF.frx"

Application.ScreenUpdating = True

End Sub

La macro exporte le USF dans un fichier (Q:\bilans\CopieUSF.frm), ouvre le classeur où l'importation doit avoir lieu (Q:\bilans\EE_FF.xls), et y importe le USF.
Ensuite la modif est enregistrée et le classeur fermé.
Enfin les fichiers de copies sont supprimés.

Pour la première macro je ne vois pas trop pourquoi elle ne fonctionne pas chez toi.
As-tu essayé de copier le code à l'intérieur de ton autre procédure ?

A+
 

CMoa

XLDnaute Occasionnel
Re : écrire avec macro dans feuille

Bonjour bqtr et le Forum

L'export de Userform marche après quelques adaptations mais ta macro s'arrête et me dit variable non définie par l'utilisateur(quelque chose comme ça).
C'est comme si je l'avait déclarée privée et qu'elle n'est pas vue par mon autre module.
Est-ce dû à "otion explicit"?
Pour résumer,elle fonctionne seule et lorsque je l'insère à mon projet,ça bugue.
Merci pour ton aide et @+
 

Discussions similaires

Réponses
1
Affichages
272

Statistiques des forums

Discussions
314 948
Messages
2 114 648
Membres
112 206
dernier inscrit
salah zabi