Dupliquer un onglet puis modifier valeurs dans le nouvel onglet

Bonjour à tous, et bonne année !!

L'année commence fort puisque me voilà déjà ici en quête de votre aide

Toujours novice en VBA, je bataille depuis ce matin avec quelque chose qui, je pense, n'est pas si compliqué que ça.. Je m'explique :

J'ai créer un fichier "Récapitulatif des heures travaillées"' (ci-joint). Je souhaite rentrer des horaires, chaque jour, dans un tableau mensuel.

A chaque nouveau mois, je voudrais avoir la possibilité de dupliquer automatiquement mon dernier onglet (01-2018 par exemple), et remplir automatiquement les jours et dates présentes dans ce nouvel onglet (ainsi que la mise en forme, mais ça c'est une autre histoire )

J'ai trouvé un code en fouillant sur le net qui me permet parfaitement de dupliquer l'onglet (cf. spoiler ci dessous), mais je ne sais pas quelle direction prendre pour que mes cellules s'adaptent correctement...

Private Sub CommandButton1_Click()
Dim NomFeuil As String, NexistePas As Boolean, Caractere As String

'Le nom de ta future feuille est en Feuil1!B4
NomFeuil = Sheets(1).Range("N2")
'test les caractères spéciaux à éviter :
If Test_Nom_Feuille(NomFeuil, Caractere) = False Then GoTo Faute
'test si la feuille n'existe pas déjà :
On Error Resume Next
NexistePas = Sheets(NomFeuil).Name <> ""
On Error GoTo 0
If NexistePas = False Then
    'si tout ok : on copie
    Sheets(1).Copy Before:=Sheets(2)
    'on renomme
    ActiveSheet.Name = NomFeuil
    'on supprime le vilain méchant bouton pas beau
    ActiveSheet.Shapes.Range(Array("CommandButton1")).Delete
Else
    'si pas ok
    MsgBox "Le nom n'est pas valide : Feuille déjà existante", vbCritical
End If
Exit Sub
'traitement d'erreur caractère spécial :
Faute:
MsgBox "Le nom n'est pas valide." & vbCrLf & "Le caractère : " & Caractere & " est interdit.", vbCritical
End Sub

'test si la chaine contient un caractère à éviter
Function Test_Nom_Feuille(Nom As String, Carac As String) As Boolean
Dim i As Byte, Carac_Interdits

Carac_Interdits = Split("/,\,:,*,?,"",<,>,|", ",")
For i = LBound(Carac_Interdits) To UBound(Carac_Interdits)
    If InStr(Nom, Carac_Interdits(i)) > 0 Then
        Test_Nom_Feuille = False
        Carac = Carac_Interdits(i)
        Exit Function
    End If
Next i
Test_Nom_Feuille = True
End Function

Avec ce code l'onglet est bien dupliqué mais le code n'a pas pour "vocation" d'être utilisé plusieurs fois puisque le bouton est supprimé après exécution de la macro.

Après plusieurs recherches pour voir un peu comment je pourrais me débrouiller, j'en suis venu à la question suivante :

Ne serait-il pas plus simple de créer une macro UNIQUEMENT pour dupliquer le format du tableau ? Et ensuite le remplir à la main ? Car j'ai vraiment l'impression que si je veux tout automatiser le code sera imbuvable et j'ai peur de ne pas tout comprendre.

J'en appelle à votre expérience pour savoir quelle technique serait la plus pertinente svp, car là, je nage

D'avance merci pour votre temps

PS : J'ai créer un onglet >02-2018 sur mon fichier pour montrer le résultat optimal à obtenir après click sur le bouton

bonjour

Excel n'est pas un classeur de feuilles papier. Faire une vraie informatique.

une unique feuille de saisie

JOUR DATE MATIN APREM

et ne jamais créer de feuille par mois.

cette feuille te durera 10 ou 20 ans. ça va en faire des lignes !

ensuite de simples TCD te feront des additions par semaines, par mois, par an...

Pas de VBA

Bonjour

200% d'accord avec jmd.

Et si tu veux faire un calendrier : reste en date partout pas de texte(...) mais juste le bon format d'affichage de la date tant pour la colonne des jours que pour la colonne N.

Pourquoi ne pas automatiser la mention Férié puisque tu as la liste de ces jours ?

Adapter aussi tes MFC on sait le faire à partir de dates en une seule MFC.

Quand on veut reproduire un onglet, il vaut mieux passer par un modèle de feuille (classeur xltx) (on choisit le modèle lors de la manip insérer feuille) que du VBA d'autant que partir d'un onglet rempli à vider est la source d'erreur la plus répandue...

Bonjour, et merci à vous deux pour vos réponses !

@jmd : J'y ai pensé.. Je me suis dis qu'un classeur par an c'était jouable.. Mais tu as sans doute raison ! Par contre on est d'accord que du coup tu parles d'un nombre d'heures à rentrer directement ? Et non pas d'horaires d'arrivée/départ ?

@78chris : Tu as raison pour les jours fériés, je venais de créer l'onglet et ne m'en suis pas encore servi pour la mise en forme. Mais je dois avouer que la MFC m'effraie un peu, je ne comprends rien à comment ça marche Chaque fois que j'ai essayé de m'en servir, je n'ai jamais obtenu le résultat attendu. Il faudrait que j'approfondisse la chose...

Merci pour la technique du modèle, je vais garder ça en tête !

Vous avez sans doute raison en disant que le VBA n'est pas utile pour un tel travail, c'était avant tout pour m'exercer et pour automatiser un peu la chose que je voulais passer par là

re

salut Chris,

concernant la saisie, tu peux choisir de saisir un nombre d'heures, ou bien des horaires entrée/sortie et mettre une colonne contenant une soustraction pour avoir le nombre d'heures.

attention 1 : la même feuille va servir durant des années, ne pas créer de nouvelle feuille chaque année.

attention 2 : ne plus utiliser VBA

Rechercher des sujets similaires à "dupliquer onglet puis modifier valeurs nouvel"