Maccro auto
Bonjour à tous,
voila 6 semaines que je charbonne un classeur excel et 3x que j'écris ce message.
Alors voila, je voudrais rajouter ce code A (permettant de lancer une autre maccro(pas important ici) quand on double clique en A1) :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
Call maccro <-- (je ne suis pas sûr que ce soit ca qu'il faille écrire, corrigez moi si c'est faux)
End If
End SubLe problème c'est que ce code A, je ne veux pas le mettre sur une feuille en particulier.
J'ai une autre maccro qui me permet d'automatiquement créer de nouvelles feuilles Y (Y1, Y2, etc...) à partir d'une feuille X (toujours la même feuille X).
Ce code B la voici (biensur une maccro est affectée à la feuille X pour lancer ce code B mais ca non plus c'est pas important) :
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
Sheets("Base de données").Activate
Range("B1").ClearContents
Range("C5:an5").ClearContents
Range("C7:an7").ClearContents
'retour au sommaire
Sheets("Sommaire").Select
Application.ScreenUpdating = True
End SubMa question est donc : comment faire pour que quand le code B ci dessus est exécutée, la nouvelle feuille Y créée soit AUTOMATIQUEMENT codée par le code A dont j'ai parlé tout au début (pour ne pas avoir a rajouter le code A manuellement a chaque fois que je crée une feuille Y) ?
Parce que j'ai éssayé de mettre ce code A partout dans le code B et rien n'y fait ca ne veut pas.
Si possible, essayez de faire un truc propre (je sais vous etes bénévoles) parce que je pige pas bcp en codage et je risque de sacrément vous emer****
Merci beaucoup en tout cas, Maccromatique.
Up svp je suis sûr que ça ne vous prendra qu'une seconde.
Bonjour,
C'est un peu migraineux ton truc :
Tu devrais joindre ton fichier sinon tu as de fortes chance de ne pas avoir de réponse (ou avoir une réponse aussi foireuse que la question !)
Nota : Les données n'ont pas d'importance : Tu peux les supprimer, mais il faut laisser tous les onglets et leurs macros.
A+
Voila :
désolé d'avoir été aussi long j'avais finit ma journée.
Cdlmt, Maccromatique.
bonjour,
Ton fichier en retour. (a vérifier...)
Il faut alléger un peu sur le modèle de mes corrections sinon tu risques de ne pas avoir beaucoup de réponses à tes questions !
A+
Alors, déjà merci d'avoir répondu.
Par contre y a une couille parce que le code qui se copie auto dans la feuille crée est :
Private Sub Worksheet_Change(ByVal Target As Range)
'lancement de la création de la feuille (si B1 contient une valeur)
If Target.Address = "$B$1" Then
If Range("B1").Value <> "" Then
Call Nouveau_Mois
End If
End If
End Subalors que le code qu'il me faut est
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("c1")) Is Nothing Then
Call Reset_C
End If
End SubTu arriverais a modif ca ? Parce que moi je patauges complet
Merci bien, Maccromatique
End Sub
Bonjour,
Le code copié est celui qui est dans la feuille donc si tu veux qu'une macro se copie il suffit de la mettre dans la feuille d'origine.
A+
Je comprends pas.
Y a tellement de feuilles codables.
Tu peux me dire si tu parle de Base de données, Sommaire, ThisWorkbook, Module créer_mois, ou module colonnes ?
Parce que la feuille d'origine (la feuille a copier) est la base de données, or elle est codée parle début de l'enchainement de maccro, :
Private Sub Worksheet_Change(ByVal Target As Range)
'lancement de la création de la feuille (si B1 contient une valeur)
If Target.Address = "$B$1" Then
If Range("B1").Value <> "" Then
Call Nouveau_Mois
End If
End If
End Sublancant le module créer mois (que j'ai apellé Sub Nouveau_Mois) pour créer une nouvelle feuille
Sub Nouveau_Mois()
Dim mem$
mem = Sheets("Base de données").Range("B1").Text
Sheets("Base de données").Range("B1").ClearContents
Application.ScreenUpdating = False
'créer une nouvelle feuille / coller le type mois base
Sheets("Base de données").Copy After:=ActiveSheet
'nommer la feuille
ActiveSheet.Name = mem
'effacer les entrées dans le mois créé
For i = 5 To 89 Step 2
Range(Cells(i, 3), Cells(i, 40)).ClearContents
Next
[C84:AN84,C90:AN90,C92:AN92,C94:AN94,C96:AN96].ClearContents
[C98:AN98,C100:AN101,C103:aN104,C106:aN108,C110:AN147].ClearContents
[C149:AN151, C153:AN156,C158:AN184,C180:AN156].ClearContents
'retour au sommaire
Sheets("Sommaire").Select
'ajouter dans le sommaire
Range("B1").End(xlDown).Offset(1, 0) = mem
Application.ScreenUpdating = True
End Subdonc le code que tu m'as donné copie le code permettant de créer une nouvelle feuille, alors que ce qu'il me faut c'est créer une feuille avec comme code :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
Call Reset_C
End If
End Sub
End SubVous comprenez ? J'ai l'impression d'être clair mais peut etre pas du tout.
A vous lire, Maccromatique
Je pense que la façon la plus simple d'expliquer mon probleme c'est :
Quand je lance la maccro inscrite dans BASE DE DOINNEES
le module créer_mois se lance
Copie toutes les cellules de la base de données dans une nouvelle feuille, lui donne un nom, l'ajoute dans le sommaire, clean certaines cellules.
Ce qu'il me faudrait c'est que dans créer_mois, des lignes de codes insèrent dans les nouvelles feuilles créées le code :
(autrement dit, quand la nouvelle feuille est créée, si je fais "Visualiser le code" sur l'onglet je voudrais qu'il y ait) :
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 SubMAIS (je le rappelle) ce n'est pas possible de mettre ce code dans la base de données et simplement copier/coller la base de données PARCE QUE elle possède elle même un code qui lui est propre et en devant pas se retrouver sur les autres feuilles crées (le code de lancement du module créer_mois)
Merci d'avance, Maccromatique.
Euh... On parle de quoi, là ?
De la feuille "Base de Donnée" Non ?
La Private Sub Worksheet_Change(ByVal Target As Range) qui s'est copiée, à ton avis elle est sortie d'où ?
Quand à cette macro, elle à rien à faire dans un module "Standart" (Module1...)
Les "Private Sub Worksheet_QuelqueChose" doivent TOUJOURS toutes être dans le module de la feuille concernée et il n'y a rien à bricoler de ce coté là surtout quand on ne maîtrise pas. Les retouches doivent être faites "sur mesure" par un connaisseur (pas pécho sur le net) et bricolouillées) et n'ont AUCUNE raison de se balader ailleurs.
Enfin, les macros qui pondent des macros que tu ne maitrises pas, il faut oublier.
C'est pas DAESH ici : On ne met pas de kalach... dans les mains des gamins (même avec des balles à blanc !)
A+
Je reprend le truc, parce que j'ai essayé de te faire une synthèse, et puis je me suis rendu compte qu'il y avait plusieurs macros DoubleClick :
Ça c'est juste pas possible, il ne peut y en avoir qu'une -et une seule- dans la feuille considérée.
Donc il va falloir remettre un peu d'ordre dans tes idées...
Celle ci :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
Call Reset_C
End If
End SubTu peux la mettre dans la feuille "Base de Donnée" d'ailleurs cette feuille tu peux la renommer parce qu'elle n'a rien à voir avec une Base de Donnée, je l'appellerai "Model"
La deuxième Sub Worksheet_BeforeDoubleClick tu peux la supprimer elle ne sert à rien...
Après ...c'est le bordel ! il n'y a rien qui marche, j'ai donc corrigé modifié... Et il faudra attendre un peu car je dois sortir.
J'essaierai de mettre ça d'aplomb dès mon retour (dans un moment)...
Bon... Je ne sais pas si ça va te servir mais j'ai fait comme je le sentais.
Et comme je le sentais pas bien
J'ai juste conservé la Feuille "Base de donnée" que j'ai renommée "Model" puis je l'ai masquée car elle ne sert plus à rien. (sauf de modèle pour les autres feuilles.)
J'ai un peu restructuré ta feuille "Sommaire"... (parce que je ne voyais pas l'intérêt de faire la différence entre double clic et simple clic)
Et les macros je les ai mis dans ThisWorkbook comme ça, ça évite de multiplier les macros inutiles : Pas besoin d'une grande punition pour vider la feuille puisque le "Model" reste toujours vide...
A+
J'ai pas eu le temps de consulter vos réponses (travail travail) mais sachez que pour palier à mon problème bah j'ai fais un compromis :
vu que les prochaines feuilles crées le seront uniquement par la maccro, bah dans This Workbook j'ai mis ce code et ai isolé les feuilles non concernées :
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Const feuillesNon As String = ",Sommaire,Base de données," ' liste des feuilles non concernées
If InStr(feuillesNon, "," & Sh.Name & ",") = 0 Then
If Not Intersect(Target, Range("c1")) Is Nothing Then
Call Reset_C: Cancel = True
End If
If Not Intersect(Target, Range("AF1")) Is Nothing Then
Call Reset_AF: Cancel = True
End If
If Not Intersect(Target, Range("AG1")) Is Nothing Then
Call Reset_AG: Cancel = True
End If
If Not Intersect(Target, Range("AH1")) Is Nothing Then
Call Reset_AH: Cancel = True
End If
If Not Intersect(Target, Range("AI1")) Is Nothing Then
Call Reset_AI: Cancel = True
End If
If Not Intersect(Target, Range("AJ1")) Is Nothing Then
Call Reset_AJ: Cancel = True
End If
End If
End SubMerci de ton aide en tout cas, ca fait plaisir de voir des gens s'impliquer comme ca dans les problèmes des autres. Je t'aurais bien mis un pouce bleu si c'était possible.
Cdlmt, Maccromatique