Recuperer le nom de la derniere feuille [ RESOLU ]

popcorn

XLDnaute Occasionnel
Bonjour,


J'ai un classeur Excel qui contient une feuille par jour (planning de livraison). Pour éviter de faire des copier/coller manuellement, j’essaie de faire une macro.

En écumant les forums, j'ai récupérer des bouts de code et j'arrive tant bien que mal à créer une copie de ma feuille sur une année complète sans les week end en les renommant avec une date.

Je me rend bien compte que ce n'est pas très pratique à ce jour, mon fichier sera bon qu'a partir du 1 janvier car je pourrai repartir sur un classeur totalement vierge.

J'ai aussi à l'esprit que plus de 250 feuilles sur un classeur cela ne doit pas être bien terrible, bien que celle ci ne soit pas chargées de formule, c'est essentiellement de la saisie.

J'aurais souhaité récupérer la date du dernier onglet du classeur en variable comme point départ, par exemple si la dernière feuille se nomme 3105 , il faudrait que la copie suivante soit 0106 et ainsi de suite.

Voila le bout de code que j'utilise :

VB:
Sub test()
Dim x, i
'Le nom des feuilles seront incrementé apres le 1 janvier
'x = DateSerial(Year(Date), 1, 1)
'les noms des feuilles seront incrementées apres la date du jour actuel
x = Now()
For i = 1 To 5  '365
Select Case Weekday(CDate(x + i), vbMonday)
Case 1 To 5
      With ActiveWorkbook.ActiveSheet
        .Copy After:=Worksheets(Worksheets.Count)
      End With
    ActiveSheet.Name = Format(CDate(x + i), "ddmm")
    End Select
    Next i
End Sub

J'espere avoir été clair, mais il est possible que je fasse mauvaise route.

Bien à vous
Merci
 

Pièces jointes

  • Copie_et_renomme_feuille_avec_date.xlsm
    33.1 KB · Affichages: 45

Dranreb

XLDnaute Barbatruc
Je vous propose une autre fonction :
VB:
Private Function EstOuvré(ByVal LaDate As Date) As Boolean
Dim An As Integer, A As Integer, B As Integer, C As Integer, D As Integer, _
    E As Integer, F As Integer, MPâq As Integer, Pâques As Date
An = Year(LaDate): EstOuvré = True
If Weekday(LaDate, vbMonday) > 5 Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 1, 1) Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 5, 1) Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 5, 8) Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 7, 14) Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 8, 15) Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 11, 1) Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 11, 11) Then EstOuvré = False: Exit Function
If LaDate = DateSerial(An, 12, 25) Then EstOuvré = False: Exit Function
A = An Mod 19: B = An \ 100: C = (B - 17) \ 25
D = (B - B \ 4 - (B - C) \ 3 + 19 * A + 15) Mod 30
D = D - (D \ 28) * (1 - (D \ 28) * (29 \ (D + 1)) * ((21 - A) \ 11))
E = (An + An \ 4 + D + 2 - B + B \ 4) Mod 7: F = D - E
MPâq = 3 + (F + 40) \ 44: Pâques = DateSerial(An, MPâq, F + 28 - (MPâq \ 4) * 31)
If LaDate = Pâques + 1 Then EstOuvré = False: Exit Function
If LaDate = Pâques + 39 Then EstOuvré = False: Exit Function
If LaDate = Pâques + 50 Then EstOuvré = False: Exit Function
End Function
 

popcorn

XLDnaute Occasionnel
Merci pour le temps que vous m'avez consacré.

La fonction que j'ai posté ne fonctionnait pas dans la macro tant que je n'avais pas modifié ses paramètres comme vous me l'avez indiqué. En revanche, elle fonctionnais en tant que tel dans une cellule.

Merci pour la fonction que vous m'avez proposer, votre code est limpide, j'adore.

Pour la syntaxe, j'ai du écrire de cette manière :

Loop Until EstOuvré(D) = True

Je suis sur Mac, est ce que cela peut venir de ça, j'en sais rien. Cela me faisait une erreur : Nombre d'arguments incorrect ou affectation de propriété incorrecte.

Quoi qu'il en soit, j'ai un super fichier maintenant.

Merci encore.

Bien à vous
 

popcorn

XLDnaute Occasionnel
Ce matin en ouvrant le classeur à nouveau, lors de la première exécution de la macro, j'avais une erreur 11 (Division par 0).
Si je la relance, l'erreur ne sort plus.

J'ai fait plusieurs essai, toujours cette erreur qui sort à la première exécution après ouverture du fichier.

J'ai essayé de comprendre car j'avais le même code dans le même module intitulé différemment qui ne me faisait pas l'erreur!!

Bon, j'ai finalement supprimer et recoller le code, puis tout marche. Étonnant car lors du débogage il mettait en exergue :

D = D + 1

Ce qui ne peut pas être une division par 0.

Et l'autre code fonctionnait sans problème avec la même syntaxe.

Bref, je me ça sur le compte d'un bug de ma version Excel.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il serait plus sage de le mettre d'abord sur le compte d'une cellule I5 qui contiendrait toujours encore un nombre à 4 chiffres au lieu d'une date. En tout cas déboguez si ça se reproduit, mettez des espions, examinez les valeurs des expressions impliquées.
 

popcorn

XLDnaute Occasionnel
Bonjour,

Pourtant la cellule I5 contient bien une date. Puis j'ai deux fois la même macro avec un nom différent, du coup qui fait référence a la même cellule I5 mais qui ne plante pas.

la macro "Creer_onglet_suivant" bug a sa première exécution, et la macro "Creer_Feuille_avec_date" fonctionne sans probleme.

Alors par contre, je ne comprend plus car quand j'utilise l'espion sur la valeur de I5, de la macro ""Creer_onglet_suivant",
je vois que la valeur est empty, ce qui me parait logique du coup que cela plante.

En revanche, la macro "Creer_Feuille_avec_date" qui fonctionne, quand je met l'espion au même endroit cela me fait planter la macro!!

Bon, ce n'est pas un problème car j'ai un fichier nettoyer et fonctionnel mais juste celui la m'intriguait.


Merci
 

Pièces jointes

  • Copie_et_renomme_feuille_macrobug.xlsm
    41.2 KB · Affichages: 33

Dranreb

XLDnaute Barbatruc
La Creer_onglet_suivant a fonctionné du 1er coup chez moi sur votre classeur joint.
Je ne vois aucune différence entre la Creer_Feuille_avec_date et la 1ère.
Curieux ces caractères complètements champolionisés, "Ž" au lieu de "é" notamment
 

popcorn

XLDnaute Occasionnel
Bonjour,

J'ai pas de caractères "champolionisés", et c'est étonnant que cela fonctionne chez vous. Je viens de refaire un essai, cette macro me fait toujours une erreur à la première exécution, l'autre non. Je suis sur une version Excel 2011 Mac.

Je laisse cette énigme de coté. La macro me convient, je préfère mettre en pratique du vba pour continuer d'apprendre.

Merci de votre retour.
 

Discussions similaires

Réponses
5
Affichages
169

Statistiques des forums

Discussions
312 109
Messages
2 085 383
Membres
102 878
dernier inscrit
asmaa