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 :

Générer en auto. des onglets avec plusieurs noms.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 71
    Par défaut Générer en auto. des onglets avec plusieurs noms.
    Bonjour,

    J'espère que tout vas bien pour vous. Je suis sur le dév d'une application vba et je suis confronté à un problème. Je n'arrive pas à créer en automatique plusieurs onglets. Les onglets portent diffénrents noms que j'ai mis dnas un select Case. Voici mon code.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    Sub Nom_Moteur()
    '
    ' Nom_Moteur Macro
    ' Permet d'attribuer un nom à la colonne afin de nommer le moteur.
     
     
    '
        Range("B1:G1").Select
        ActiveCell.FormulaR1C1 = "EP6CDTX"
        Range("B2").Select
     
    End Sub
     
        Sub ajout_moteur()
         Dim resultat As String
     
     
        resultat = InputBox("Veuillez ajouter un moteur svp", "Titre") 'La variable reçoit la valeur entrée dans l'InputBox
     
         If resultat <> "" Then 'Si la valeur est différente de "" on affiche le résultat
            MsgBox resultat
         End If
     End Sub
     
    Sub générer_onglet()
     
    Dim resultat As String
     
     
    instance = Array("Synthèse 3m", "Synthèse 12m", "Synthèse 24m", "TD 3m EP6CDTX", "TD 12m EP6CDTX", "TD 24m EP6CDTX", "TD 3m EP6CDT", "TD 12m EP6CDT", "TD 24m EP6CDT", "TP 3m EP6CDTX", "TP 12m EP6CDTX", "TP 24m EP6CDTX", "TP 3m EP6CDT", "TP 12m EP6CDT", "TP 24m EP6CDT", "CD 3m EP6CDTX", "CD 12m EP6CDTX", "CD 24m EP6CDTX", "CD 3m EP6CDT", "CD 12m EP6CDT", "CD 24m EP6CDT")
     
    For m = LBound(instance) To UBound(instance)
     
     
    Select Case instance(m)
     
    'SYNTHESE
     
        Case "Synthèse 3m":
        onglet = "Synthèse 3m"
     
        Case "Synthèse 12m":
        onglet = "Synthèse 12m"
     
        Case "Synthèse 24m":
        onglet = "Synthèse 24m"
     
    'TD CDTX
     
         Case "TD 3m EP6CDTX":
        onglet = "TD 3m EP6CDTX"
     
        Case "TD 12m EP6CDTX":
        onglet = "TD 12m EP6CDTX"
     
        Case "TD 24m EP6CDTX":
        onglet = "TD 24m EP6CDTX" '
     
    'TD CDT
     
        Case "TD 3m EP6CDT":
        onglet = "TD 3m EP6CDT" '
     
        Case "TD 12m EP6CDT":
        onglet = "TD 12m EP6CDT" '
     
        Case "TD 24m EP6CDT":
        onglet = "TD 24m EP6CDT" '
     
    'TP CDTX
     
        Case "TP 3m EP6CDTX":
        onglet = "TP 3m EP6CDTX"
     
        Case "TP 12m EP6CDTX":
        onglet = "TP 12m EP6CDTX"
     
        Case "TP 12m EP6CDTX":
        onglet = "TP 12m EP6CDTX"
     
    'TP CDT
     
         Case "TP 3m EP6CDT":
        onglet = "TP 3m EP6CDT"
     
        Case "TP 12m EP6CDT":
        onglet = "TP 12m EP6CDT"
     
        Case "TP 24m EP6CDT":
        onglet = "TP 24m EP6CDT" '
     
     'CD DTX
     
        Case "CD 3m EP6CDTX":
        onglet = "CD 3m EP6CDTX" '
     
        Case "CD 12m EP6CDTX":
        onglet = "CD 12m EP6CDTX" '
     
        Case "CD 24m EP6CDTX":
        onglet = "CD 3m EP6CDTX" '
     
    'CD CDT
     
        Case "CD 3m EP6CDT":
        onglet = "CD 3m EP6CDT" '
     
        Case "CD 3m EP6CDT":
        onglet = "CD 3m EP6CDT" '
     
        Case "CD 3m EP6CDT":
        onglet = "CD 3m EP6CDT" '
     
        Sheets.Add After:=Sheets(Sheets.Count)
    End Select
    Next m
     
    Sheets(onglet).Name = onglet
    End Sub

    Dans ce code il y a :

    Sub générer_onglet() : c'est ici que je souhaite automatiser mes onglets.

    Quelles démarche suivre après cela? j'ai bien mes 21 onglets qui s'instancie, mais sa ne se créé pas.

    Est-il possible de plus en fonction d'une valeur demandé par un inputbox d'atribuer le nom que l'on veux dans chaque 1er ligne de la "feuille 2", la ou il ya marqué TOTO. ( demander le nom dans une boite de dialogue et elle s'ajoute à cette emplacement pour tout mes onglets.)



    Je vous remercie de votre aide.


    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sans avoir regardé en détail toute ta procédure, la ligne 118 de ton code se trouve en dehors de la boucle, il faudrait la déplacer entre les lignes 115 et 116.
    Attention, il y a peut-être d'autres soucis mais celui-là est flagrant.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Quelle est l'utilité de passer par de si nombreux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case "TD 12m EP6CDT":
        onglet = "TD 12m EP6CDT" '
    => Avec ou sans espaces dans le nom de l'onglet?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible :

    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
    Sub Generer_Onglets()
     
    Dim Instance As Variant
    Dim M As Integer
    Dim ShEnCours As Worksheet
    Dim ShTrouve As Boolean
     
        Instance = Array("Synthèse 3m", "Synthèse 12m", "Synthèse 24m", "TD 3m EP6CDTX", "TD 12m EP6CDTX", "TD 24m EP6CDTX", "TD 3m EP6CDT", "TD 12m EP6CDT", "TD 24m EP6CDT", "TP 3m EP6CDTX", "TP 12m EP6CDTX", "TP 24m EP6CDTX", "TP 3m EP6CDT", "TP 12m EP6CDT", "TP 24m EP6CDT", "CD 3m EP6CDTX", "CD 12m EP6CDTX", "CD 24m EP6CDTX", "CD 3m EP6CDT", "CD 12m EP6CDT", "CD 24m EP6CDT")
     
        For M = LBound(Instance) To UBound(Instance)
            ShTrouve = False
            For Each ShEnCours In Sheets
                If ShEnCours.Name = Instance(M) Then ShTrouve = True
            Next ShEnCours
     
            If ShTrouve = False Then
               Set ShEnCours = Sheets.Add(after:=Sheets(Sheets.Count))
               ShEnCours.Name = Instance(M)
               Set ShEnCours = Nothing
            End If
     
        Next M
     
    End Sub
    Cordialement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 71
    Par défaut
    Je vous remercie tous pour votre aide.

    Philippe Tulliez : je te remercie de cette remarque.

    vinc_bilb: c'est en terme de lisibilité, je peux séparer par un uderscore, c'est mieux que les espaces?


    Eric KERGRESSE: Merci !! cela fonctionne à merveille et c'est beaucoup moins compliqué.

    Si je souhaite poser une autre question je doit réouvrir une discussion?


    Je vous remercie encore !!!


    Cordialement

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour obtenir une valeur booléenne, il n'y a aucun intérêt de passer par une condition. La comparaison logique est suffisante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shTrouve = ShEnCours.Name = Instance(M)
    de plus, ne faut-il pas créer immédiatement la feuille plutôt que de continuer la boucle ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Générer des PDF avec plusieurs calques
    Par Amidal dans le forum iReport
    Réponses: 1
    Dernier message: 21/03/2013, 11h22
  2. Réponses: 1
    Dernier message: 20/11/2007, 00h48
  3. Réponses: 9
    Dernier message: 21/06/2007, 17h02
  4. Réponses: 2
    Dernier message: 07/12/2006, 22h52
  5. [VB.Net] Faire des onglets avec Webmatrix
    Par ellyne dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/01/2006, 13h03

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