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 :

Ecrire dans le code d'une feuille par macro


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut Ecrire dans le code d'une feuille par macro
    Salut tout le monde,

    Je reviens à la charge (pour une dernière question j'espère...).

    J'ai quasiment bouclé ma macro mais il me reste un dernier truc à gérer.
    En fait ma macro, suivant le choix de l'utilisateur, va créer X feuilles dont les données vont ensuite être exposées en tableaux et graphique. J'ai une macro qui doit se trouver dans le code de chaque feuille pour que quand je clique dans la colonne 20 ça change l'état de la colonne 21 en OUI ou NON.
    Or vu que le fichier excel ne démarre qu'avec la feuil1 vierge et que tout le reste est crée ensuite par la macro il me faut une macro qui va venir écrire le code dans les feuilles 1à x....

    J'ai essayé ça mais bizaremment ça ne marche pas, j'ai parcouru pas mal de forum sans succès...si quelqu'un pouvait m'aider là dessus ça me sauverait bien.

    Exemple de ce que j'ai essayé :

    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
    26
    27
    Sub InsertionMacroFeuilles()
    Dim X As Integer
    Dim a As Integer
    Dim N As String
    Dim O As String
     
    N = "NON"
    O = "OUI"
     
    For a = 1 To Compteur
     
    With ActiveWorkbook.VBProject.VBComponents("Feuil" & a & "").CodeModule
        X = .CountOfLines
        .InsertLines X + 1, "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
        .InsertLines X + 2, "If Target.Column <> 20 Then Exit Sub"
        .InsertLines X + 3, "Select Case Target.Offset(0, 1)"
        .InsertLines X + 4, "Case True"
        .InsertLines X + 5, "Target.Offset(0, 1) = N"
        .InsertLines X + 6, "Case False"
        .InsertLines X + 7, "Target.Offset(0, 1) = O"
        .InsertLines X + 8, "Case Else"
        .InsertLines X + 9, "Target.Offset(0, 1) = N"
        .InsertLines X + 10, "End Select"
        .InsertLines X + 11, "Target.Offset(0, 1).Select"
        .InsertLines X + 12, "End Sub"
    End With
    End Sub

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    A priori cela doit fonctionner sous reserve d'affecter ta variable Compteur avant de t'en servir et de ne pas oublier le Next de la boucle For.

    Et le & "" apres "Feuil" & a est inutile.

    ++
    Minick

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello,
    Déjà plusieurs choses : Si tu ne charges pas ton compteur et que tu mets "For a = 1 To Compteur" c'est comme si tu mettais for a = 1 to zéro... et "a pas de feuil0..."
    Ensuite, quand tu concatènes un string et une variable numérique il est inutile d'ajouter des guillemets (& convertit automatiquement la variable en string)
    Une autre chose : quand tu ajoutes une feuille dans ton classeur par ActiveWorkbook.Sheets.Add, son nom est Activesheet.name. Utilise-le dans ta procédure, tu élimineras ainsi tout risque d'erreur.

    Une solution pour ne plus avoir à écrire une macro par macro sur chaque feuille créée :
    Consiste à écrire le code de ta macro sur une feuille du classeur actif puis à dupliquer la feuille pour la placer là où tu veux qu'elle soit. Une copie de feuille duplique également les macros qu'elle contient.
    Exemple de code :
    où Thisworkbook est le classeur contenant la feuil1 qui contient ta macro Private Sub Worksheet_SelectionChange(ByVal Target As Range),
    où ActiveWorkbook est le nouveau classeur (créé)
    nouveau classeur où seront dupliquées autant de feuilles que tu le souhaites.

    Tu places ce code dans un module standard d'un classeur dont feuil1 (qui est la feuille recopiée) contient ta fameuse macro Worksheet_SelectionChange telle qu'elle doit être pour être exécutable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
    Dim compteur As Byte, i As Byte
        compteur = 90
        Workbooks.Add
        For i = 1 To compteur
            ThisWorkbook.Sheets("Feuil1").Copy After:=Sheets(ActiveWorkbook.Worksheets.Count)
        Next
    End Sub
    Bonne journée

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Ca y'est, j'ai trouvé ma solution, je vais en faire profiter les éventuels interessés en ésperant que cela puisse aider...

    En fait ma macro pour inscrire le code est donc devenu ceci :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub EcrireCode()
     
    ' Ce code permet de recopier la macro Private Sub Worksheet_SelectionChange dans les feuilles bateaux
    ' c'est elle qui permet de faire fonctionner le principe de click dans la colonne 20 qui donne l'attribut
    ' VRAI ou FAUX dans la colonne 21
     
    Dim i, LeCode(1 To 15)
    Dim NomClasseur As String, NomFeuil As String
    Dim Wb As Workbook
        NomClasseur = ActiveWorkbook.Name
        LeCode(1) = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
        LeCode(2) = "   NbreLignes =3+ Application.CountA(Range(""E1:E65536""))"
        LeCode(3) = "Non = ""NON"
        LeCode(4) = "Oui = ""OUI"
        LeCode(5) = "   If Intersect(Target, Range(""T5:T"" & NbreLignes)) Is Nothing Then Exit Sub"
        LeCode(6) = "   Select Case Target.Offset(0, 1)"
        LeCode(7) = "       Case Is = Oui"
        LeCode(8) = "           Target.Offset(0, 1) = ""NON"
        LeCode(9) = "       Case Is = Non"
        LeCode(10) = "           Target.Offset(0, 1) = ""OUI"
        LeCode(11) = "       Case Else"
        LeCode(12) = "          Target.Offset(0, 1) = ""OUI"
        LeCode(13) = "  End Select"
        LeCode(14) = "Target.Offset(0, 1).Select"
        LeCode(15) = "End sub"
        Set Wb = Workbooks(NomClasseur)
     
           For X = 2 To Compteur + 1
     
            For i = 1 To 15
                Wb.VBProject.VBComponents("Feuil" & X).CodeModule.InsertLines i, LeCode(i)
            Next i
     
          Next X
    End Sub



    Mais ce qui m'empéchait de la faire marcher était en fait une option de sécurité :

    Dans Excel -> Outils -> Macro -> Sécurité... Onglet Editeurs approuvés, il faut cocher Faire confiance au projet Virtual Basic

    Voila les amis merci pour l'aide précedente, en éspèrant que ça aide...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/04/2014, 14h16
  2. [EG] Ecrire dans les cellules d'une feuille Excel depuis SAS
    Par MDsas dans le forum Outils BI
    Réponses: 12
    Dernier message: 15/12/2011, 18h35
  3. Ecrire dans le code source d'une feuille via une macro?
    Par mazuno dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/07/2010, 15h48
  4. Amélioration du code de l'envoi d'une feuille par mail via LotusNotes
    Par alex830001 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 03/11/2008, 15h39
  5. Ajouter du code dans le code d'une feuille
    Par srame dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/04/2007, 12h05

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