XL 2019 Copier et renommer une feuille masquée (avec génération de code)

mautrait

XLDnaute Nouveau
Bonjour à tous,

Je viens solliciter un peu d'aide concernant une automatisation de fichier Excel. Malheureusement je ne maitrise pas du tout VBA et je ne sais qu'utiliser l'enregistreur de macro "basique", qui me semble inadapté pour atteindre mon objectif :

Je souhaite générer un nouvelle feuille dans mon classeur à partir d'une fiche modèle qui serait masquée.
Mon soucis est que cette feuille doit être renommée automatiquement avec un code (n° de dossier) qui est disponible sur ma feuille de synthèse (dans un tableau) et qui est lui même généré de manière automatique selon certains critères du tableau à mesure que ceux-ci seront saisis.
Ainsi, dès lors j'ajouterai des lignes à mon tableau dans ma feuille de synthèse, de nouveaux codes seront générés. Chacun de ces codes est unique et doit avoir une "fiche" dans laquelle on trouveras d'avantages de détail. --> c'est la création de cette fameuse fiche que j'ai besoin d'automatiser.

Pour essayer de résumer, j'ai besoin que la macro fonctionne comme ceci :

Etape 1 - Lire/récupérer le dernier numéro créé dans le tableau de la feuille de synthèse (qui, en principe, n'a donc pas de fiche existante)
Etape 2 - créer une nouvelle fiche via un modèle masqué
Etape 3 - renommer cette feuille avec le numéro récupéré dans l'étape 1
Etape 4 - que ce numéro apparaisse également sur la nouvelle fiche quelque part sur la feuille (cellule A1 par exemple)

Voilà je ne sais pas si c'est quelques chose de complexe à réaliser… en tout cas inaccessible avec mon niveau actuel.
Un grand merci d'avance si quelqu'un à une piste !
bonne journée.
 
Solution
Bonjour Mautrait,
Sans fichier test, ce n'est pas simple d'extrapoler votre besoin; Alors en PJ un essai en aveugle.
J'y suis allé step by step. On peut optimiser mais là, cela permet de comprendre le cheminement qui vous permettra de l'adapter à votre fichier.
VB:
Sub Duplique()
On Error GoTo Fin
Application.ScreenUpdating = False                          ' Figeage écran
DerLig = Sheets("Synthèse").Range("B65500").End(xlUp).Row   ' calcul de la dernière ligne de la liste
Nom = Cells(DerLig, "B")                                    ' Extraction du nom
For Each Sh In Worksheets                                   ' Pour toutes les feuilles
    If Sh.Name = Nom Then                                   ' Si une feuille porte déjà ce nom...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mautrait,
Sans fichier test, ce n'est pas simple d'extrapoler votre besoin; Alors en PJ un essai en aveugle.
J'y suis allé step by step. On peut optimiser mais là, cela permet de comprendre le cheminement qui vous permettra de l'adapter à votre fichier.
VB:
Sub Duplique()
On Error GoTo Fin
Application.ScreenUpdating = False                          ' Figeage écran
DerLig = Sheets("Synthèse").Range("B65500").End(xlUp).Row   ' calcul de la dernière ligne de la liste
Nom = Cells(DerLig, "B")                                    ' Extraction du nom
For Each Sh In Worksheets                                   ' Pour toutes les feuilles
    If Sh.Name = Nom Then                                   ' Si une feuille porte déjà ce nom
        MsgBox "Une porte porte déjà le nom de : " & Nom    ' Emission message
        Exit Sub                                            ' Sortie macro
    End If
Next Sh
Worksheets("Modèle").Visible = True                         ' On rend visible la feuille Modèle
Worksheets("Modèle").Select                                 ' On la sélectionne
Worksheets("Modèle").Copy After:=Sheets(Sheets.Count)       ' On la duplique à la fin
ActiveSheet.Name = Nom                                      ' On la renomme
[A1] = Nom                                                  ' On met ce nom en A1
Worksheets("Modèle").Visible = False                        ' On masque la feuille Modèle
Worksheets("Synthèse").Select                               ' On revient à la feuille Synthèse
Fin:
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    24.6 KB · Affichages: 14

mautrait

XLDnaute Nouveau
Rebonjour !

Je ne sais pas si vous aurez l'occasion de repasser par ce poste Sylvanu, mais si tel est le cas j'aimerai apporter une petite évolution à la macro :

Serait-il possible que la fiche qui doit être générée automatiquement soit déterminée par la sélection d'une cellule dans mon tableau de synthèse ?

Je m'explique, actuellement avec votre programmation la fiche qui est générée correspond au dernier code de la liste du tableau de synthèse. Cela peut poser problème si j'ai besoin de revenir en arrière ou si je créé plusieurs codes à la suite. Idéalement il faudrait donc que la fiche qui doit être générée soit déterminée par la sélection d'un code du tableau...Je ne sais pas si je suis très clair.

Dans votre fichier exemple, le dernier code est le H008. Admettons que pour le précédent (le G007) la fiche n'ait pas été créée par oubli. Je me retrouve donc bloqué puisque la macro générera toujours le dernier code de la liste… Serait-il donc possible de trouver une astuce afin de générer une fiche pour un code de la liste qui ne serait pas en dernière position ?

Evidemment la macro actuelle est plus que suffisante, il s'agit vraiment la d'un peu plus de confort ! merci d'avance
 

Discussions similaires

Réponses
4
Affichages
168