Copier une procédure VBA dans une autre feuille

  • Initiateur de la discussion Initiateur de la discussion MJ13
  • Date de début Date de début

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 !

MJ13

XLDnaute Barbatruc
Bonjour à tous,

Est-il possible de copier facilement une procédure VBA dans une autre feuille de type:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
nomf = ActiveCell.Text
ActiveCell.Offset(0, -1).Range("A1").Select
rep = ActiveCell.Text
ActiveCell.Offset(0, 1).Range("A1").Select
Rn = rep & "\" & nomf
ThisWorkbook.FollowHyperlink Rn
End Sub

En fait j'ai le nom du chemin du dossier en Colonne A et le nom du fichier en colonne B. La macro permet d'ouvrir automatiquement le fichier en double cliquant dans la cellule contenant le nom du fichier. Mais comme je crée des classeurs avec des feuilles, j'aimerai que pour chaque feuille, la macro soit inclue dans la feuille.
 
Re : Copier une procédure VBA dans une autre feuille

Bonjour MJ13, bonjour le forum,

Place ton code dans l'événement SheetBeforeDoubleClick de Thisworkbook et tu n'auras même pas à le copier car il sera valables pour tous les onglets du classeur.

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'ton code
End Sub
 
Re : Copier une procédure VBA dans une autre feuille

Bonjour Robert et merci pour ta réponse

Je comprend ta réponse mais comme je crée de nouveauxfichiers, je voudrai que la macro soit inclue dans le nouveau fichier de façon à ce que si queqlqu'un ouvre de son poste le fichier, il puisse ouvrir le fichier automatiquement.
 
Re : Copier une procédure VBA dans une autre feuille

Bonjour Michel, robert

regarde le code ci dessous, copie le code du classeur1 feuil1, vers classeur2 feuil1, un peu tiré par les cheveux mais bon...personnellement je n'ais pas autre chose....

Code:
Sub AjouterCode()
Dim i As Byte
i = Workbooks("classeur1.xls").VBProject.VBComponents("Feuil1").CodeModule.CountOfLines
Workbooks("classeur2.xls").VBProject.VBComponents("Feuil1").CodeModule.AddFromString Workbooks("classeur1.xls").VBProject.VBComponents("Feuil1").CodeModule.Lines(1, i)
End Sub

@+
 
Re : Copier une procédure VBA dans une autre feuille

Bonjour Pierrot et merci aussi à Robert

Et merci beaucoup pour ton code!
J'ai fait un test et ça à l'air de marcher. je vais voir pour l'adapter à mon application.

Bonne fin de journnée. Heureusement qu'il y a des personnes comme toi qui peuvent nous aider avec du code peu intuitif.
 
Re : Copier une procédure VBA dans une autre feuille

Bonjour à tous.​

Voici les résultats de mes tests.
La procédure de Pierrot fonctionne si j'ai un classeur avec le code à copier. J'ai testé en faisant sur 2 feuilles, mais la seconde copie a fait planter Excel.
Du coup, j'ai aussi pris l'idée de Robert dans Thisworbook et la cela à l'air de focntionné et je n'ai qu'une fois le code à copier.​

Voici mon code​
Code:
Sub AjouterCode()
'Stop
Dim iajcode As Byte
'i = Workbooks("classeur1.xls").VBProject.VBComponents("Feuil1").CodeModule.CountOfLines
nomact = "fichier1.xls"
nomact2 = "Fichier2.xls"
iajcode = Workbooks(nomact).VBProject.VBComponents("Thisworkbook").CodeModule.CountOfLines
Workbooks(nomact2).VBProject.VBComponents("Thisworkbook").CodeModule.AddFromString Workbooks(nomact).VBProject.VBComponents("Thisworkbook").CodeModule.Lines(1, iajcode)
End Sub



Merci encore à vous deux (Pierrot et Robert d'où l'expresssion
"Avec Pierrobert les deux sont experts!").​
 
Dernière édition:
Re : Copier une procédure VBA dans une autre feuille

bonjour Mj,pierrot,Robert
le code suivant crée 12 procédures(12 feuilles avec comme nom les 12 mois)

Sub CodeFeuil()
Dim Ws As Worksheet, Cname() As String
Dim Code As String, D As Byte
With ActiveWorkbook

For Each Ws In .Worksheets
If Ws.Name = "Donnees" Or Ws.Name = "CNRO" Or Ws.Name = "pointage ETAM" Then GoTo suite:
ReDim Preserve Cname(D)
Cname(D) = Ws.CodeName
D = D + 1
'End If
suite:
Next Ws
End With

Code = vbLf & "Private Sub Worksheet_BeforeDoubleClick" _
& "(ByVal Target As Range, Cancel As Boolean)" & vbLf
Code = Code & " Dim Modification as Boolean" & vbLf
Code = Code & "If Target.Interior.ColorIndex = 15 Then Exit Sub" & vbLf
Code = Code & " Cancel = True" & vbLf
Code = Code & " If Cells(ActiveCell.Row, 1) <> """" Then" & vbLf
Code = Code & " Modification = True" & vbLf
Code = Code & " UserForm2.TextBox1 = Cells(ActiveCell.Row, 1)" & vbLf
Code = Code & " UserForm2.TextBox2 = ActiveCell.Row" & vbLf
Code = Code & " UserForm2.Show" & vbLf
Code = Code & " End If" & vbLf
Code = Code & "End Sub" & vbLf 'UserForm2.TextBox2 = ActiveCell.Row
On Error Resume Next
With ThisWorkbook
For D = 0 To UBound(Cname)
For Each Ws In .Worksheets
If Ws.CodeName = Cname(D) Then
With .VBProject.VBComponents(Ws.CodeName).CodeModule
.AddFromString Code ' écrit le code de la feuille
End With
Exit For
End If
Next Ws
Next D

End With

End Sub

à bientôt
 
- 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
3
Affichages
256
Réponses
2
Affichages
398
Retour