Dupliquer feuille via VBA
Bonjour tout le monde,
Je suis nouveau sur le forum et totalement novice en langage VBA. Désolé d'avance pour les questions qui pourront vous sembler bêtes.
Je suis entrain de travailler sur un fichier et je bloque sur plusieurs points. Voici le premier (les suivants prochainement
J'ai une feuille "Saisie". En colonne "A" je renseigne une date au format jj/mm/aaaa.
J'ai une autre feuille "Bilan modèle".
--> Je souhaite dupliquer automatiquement cette feuille en la renommant "bilan du xxxx". xxxx étant la date au format texte (20 juin 2022) inscrite au format jj/mm/aaaa dans la cellule "A2" de ma feuille "Saisie".
Ci dessous début de code fait avec l'enregistreur de Macro. Je pense que c'est au niveau de la dernière ligne qu'il faut modifier le code.
Sub duplic_modèle()
Sheets("Bilan modèle").Select
Sheets("Bilan modèle").Copy Before:=Sheets(4)
Sheets("Bilan modèle (2)").Select
Sheets("Bilan modèle (2)").Name = "Bilan du xxxx"
End Sub
Merci d'avance pour votre aide :-)
Bonjour,
Un premier commentaire global avant de parler réellement du problème. Pourquoi faire une feuille par jour ? En général ce genre de structure est aussi lourd qu'inutile (voire contre productif)...
Maintenant :
Sub duplic_modèle()
Sheets("Bilan modèle").Copy Before:=Sheets(4)
ActiveSheet.Name = "Bilan du " & Format(Sheets("Saisie").Range("A2"), "dd mmmm yyyy")
End SubQuelques commentaires :
- Les instruction de type Select sont inutiles, VBA n'a pas besoin de "sélectionner" un élément pour travailler dessus
- Par défaut une feuille nouvellement créée devient la feuille active (d'où l'utilisation d'ActiveSheet ici)
- L'opérateur & permet de concaténer du texte
- Format() équivaut à la fonction TEXTE(), et permet la conversion d'un nombre en texte au format désiré (différent du format de cellule, qui ne joue que sur l'apparence visuel du nombre)
Bonjour Pedro22
Merci beaucoup pour ce retour extrêmement rapide et qui fonctionne
En fait n'étant pas du tout familiarisé avec les macros, je bidouille pour arriver à un résultat. L'objectif étant d'éditer de façon automatique un compte rendu (avec mise en page) pour chaque date de ma feuille saisie.
Je pense effectivement que j'alourdi grandement les opérations.
Mon fichier comporte en réalité 3 feuilles :
- Saisie = mon "formulaire de saisie"
- Bilan modèle = feuille avec de multiples TCD en lien avec ma feuille saisie
- Compte rendu modèle = feuille mise en forme pour impression du compte rendu qui sera imprimée. En fait c'est une page sur laquelle j'ai fait une mise en forme et qui se rempli automatiquement avec un copier/coller dynamique des TCD de la feuille bilan
- Saisie saison complète = feuille de copie de toutes les saisies de l'année.
Ce que je comptais faire pour arriver à mes fins mais avec beaucoup de manip :
- dupliquer ma feuille bilan et la nommer "bilan du xxxx" - Objectif conserver mes données bilan de la date en question
- dupliquer ma feuille Compte rendu et la renommer "CR du xxxx" - Objectif conserver le CR de la date en question
- Sélectionner toutes les lignes de ma feuille Saisie puis les coller dans la feuille "Saisie saison complète" au niveau de la première ligne vide. L'objectif étant d'avoir en fin de saison une archive de toutes les données saisies.
- Supprimer toute les ligne de la feuille "saisie". L'objectif étant d'avoir de nouveau le formulaire vierge pour la saisie de la date suivante.
Je pense effectivement qu'il y a une solution plus simple.
Je pourrais déjà alléger la procédure en ajoutant un filtre sur les dates de la feuille "Saisie". Cela m'éviterais de devoir créer une copie à la fin et de supprimer les lignes du formulaire. Il faut par contre qu'il soit possible de ne prendre en compte que les valeurs affichées dans la feuille Saisie pour mes tableaux croisés dynamiques de la feuille bilan...
Si vous avez qqchose de plus simple sans perdre trop de temps dessus, je suis preneur ;-)
Bonne journée!
En principe, on évite de disséminer des données dans plusieurs classeurs, on préfère une base de données unique avec tous les champs utiles + un champs contenant la date de la donnée. Cette structure permet éventuellement de recréer une fiche au besoin pour une date donnée (une extraction de la base de données globale pour impression par exemple).
Merci de joindre un classeur exemple avec des données anonymisées s'il faut illustrer ça.