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 :

Création de feuilles via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Banque
    Inscrit en
    Septembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Banque

    Informations forums :
    Inscription : Septembre 2019
    Messages : 7
    Par défaut Création de feuilles via VBA
    Bonjour,

    Je me permets de solliciter votre aide car je cherche depuis quelques jours en vain.
    Je vais essayer d’exprimer clairement ma requête :
    J’ai un fichier Excel avec plusieurs onglets dont le 1er onglet qui s’appelle « Projet ».
    Dans cet onglet Projet, en cellule D8, j’ai le nombre d’intervenant au projet.
    Je souhaiterai que, lorsque cette cellule est remplie, une macro se lance pour créer X onglet – X correspondant au nombre renseigné en cellule D8.
    Cet onglet prendrait comme nom « Mandat de gestion » & le nom renseigné de l’interlocuteur. Donc :
    - Pour l’onglet créé 1 : Mandat de gestion Associé 1
    - Pour l’onglet créé 2 : Mandat de gestion Associé 2 etc
    Là où cela se complique pour moi : il peut arriver au départ qu’il n’y ait que 2 interlocuteurs. Mais au fil du temps un ou plusieurs interlocuteur(s) s’ajoute(nt).
    Si le nombre d’interlocuteur passe à 3 au lieu de 2, je souhaiterais qu’un seul nouvel onglet se créé avec le nom « Mandat de gestion Associé 3 » et qu’il n’y ait pas 3 nouveaux onglets.
    De fait, je pense que dans ma macro il faut d’abord vérifier que l’onglet avec le même nom n’existe pas.

    J’avais essayé un début de code mais étant très novice il doit y avoir pas mal d’erreurs (je le mets quand même ci-dessous pour info).
    Je mets le classeur exemple en PJ.

    Pourriez-vous m’apporter votre aide ?

    Merci beaucoup par avance.

    Cordialement,

    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
        If Range("D8") = 2 Then
            For Each Sheet In Worksheets
                    If Sheet.Name = "Mandat de gestion " & Worksheets("Projet").Range("d19") Then
                             End If
                             Else
                             Sheets.Add before:=Sheets("Suite des commentaires")
                                With ActiveSheet
                                 .Name = "Mandat de gestion " & Worksheets("Projet").Range("d19")
                                 End With
                    If Sheet.Name = "Mandat de gestion " & Worksheets("Projet").Range("f19") Then
                             End If
                             Else
                             Sheets.Add before:=Sheets("Suite des commentaires")
                                With ActiveSheet
                                .Name = "Mandat de gestion " & Worksheets("Projet").Range("f19")
                                End With
        Next
        Sheets("Projet").Select
     
        Else
     
     
        If Range("D8") = 3 Then
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Julien, bonjour le forum,

    Peut-être comme ça, code événementiel Change à placer dans le composant Feuil1(Projet).
    Le code réagi au changement dans la cellule D8 :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim IO As Integer 'déclare la variable IO (Index Onglet)
    Dim Max As Integer 'déclare la variable Max (numéro Maximum)
    Dim I As Integer 'déclare la variable I (Incrément)
     
    If Target.Address <> "$D$8" Or Target.Count > 1 Then Exit Sub
    For I = 1 To Sheets.Count 'boucle sur tous les onglets du classeur
        If UBound(Split(Worksheets(I).Name, "_")) > 0 Then 'condition 1 : s'il existe un underscore "_" dans le nom de l'onglet de la boucle
            IO = Split(Worksheets(I).Name, "_")(1) 'définit l'index de l'onglet IO
            If IO > Max Then Max = IO 'si IO est supérieur à Max, Max devient IO
        End If 'fin de la condition 1
    Next I 'prochaon onglet du classeur
    For I = Max + 1 To Range("D8").Value 'boulce de Max + 1 àla valeur indiquée en D8 de l'onglet OP
        Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet vierge en dernière position
        ActiveSheet.Name = "Mandat de gestion Associé_" & I 'renomme l'onglet
    Next I 'prochaine valeur de la boucle
    Me.Activate
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Banque
    Inscrit en
    Septembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Banque

    Informations forums :
    Inscription : Septembre 2019
    Messages : 7
    Par défaut
    Un grand grand merci !! ça fonctionne parfaitement.
    Un dernier point : lorsque les onglets se crééent, le nom qui s'affiche est "Mandat de gestion Associé_" et le numéro.
    Serait-il possible que l'onglet se renomme Mandat de gestion + le nom qui s'affiche en cellule D19 pour le 1er interlocuteur, F19 pour le 2ème, H19 pour le 3ème etc ?

    En tout cas merci beaucoup pour la rapidité et l'efficacité.
    Je vais essayer de comprendre maintenant comment la macro fonctionne.

    Cordialement,

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Pas avec le code proposé car en fonction de ce qu'il y aura d'écrit dans les cellules, le code risque de ne plus fonctionner plus...


Discussions similaires

  1. [XL-2010] Création de lignes via VBA sur un onglet en fonction de données sur un autre onglet
    Par zoeanyah dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/06/2016, 07h21
  2. [XL-2010] Lancer une impression feuille via VBA
    Par a.ouguerzam dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/10/2015, 17h35
  3. [XL-2013] Création de TCD via VBA
    Par Akhekhu dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 04/05/2015, 22h55
  4. [AC-2007] Utiliser une variable comme alias lors de la création de table via Vba
    Par Tipstitou dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/09/2010, 10h29
  5. Création de controles via VBA
    Par galinette dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/10/2007, 18h10

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