Affecter automatiquement une maccro

Résolu/Fermé
LeoTaba - 13 févr. 2017 à 15:27
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 24 févr. 2017 à 08:19
bonjour,
j'ai une maccro qui permet créer une nouvelle feuille automatiquement lorsque je complete la cellule B1 :
------------------------------------------------------------------------------------
Sub Nouveau_Mois()

Application.ScreenUpdating = False

'confirmer sélection feuille / copier

Sheets("Base de données").Select
Cells.Select
Selection.Copy

'créer une nouvelle feuille / coller le type mois base

Sheets.Add after:=ActiveSheet
Cells.Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False

'nommer la feuille

ActiveSheet.Name = Range("B1").Value

'ajouter dans le sommaire

Range("B1").Copy Destination:=Sheets("Sommaire").Range("B1").End(xlDown).Offset(1, 0)

'effacer le'entrée dans mois base de données

Sheets("Base de données").Activate

'retour au sommaire
Sheets("Sommaire").Select

Application.ScreenUpdating = True

End Sub
--------------------------------------

J'aurais aimé que quand cette maccro est executée, et donc qu'une nouvelle feuille est crée, elle soit codée par ca automatiquement (de la meme maniere que si j'avais fait onglet > visualiser le code > coller) :
-------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target _
As Range, Cancel As Boolean)
If Not Intersect(Target, Range("a1")) Is Nothing Then
Call Reset_C
End If
If Not Intersect(Target, Range("b1")) Is Nothing Then
Call Reset_AF
End If
End Sub
----------------------------------


Merci à vous d'avance, LeoTaba.

24 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 févr. 2017 à 17:43
Tu peux dire merci à eriiic que je salue. Avec son code et ton code, on arrive a ce que tu voulais!

http://www.cjoint.com/c/GBxqPMioZiQ
0
Ok bah merci les amis c'est good, enfin, c'est un bon compromis qui permet de garder en sureté le code de la BDD MAIS qui permet quand meme aux prochaines pages crées par le module d'être concernées par la maccro du double-clique. Dommage si mes collègues décident de créer des pages autres qu'avec le module, je les laisse se demerder pour ajouter ces feuilles dans This Workbook.

Merci cs_Le Pivert et eriiic, bonne continuation à vous !
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
24 févr. 2017 à 07:52
C'est pas chinois quand même ce que je dis rassurez moi x) ?

Si

Mais le code d'eriiic fait exactement la même chose que si tu avais le code dans le module de la feuille. Je ne vois pas ce que cela te donne en plus de l'avoir dans la feuille!

Ou alors il y a un truc que tu nous a pas dit: par exemple un exercice a faire!
0
Non mais c'est bon le pivert je m'en contenterai ^^
Si tu pouvais mettre résolu STP, je ne vois pas le bouton o_O
PS: avoir le code seulement dans les feuilles crées évite de lancer la maccro en cas de missclic si on est sur une feuille non concernée
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié par cs_Le Pivert le 24/02/2017 à 08:32
Avec ce code, cela fonctionne sur la 1ère feuille créée ensuite pour les suivantes cela crée les feuilles, mais ajoute le code sur la 1ère feuille créée. Je ne comprends pas!
Fais des essais là-dessus, tu trouveras peut-être la solution. Je continue les recherches. Surveille ton post. Si tu t'inscrivais en tant que membre tu serais averti en cas de réponse.

https://forums.commentcamarche.net/forum/affich-34360824-affecter-automatiquement-une-maccro#21


en même temps que j'écrivais j'ai trouvé le problème. L'écriture du code se faisait sur la dernière feuille alors qu'elle se trouvait en 3ème position. voilà donc le code:

Option Explicit
Sub Nouveau_Mois()
Dim Code$, NextLine&
Application.ScreenUpdating = False
'confirmer sélection feuille / copier
Sheets("Base de données").Select
Cells.Select
Selection.Copy
'créer une nouvelle feuille / coller le type mois base
Sheets.Add After:=ActiveSheet
On Error Resume Next
' Comment ajouter le code.
    Code = "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" & vbCrLf
    Code = Code & "If Not Intersect(Target, Range(""a1"")) Is Nothing Then" & vbCrLf
    Code = Code & "Call Reset_C" & vbCrLf
    Code = Code & "End If" & vbCrLf
   Code = Code & "If Not Intersect(Target, Range(""b1"")) Is Nothing Then" & vbCrLf
    Code = Code & "Call Reset_AF" & vbCrLf
    Code = Code & "End If" & vbCrLf
    Code = Code & "End Sub"
'   Ecriture du code dans le module de la feuille (fs)
With ActiveWorkbook.VBProject.VBComponents(Sheets(3).CodeName).CodeModule 'c'était ici que se trouvait le problème
       NextLine = .CountOfLines + 1
      .InsertLines NextLine, Code
End With
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False

 'nommer la feuille
 
    ActiveSheet.Name = Range("B1").Value
    
'ajouter dans le sommaire

Range("B1").Copy Destination:=Sheets("Sommaire").Range("B1").End(xlDown).Offset(1, 0)

'effacer le'entrée dans mois base

Sheets("Base de données").Activate
Range("B1").ClearContents
Range("C5:an5").ClearContents
Range("C7:an7").ClearContents
Range("C9:an9").ClearContents
Range("C11:an11").ClearContents
Range("C13:an13").ClearContents
Range("C15:an15").ClearContents
Range("C17:an17").ClearContents
Range("C19:an19").ClearContents
Range("C21:an21").ClearContents
Range("C23:an23").ClearContents
Range("C25:an25").ClearContents
Range("C27:an27").ClearContents
Range("C29:an29").ClearContents
Range("C31:an31").ClearContents
Range("C33:an33").ClearContents
Range("C35:an35").ClearContents
Range("C37:an37").ClearContents
Range("C39:an39").ClearContents
Range("C41:an41").ClearContents
Range("C43:an43").ClearContents
Range("C45:an45").ClearContents
Range("C47:an47").ClearContents
Range("C49:an49").ClearContents
Range("C51:An51").ClearContents
Range("C53:An53").ClearContents
Range("C55:An55").ClearContents
Range("C57:An57").ClearContents
Range("C59:An59").ClearContents
Range("C61:An61").ClearContents
Range("C63:An63").ClearContents
Range("C65:An65").ClearContents
Range("C67:An67").ClearContents
Range("C69:an69").ClearContents
Range("C71:an71").ClearContents
Range("C73:an73").ClearContents
Range("C75:an75").ClearContents
Range("C77:An77").ClearContents
Range("C79:An79").ClearContents
Range("C81:An81").ClearContents
Range("C83:An85").ClearContents
Range("C87:An87").ClearContents
Range("C89:An90").ClearContents
Range("C92:An92").ClearContents
Range("C94:An94").ClearContents
Range("C96:AN96").ClearContents
Range("C98:An98").ClearContents
Range("C100:An101").ClearContents
Range("C103:an104").ClearContents
Range("C106:an108").ClearContents
Range("C110:An147").ClearContents
Range("C149:An151").ClearContents
Range("C153:An156").ClearContents
Range("C158:An173").ClearContents
Range("C180:AN184").ClearContents
'retour au sommaire
Sheets("Sommaire").Select
Application.ScreenUpdating = True
End Sub


Il faudra faire un code pour éviter de choisir la même date

@+ Le Pivert
0