Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Copier un code dans ThisWorkbook

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

creolia

XLDnaute Impliqué
bonjour

Je souhaiterais savoir si il etait possible de copier un code dans la racine d'une feuille

en claire j'ai un code evenementiel et j'ai une macro qui me permet de creer une nouvelle feuille je cherche donc une solution pour copier un code via macro dans certaine feuille

es possible ou non merci de votre aide
 
Re : Copier un code dans ThisWorkbook

Svp une petite derniere dans le code que tu ma gentiment donnée peut ton remplacer Feuil1 par le nom réel de l'onglet c'est a dire FORMATION1

Code:
Sub recycle()
ThisWorkbook.VBProject.VBComponents("[COLOR="Red"]Feuil1[/COLOR]").CodeModule.AddFromString _
    ("Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf & _
    "If Application.Intersect(Target, Range(""E5:E65536"")) Is Nothing Then Exit Sub" & vbCrLf & _
    "If Selection.Cells.Count > 1 Then Exit Sub 'si il plus d'une d'une seule cellule sélectionnée, sort de la procédure" & vbCrLf & _
    "If Target.Value = """" Then Exit Sub 'si la cellule est éffacée, sort de la procédure" & vbCrLf & _
    "Sheets(""FORMATION52"").Range(Target.Address).Value = """" 'efface la cellule correspondante de l'onglet FORMATION52" & vbCrLf & _
    "MsgBox ""La Formation initiale à été réinitialisé""" & vbCrLf & "End Sub")
End Sub

merci pour la precision
 
Re : Copier un code dans ThisWorkbook

Re

donc pour plus de précision je demandais ceci car mon but finale etant d'avoir ce code comme ceci

Code:
Private Sub CommandButton1_Click()
Dim i As String
i = R1.Value
x = R2.Value
ThisWorkbook.VBProject.VBComponents("R1.value").CodeModule.AddFromString _
    ("Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf & _
    "If Application.Intersect(Target, Range(""E5:E65536"")) Is Nothing Then Exit Sub" & vbCrLf & _
    "If Selection.Cells.Count > 1 Then Exit Sub 'si il plus d'une d'une seule cellule sélectionnée, sort de la procédure" & vbCrLf & _
    "If Target.Value = """" Then Exit Sub 'si la cellule est éffacée, sort de la procédure" & vbCrLf & _
    "Sheets ""R2.value"".Range(Target.Address).Value = """" 'efface la cellule correspondante de l'onglet FORMATION52" & vbCrLf & _
    "MsgBox ""La Formation initiale à été réinitialisé""" & vbCrLf & "End Sub")
End Sub


sachant que R2 representeras la valeur de la combobox ou iras ce code
et R1 la feuille ou la cellule seras effacer


probleme l'idée me semble bonne mais la mise en oeuvre un peut compliquer je sais j'abuse un peut mais vous pourez me dire si c'est faissable ou pas merci
 

Pièces jointes

Re : Copier un code dans ThisWorkbook

Bonjour je savais pas si il fallais recreer une discution sachant que le code fonctionnais dans sont integraliter et que j'ai essayer de l' adapter à mon projet et je n'arive pas bien .

donc pour plus de précision je souhaiterais avoir ce code comme ceci pour pouvoir choisir la feuille ou j'appliquerais le code ainsi que la feuille ou seras effacer la celulle


Code:
[/
Private Sub CommandButton1_Click()
Dim i As String
i = R1.Value
x = R2.Value
ThisWorkbook.VBProject.VBComponents("[COLOR="Red"]R1.value"[/COLOR]).CodeModule.AddFromString _
    ("Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf & _
    "If Application.Intersect(Target, Range(""E5:E65536"")) Is Nothing Then Exit Sub" & vbCrLf & _
    "If Selection.Cells.Count > 1 Then Exit Sub 'si il plus d'une d'une seule cellule sélectionnée, sort de la procédure" & vbCrLf & _
    "If Target.Value = """" Then Exit Sub 'si la cellule est éffacée, sort de la procédure" & vbCrLf & _
    "Sheets ""[COLOR="red"]R2.value[/COLOR]"".Range(Target.Address).Value = """" 'efface la cellule correspondante de l'onglet FORMATION52" & vbCrLf & _
    "MsgBox ""La Formation initiale à été réinitialisé""" & vbCrLf & "End Sub")
End Sub


CODE]
sachant que R2 representeras la valeur de la combobox ou seras implanté ce code
et R1 la feuille ou la macro agiras.


probleme l'idée me semble bonne mais la mise en oeuvre un peut compliquer je sais j'abuse un peut mais vous pourez me dire si c'est faissable ou pas merci
 

Pièces jointes

Re : Copier un code dans ThisWorkbook

Re 🙂,
probleme l'idée me semble bonne mais la mise en oeuvre un peut compliquer je sais j'abuse un peut mais vous pourez me dire si c'est faissable ou pas merci
C'est pas vraiment le fait d'abuser, c'est plutôt le fait que tu joues avec des choses très complexes alors que, soit dit sans te vexer, le B A BA de la syntaxe ne parait pas être ta tasse de thé 🙄. Fais attention à ne pas t'en mordre les doigts 😛...
1) Pour intégrer la valeur de ton combo dans la string, il faut arrêter la string (fermeture ") et utiliser le & pour concaténer :
Code:
..." & R2.Text & "...
.text est plus conseillé dans ce cas là pour éviter des interprétations.
2) Evite les RowSource, à la place, tu peux mettre
Code:
[COLOR=blue]Private Sub[/COLOR] UserForm_Initialize()
[COLOR=blue]Dim[/COLOR] ws [COLOR=blue]As[/COLOR] Worksheet
[COLOR=blue]For Each[/COLOR] ws [COLOR=blue]In[/COLOR] ThisWorkbook.Worksheets
[COLOR=blue]If[/COLOR] ws.Name <> "Parametre" [COLOR=blue]Then[/COLOR]
R1.AddItem ws.Name
R2.AddItem ws.Name
[COLOR=blue]End If[/COLOR]
[COLOR=blue]Next[/COLOR]
[COLOR=blue]End Sub[/COLOR]
De plus, il faut bloquer les valeurs de tes combos à celles de la liste en utilisant fmStyleDropDownList dans la propriété Style à la place de fmStyleDropDownCombo.
3) Le VBComponent ne fait référence qu'au CodeName, pas au Name de la feuille. Du fait il faut déterminer le CodeName équivalent au Name de ton combo
Code:
[COLOR=blue]Private Sub[/COLOR] CommandButton1_Click()
[COLOR=blue]Dim[/COLOR] ws [COLOR=blue]As[/COLOR] Worksheet, CodeFeuille [COLOR=blue]As String[/COLOR]
[COLOR=blue]For Each[/COLOR] ws [COLOR=blue]In[/COLOR] ThisWorkbook.Worksheets
[COLOR=blue]If[/COLOR] ws.Name = R1.Text [COLOR=blue]Then[/COLOR] CodeFeuille = ws.CodeName
[COLOR=blue]Next[/COLOR]
[COLOR=blue]If[/COLOR] CodeFeuille <> "" [COLOR=blue]Then[/COLOR]
ThisWorkbook.VBProject.VBComponents(CodeFeuille).CodeModule.AddFromString _
    ("Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf & _
    "If Application.Intersect(Target, Range(""E5:E65536"")) Is Nothing Then Exit Sub" & vbCrLf & _
    "If Selection.Cells.Count > 1 Then Exit Sub 'si il plus d'une d'une seule cellule sélectionnée, sort de la procédure" & vbCrLf & _
    "If Target.Value = """" Then Exit Sub 'si la cellule est éffacée, sort de la procédure" & vbCrLf & _
    "Sheets " & R2.Text & ".Range(Target.Address).Value = """" 'efface la cellule correspondante de l'onglet " & R2.Text & vbCrLf & _
    "MsgBox ""La Formation initiale à été réinitialisé""" & vbCrLf & "End Sub")
[COLOR=blue]End If[/COLOR]
Unload Me
[COLOR=blue]End Sub[/COLOR]
Bon courage 😎
 
Re : Copier un code dans ThisWorkbook

Re bonsoir JNP et merci pour ton aide effectivement ta entierement raison et sa me vexe pas tant que la critique est constructive.tu ma bien aider .

il vrais egalement que j'ai pas beaucoup de connaissance dans ce domaine mais je m'efforce de comprendre et grace à des personnes comme toi petit à petit je m'ameliore et la une fois de plus tu m'a bien aider

j'adore excel je passe une bonne partis de mon temps dessus et le fais que j'accroche à sa me fais du bien.

bref tous sa pour remercier à tous le forum du temps que chacun à passer pour m'aider depuis presque 1 ans.

à bientot
 
Re : Copier un code dans ThisWorkbook

Bonjour je revien vers vous pour un probleme dans le code qui me sert à effacer une cellule sous condition.



Code:
Dim ws As Worksheet, CodeFeuille As String
For Each ws In ThisWorkbook.Worksheets
If ws.Name = R1.Text Then CodeFeuille = ws.CodeName
Next
If CodeFeuille <> "" Then
ThisWorkbook.VBProject.VBComponents(CodeFeuille).CodeModule.AddFromString _
    ("Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf & _
    "If Application.Intersect(Target, Range(""E5:E65536"")) Is Nothing Then Exit Sub" & vbCrLf & _
    "If Selection.Cells.Count > 1 Then Exit Sub 'si il plus d'une d'une seule cellule sélectionnée, sort de la procédure" & vbCrLf & _
    "If Target.Value = """" Then Exit Sub 'si la cellule est éffacée, sort de la procédure" & vbCrLf & _
    [COLOR="Red"]"Sheets " & R2.Text [/COLOR]& ".Range(Target.Address).Value = """" 'efface la cellule correspondante de l'onglet " & R2.Text & vbCrLf & _
    "MsgBox ""La Formation initiale à été réinitialisé""" & vbCrLf & "End Sub")
End If



mais j'ai un probleme au niveau ou c'est souligner en rouge je pense que c'est un probleme de syntax

car il me dit

utilisation incorrecte de la propriete

Code:
If Application.Intersect(Target, Range("E5:E65536")) Is Nothing Then Exit Sub
If Selection.Cells.Count > 1 Then Exit Sub 'si il plus d'une d'une seule cellule sélectionnée, sort de la procédure
If Target.Value = "" Then Exit Sub 'si la cellule est éffacée, sort de la procédure
[COLOR="red"]Sheets[/COLOR] FORMATION2.Range(Target.Address).Value = "" 'efface la cellule correspondante de l'onglet FORMATION2
MsgBox "La Formation initiale à été réinitialisé"

si quelqu'un peut m'aider à rectifier la syntax dans la macro sachant que celle qui marche bien est celui ci

Code:
ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule.AddFromString _
    ("Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf & _
    "If Application.Intersect(Target, Range(""E5:E65536"")) Is Nothing Then Exit Sub" & vbCrLf & _
    "If Selection.Cells.Count > 1 Then Exit Sub 'si il plus d'une d'une seule cellule sélectionnée, sort de la procédure" & vbCrLf & _
    "If Target.Value = """" Then Exit Sub 'si la cellule est éffacée, sort de la procédure" & vbCrLf & _
    "Sheets(""FORMATION52"").Range(Target.Address).Value = """" 'efface la cellule correspondante de l'onglet FORMATION52" & vbCrLf & _
    "MsgBox ""La Formation initiale à été réinitialisé""" & vbCrLf & "End Sub")
merci d'avance pour votre aide
 
Re : Copier un code dans ThisWorkbook

Re 🙂,
Désolé, j'ai loupé quelques caractères 😀
Code:
[COLOR=black]"Sheets[COLOR=red](""" & R2.Text & """).[/COLOR]Range[/COLOR]
devrait fonctionner 😉.
A + 😎
 
Re : Copier un code dans ThisWorkbook

Re bonjour JNP lol merci pour ton aide sa fonctionne en revanche il me reste plus q'à trouver une solution pour effacer le code avant de le copier car sinon sa me fais un doublon dans la page

en tous cas merci pour tout
 
Re : Copier un code dans ThisWorkbook

Re 🙂,
Code:
Sub test()
Dim I As Integer
With ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule
For I = 1 To .CountOfLines
.DeleteLines 1
Next I
End With
End Sub
Bon WE 😎
 
Re : Copier un code dans ThisWorkbook

Re JNP je reviens sur ton code qui fonctionne bien j'ai essayer de l'adapté pour qu'à la place de Feuil1 qui me met le nom de la valeur de ma textbox c'est à dire R1.text mais j'y suis pas arrivée si tu pouvais m'expliquer stp merci voila ce que j'ai essayer de faire

Code:
Sub test()
[COLOR="Red"]dim x as long
x = R1.Text[/COLOR]
Dim I As Integer
With ThisWorkbook.VBProject.VBComponents("[COLOR="red"]x[/COLOR]").CodeModule
For I = 1 To .CountOfLines
.DeleteLines 1
Next I
End With
End Sub

merci une fois de plus pour l'aide apporté
 
Re : Copier un code dans ThisWorkbook

RE 🙂,
3) Le VBComponent ne fait référence qu'au CodeName, pas au Name de la feuille. Du fait il faut déterminer le CodeName équivalent au Name de ton combo
Autrement dit, le nom de l'onglet ne fonctionne pas, d'où mes lignes de code pour chercher le CodeName d'après le Name
Code:
Dim ws As Worksheet, CodeFeuille As String
For Each ws In ThisWorkbook.Worksheets
If ws.Name = R1.Text Then CodeFeuille = ws.CodeName
Next
If CodeFeuille <> "" Then
Bonne journée 😎
 
Re : Copier un code dans ThisWorkbook

Re bonjour JNP donc la façon je me suis pris ne pouvais pas foncionner car je m'acharnais à donner le nom de l'onglet

c'est bon à savoir.

en tout cas merci je vais tester tout cela
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
188
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…