Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier une feuille

7 réponses
Avatar
STERNENBERG Jean Yves
Bonjour, j'ai un classeur avec une feuille, je voudrais qu'a l'ouverture du
classeur cette feuillle soit copier a la suite de l'autre et que l'onglet
prenne la date du jour.
Ex: la feuille 1 et nommée 15-08-09 je veux a l'ouverture du classeur que la
feuille 2 se nomme 16-08-09 et ainsi de suite , part contre si je dois
fermer le classeur dans la journée il ne faut pas qu'a la réouverture le
classeur crée une autre feuille puisque ce sera le même jour.je vous
remercie de votre aide.

7 réponses

Avatar
FS
Bonsoir,

Une solution possible (dans le module ThisWorkbook du classeur concerné):

'===================== Private Sub Workbook_Open()
Dim Prec As Variant
Prec = CDate(Sheets(Sheets.Count).Name)
If Prec <> Date Then Sheets.Add.Name = Format(Prec + 1, "dd-mm-yy")
ActiveSheet.Move after:=Sheets(Sheets.Count)
End Sub
'======================
S'il y a un risque que le nom du dernier onglet du classeur ne soit pas
une date, il faudrait inclure une petite gestion de cette erreur possible.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

STERNENBERG Jean Yves a écrit :
Bonjour, j'ai un classeur avec une feuille, je voudrais qu'a l'ouverture du
classeur cette feuillle soit copier a la suite de l'autre et que l'onglet
prenne la date du jour.
Ex: la feuille 1 et nommée 15-08-09 je veux a l'ouverture du classeur que la
feuille 2 se nomme 16-08-09 et ainsi de suite , part contre si je dois
fermer le classeur dans la journée il ne faut pas qu'a la réouverture le
classeur crée une autre feuille puisque ce sera le même jour.je vous
remercie de votre aide.




Avatar
MichDenis
Bonjour Jean Yves,

Dans le ThisWorkbook de ton classeur :
'---------------------------------------
Private Sub Workbook_Open()
Ajout_Feuille_Si_Nécessaire
End Sub
'---------------------------------------

Dans un module standard, ce qui suit :
'--------------------------------------
Sub Ajout_Feuille_Si_Nécessaire()
Dim LaDate As Long, X()
Dim Année As Long, Mois As Integer
Dim A As Integer, jour As Integer
Dim Sh As Worksheet, Nom As String
Année = Year(Date)
Mois = Month(Date)
jour = Day(Date)
LaDate = CLng(DateSerial(Année, Mois, jour))
Application.ScreenUpdating = False
With ThisWorkbook
With .Worksheets
ReDim X(1 To .Count)
For Each Sh In Worksheets
If IsDate(Sh.Name) Then
A = A + 1
X(A) = CLng(CDate(Sh.Name))
End If
Next
End With
BubbleSort X
If Not IsNumeric(Application.Match(CLng(LaDate), X, 0)) Then
'aucune feuille portant la date d'aujourd'hui existe
'copie de la feuille
Nom = Format(CDate(X(UBound(X))), "DD-MM-YY")
Set Sh = .Worksheets(Nom)
Sh.Copy before:=Sheets(1)
.ActiveSheet.Name = Format(CDate(LaDate), "DD-MM-YY")
Sh.Name = Nom
End If
End With
Application.ScreenUpdating = True
End Sub
'--------------------------------------
Sub BubbleSort(List())
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Sub
'--------------------------------------




"STERNENBERG Jean Yves" a écrit dans le message de groupe de
discussion :
Bonjour, j'ai un classeur avec une feuille, je voudrais qu'a l'ouverture du
classeur cette feuillle soit copier a la suite de l'autre et que l'onglet
prenne la date du jour.
Ex: la feuille 1 et nommée 15-08-09 je veux a l'ouverture du classeur que la
feuille 2 se nomme 16-08-09 et ainsi de suite , part contre si je dois
fermer le classeur dans la journée il ne faut pas qu'a la réouverture le
classeur crée une autre feuille puisque ce sera le même jour.je vous
remercie de votre aide.
Avatar
isabelle
bonjour Jean Yves,

x = CDate(Sheets(Sheets.Count).Name) + 1
Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = x

isabelle

STERNENBERG Jean Yves a écrit :
Bonjour, j'ai un classeur avec une feuille, je voudrais qu'a l'ouverture du
classeur cette feuillle soit copier a la suite de l'autre et que l'onglet
prenne la date du jour.
Ex: la feuille 1 et nommée 15-08-09 je veux a l'ouverture du classeur que la
feuille 2 se nomme 16-08-09 et ainsi de suite , part contre si je dois
fermer le classeur dans la journée il ne faut pas qu'a la réouverture le
classeur crée une autre feuille puisque ce sera le même jour.je vous
remercie de votre aide.





Avatar
MichDenis
| S'il y a un risque que le nom du dernier onglet du classeur ne soit pas
| une date, il faudrait inclure une petite gestion de cette erreur possible.

Bonjour Frédéric,

Il n'est pas dit que les feuilles sont en ordre croissant, que certaines
d'entre elles n'ont pas été déplacées !
La longueur de la macro dépend du nombre de "si"

;-)
Avatar
FS
Bonjour Isabelle,

Tu as raison, j'ai oublié que la demande était de copier la dernière
feuille (et non d'ajouter une feuille vierge). Et ta proposition ne
tient pas compte du fait que la procédure ne doit se déclencher qu'une
fois par jour.
En mélanger nos deux propositions, "STERNENBERG Jean Yves" devrait s'en
sortir.
Il reste que des questions sont en suspens. Non seulement celle de Denis
mais aussi au moins une autre : le classeur est-il vraiment ouvert
tous les jours (y compris les WE et jours fériés) ? et si non quelle
serait la demande ?
Le demandeur nous éclairera peut-être!
Cordialement,

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

isabelle a écrit :
bonjour Jean Yves,

x = CDate(Sheets(Sheets.Count).Name) + 1
Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = x

isabelle

STERNENBERG Jean Yves a écrit :
Bonjour, j'ai un classeur avec une feuille, je voudrais qu'a
l'ouverture du classeur cette feuillle soit copier a la suite de
l'autre et que l'onglet prenne la date du jour.
Ex: la feuille 1 et nommée 15-08-09 je veux a l'ouverture du classeur
que la feuille 2 se nomme 16-08-09 et ainsi de suite , part contre si
je dois fermer le classeur dans la journée il ne faut pas qu'a la
réouverture le classeur crée une autre feuille puisque ce sera le même
jour.je vous remercie de votre aide.






Avatar
MichDenis
| Et ta proposition ne tient pas compte du fait que
| la procédure ne doit se déclencher qu'une
| fois par jour.

Il est vrai que la procédure s'exécute à chaque fois
que l'usager ouvre le fichier mais aucune feuille
ne sera ajoutée au classeur si l'une des feuillles possède
la date du jour (Format reconnu par Excel) en cours
comme appellation de son onglet. Du moins c'est
la prétention de la procédure.
Avatar
isabelle
bonjour Frédéric,

contente de te lire à nouveau ici,
comme tu dit, espérons que Jean Yves y trouvera son compte,

isabelle

FS a écrit :
Bonjour Isabelle,

Tu as raison, j'ai oublié que la demande était de copier la dernière
feuille (et non d'ajouter une feuille vierge). Et ta proposition ne
tient pas compte du fait que la procédure ne doit se déclencher qu'une
fois par jour.
En mélanger nos deux propositions, "STERNENBERG Jean Yves" devrait
s'en sortir.
Il reste que des questions sont en suspens. Non seulement celle de
Denis mais aussi au moins une autre : le classeur est-il vraiment
ouvert tous les jours (y compris les WE et jours fériés) ? et si non
quelle serait la demande ?
Le demandeur nous éclairera peut-être!
Cordialement,

FS