IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copier des macros vers un nouvel onglet


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut Copier des macros vers un nouvel onglet
    Bonjour,

    J'ai une macro qui crée un nouvel onglet, je souhaiterai une fois que l'onglet est crée y affecter des macro du type private_sub.

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut
    Apres quelques recherche j'ai trouvé ce code proposé par SilkyRoad qui pourrait correspondre à ce que j'attend:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Sub creationModule()
        'Nécéssite d'activer la référence
        '"Visual basic For Application Extensibility 5.3"
        '
        Dim Wb As Workbook
        Dim VBComp As VBComponent
        Dim X As Integer
     
        'Définit le classeur cible
        Set Wb = Workbooks("Classeur1.xls")
     
        'Ajoute un module standard dans le classeur
        Set VBComp = Wb.VBProject.VBComponents.Add(1)
        'Renomme le module
        VBComp.Name = "NouveauModule"
     
        'Ajoute une macro dans le module
        With VBComp.CodeModule
            X = .CountOfLines
            .InsertLines X + 1, "Sub laMacro()"
            .InsertLines X + 2, "Range(""A1"").Value = ""Coucou"""
            .InsertLines X + 3, "End Sub"
        End With
    End Sub
    Par contre dans ce code on rajoute un module de classe, ce que je souhaiterai c'est créer une nouvelle feuille est y ajouter le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 Then
        Select Case MsgBox("Mettre à jour la date et l'heure", vbOKCancel)
            Case vbOK
                Cells(Target.Row, 1) = Date
                Cells(Target.Row, 1).NumberFormat = "dd/mm/yyyy"
                Cells(Target.Row, 2) = Time
                Cells(Target.Row, 2).NumberFormat = "hh:mm"
        End Select
    End If
    End Sub
    Tout ceci est t'il possible? Par avance merci.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut zeralium et le forum
    Juste une proposition : pourquoi ne pas utiliser les macros automatiques WorkBook ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 Then
        Select Case MsgBox("Mettre à jour la date et l'heure", vbOKCancel)
            Case vbOK
                Cells(Target.Row, 1) = Date
                Cells(Target.Row, 1).NumberFormat = "dd/mm/yyyy"
                Cells(Target.Row, 2) = Time
                Cells(Target.Row, 2).NumberFormat = "hh:mm"
        End Select
    End If
    End Sub
    Cette macro qui est sur chaque module de classe pourrait être remplacée par une unique sur le module ThisWorkBook ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Cancel=true
    If Target.Column = 1 Then
        Select Case MsgBox("Mettre à jour la date et l'heure", vbOKCancel)
            Case vbOK
                Cells(Target.Row, 1) = Date
                Cells(Target.Row, 1).NumberFormat = "dd/mm/yyyy"
                Cells(Target.Row, 2) = Time
                Cells(Target.Row, 2).NumberFormat = "hh:mm"
        End Select
    End Sub
    Il suffirait d'exclure les feuilles non concernée (avec un test en début). Toute nouvelle feuille de ce classeur serait automatiquement concernée, sans s'embêter a une création de code par du code.

    Cancel = True Permet de ne pas avoir l'affichage du menu contextuel
    A+

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut
    Merci Gorfael pour cette remarque, en faisant de cette maniere cela simplifie grandement les choses.

    Merci encore.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/10/2012, 19h59
  2. Importation des données vers une nouvelle BD
    Par Msysteme dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/12/2009, 14h15
  3. Copier des plages vers Word
    Par ilcocodrillo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/06/2007, 08h44
  4. VBA EXCEL - Copier des ligne vers un autre calseur.
    Par patine31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/03/2007, 12h46
  5. [VBA-Excel]Copier des cellules vers un autre classeur
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2006, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo