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 :

Formulaire à remplir et dupliquer sur plusieurs onglets par mois


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2021
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Formulaire à remplir et dupliquer sur plusieurs onglets par mois
    Bonjour à tous !!

    Je me permet de vous déranger pour vous demander votre aide !
    J'ai besoin de créer un formulaire de prestation par client et par mois. En gros, je remplis un formulaire et dès sa création plusieurs onglets s'ouvrent avec un tableau à remplir par mois (un onglet par mois). Un exemple :
    Nom : Capture.PNG
Affichages : 100
Taille : 11,4 Ko

    Je créer la prestation et ensuite plusieurs onglet s'ouvrent à partir du mois de début de contrat (là en Aout) jusqu'à la fin (soit 6 onglets car 6 mois de mission), ça donnerait un truc comme ça :
    Nom : Capture 1.PNG
Affichages : 100
Taille : 15,0 Ko

    Les champs seraient remplis automatiquement sur tous les onglets, il y aurait juste un onglet par mois.

    Je ne sais pas si c'était clair, mais j'espère que vous pourrez m'aider !

    Merci à vous !

  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
    12 767
    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 : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Je vous ai écrit en détail la manière dont je procéderais et j'ai numéroté les endroits où placer votre code ou code d'appel et pour vous aider, j'ai écrit la boucle.

    Travail de préparation
    Dans le classeur où se trouve le code VBA, nous créons deux feuilles
    • La feuille modèle nommée "Template" ou "Modèle" selon notre sensibilité avec comme CodeName shtTemplate que l'on pourrait masquer une fois en production.
    • La feuille formulaire nommée Formulaire et son [I]CodeName/I], shtForm
      Voir illustration ci-dessous

    La feuille Template
    Tous ce que nous mettons dans cette feuille sert, comme son nom l'indique, de modèle aux feuilles qui seront crées

    Dans la première partie
    • Nous écrirons le titre des différents champs, pour l'exemple Entreprise, Nom du contact, Nom du consultant, etc.
    • On réservera des cellules, en jaune dans l'illustration, pour que les champs remplis dans le formulaire soient automatiquement remplis au moment de la création des feuilles et l'on nommera ces cellules à l'aide du gestionnaire des noms en les préfixant, par exemple, pl_ et en choisissant comme portée la feuille Template

    Dans la seconde partie
    Nous créons un tableau structuré avec autant de colonnes que nous en avons besoin
    • en première ligne : les titres
    • en deuxième ligne (la première ligne des données) : Nous entrons dans les cellules des données auxquelles nous appliquons le format adéquat ainsi que la ou les formules nécessaires à l'encodage
    • ensuite, nous supprimons cette ligne afin que ce tableau n'ait plus que la ligne contenant le titre.

    La feuille Formulaire
    Cette feuille est plus facile à mettre en place pour remplir la feuille [Template] que de passer par un UserForm
    Le plus simple pour la créer, c'est de copier la feuille [Template], supprimer le tableau structuré, et la renommer ainsi nous aurons les cellules nommées identiques dans les deux feuilles

    Dès que la procédure de démarrage de la création sera écrite, on associera un bouton à celle-ci

    Illustration des deux feuilles
    Nom : 210730 dvp TimeSheet.png
Affichages : 51
Taille : 29,8 Ko


    Illustration du gestionnaire des noms
    Nous pouvons constater que les noms sont identiques dans les deux feuilles
    Nom : TimeSheet - NameManager.png
Affichages : 43
Taille : 16,9 Ko

    Travail de programmation
    Idéalement on découpera l'application en plusieurs procédures qui feront chacune leur job avec une procédure de démarrage et une procédure qui distribue le job

    Procédure de démarrage
    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
    Sub MainTimeSheetBuild()
      ' Déclaration
      Dim Sd As Date
      Dim Dm As Byte
      '
      With shtForm ' (Feuille formulaire)
        ' Date début de la mission forcée au 1er jour du mois défini dans le formulaire
        Sd = DateSerial(Year(.Range("pl_StartDate").Value), Month(.Range("pl_StartDate").Value), 1)
        ' Durée de la mission
        Dm = .Range("pl_Duration").Value
      End With
      Application.ScreenUpdating = False
      ' Lance la procédure
      TimeSheetBuild Sd, Dm
    End Sub
    Procédure principale
    Personnellement, lorsque je crée un objet basé sur un modèle, je crée un ou plusieurs classeurs basés sur le modèle
    Cette procédure contient la boucle qui part de 1 à x où x représente le nombre de mois que dure la mission

    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
    Sub TimeSheetBuild(StartDate As Date, NumberOfMonth As Byte)
      ' Procédure qui distribue les tâches aux différentes procédures
      ' Arguments
      '   StardDate      Date de début de missions
      '   NumberOfMonth  Nombre de mois
      ' Déclaration
      Dim Wkb As Workbook
      Dim sht_Template As Worksheet
      Dim sht_Form As Worksheet
      Dim Rng As Range
      Dim oList As ListObject
      Dim NewStartDate As Date
      Dim Mo As Byte
      '
      Set sht_Form = shtForm
      Set sht_Template = shtTemplate
      '
      For Mo = 1 To NumberOfMonth
        NewStartDate = DateAdd("m", Mo - 1, StartDate)
        '
        ' (1) >>> ici le code ou l'appel à une procédure générique qui copie la feuille vers un nouveau classeur suivant le modèle
        '
        ' (2) >>> ici le code ou l'appel à une procédure générique qui copie les données de la feuille formulaire vers la feuille copiée 
        ' 
        ' (3) >>> ici le code ou l'appel à une procédure générique qui Insère les dates du mois dans la colonne des dates  
      Next
      ' EndOfProcess
      Set sht_Form = Nothing: Set sht_Template = Nothing: Set Wkb = Nothing: Set Rng = Nothing: Set oList = Nothing
    End Sub
    Les liens de tutoriels sur les sujets traités plus haut
    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

Discussions similaires

  1. Copier coller une feuille excel sur plusieurs onglet par numéro de compte
    Par badr.bader dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/11/2020, 08h08
  2. [XL-97] duplique une macro sur plusieurs onglet d'un mme classeur
    Par fred novice dans le forum Excel
    Réponses: 3
    Dernier message: 24/10/2016, 16h56
  3. Dupliquer une macro sur plusieurs onglets
    Par Mag555 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/08/2011, 00h07
  4. [VBA-E] Impression page paire sur plusieurs onglets
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 17/02/2005, 15h19

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