OVH Cloud OVH Cloud

Feuilles (Copier -renommer)

16 réponses
Avatar
Martin
Bonjour à tous et à toutes

Je cherche à faire une macro qui va faire ceci:
J'ai un fichier à une feuille (1ere semaine de janvier 2005)
J'aimerais pouvoir la copier 52 fois en renommant chaque feuille avec la
valeur de la cellule b4 Mais au format "jj mmm" (Ex "02 Janv")
Aussi, j'aimerais que pour chaque feuilles, la celulle B4 s'incrémente de
7jours (semaine suivante)

Je cherche depuis un moment mais je n'ai pas réussi.

Merci à l'avance pour votre aide

Bonne journée

Martin

6 réponses

1 2
Avatar
Martin
Salut Av

Où je travaille, les semaine sont du Dimanche au samedi voilà pourquoi ,
Et pour ce qui est des 52 semaines, je n'ai pas compter comment j'en ai de
besoin je me suis dis que l'ajustement viendrait après :)

Mais j'ai encore une question: Si je prend cette formule

For i = 2 To 52
Sheets(i).Copy , After:=Sheets(i)
ActiveSheet.Range("B6") = Sheets(i).Range("B6") + 7
ActiveSheet.Name = Format(Range("B6").Text, "d-mmm")

Je voudrais que si en feuille 2 B8 j'ai une formule du genre
='Feuil1'!B8+b35,j'aimerais que sur ma feuille 3 B8, cette formule devienne
='Feuil2'!B8+b35

Merci encore à l'avance

Martin


"AV" a écrit dans le message de news:

Ma première semaine débute le Dimanche 2 Janvier


Bizarre ce début de semaine..de même que tu veuilles t'arrêter à 52
semaines...mais bon
Avec une seule feuille dans le classeur nommée "02 janv" comportant en B4
02/01/05

Sub zzz()
For i = 1 To 51
Sheets.Add after:=Sheets(i)
With ActiveSheet
.Name = Format(Sheets(i).[B4] + 7, "dd mmm")
.[B4] = Sheets(i).[B4] + 7
End With
Next
End Sub

AV





Avatar
AV
Je voudrais que si en feuille 2 B8 j'ai une formule du genre


Un truc m'échappe : dans la question originelle tu dis une seule feuille donc je
vois pas où est la feuille 2.....
Par ailleurs ce que je t'ai proposé n'est pas l'ajout de feuilles par copie
(Copy) mais l'ajout de nouvelles feuilles vierges (Add)

Quoiqu'il en soit je m'évacue maintenant du lieu donc ...faudra attendre où
consulter mes petits camarades
AV

Avatar
PMO
Rebonjour,

Nouveau code modifié pour tenir compte des références à adapter
automatiquement.
Ne modifier pas la boucle For k& = 1 To 51
Faites plutôt ceci:
1) Créez une feuille vide "toto" qui servira d'appui pour les références
futures.
2) Créez la feuille 1ère semaine qui servira de modèle en faisant la mise
en page, la mise en page d'impression, les formules se référençant à
la feuille vide "toto".
Ex: en cellule B10 on aura la formule =toto!A3

La macro ne traite que les formules avec une seule référence de feuille.
Ainsi si on a une formule du type =toto!B8+toto!B28 ça ne marchera pas.

En lançant la macro on obtiendra les 51 semaines voulues
avec la même mise en page et la même mise en page d'impression
et pour chaque feuille les formules se référant à la feuille immédiatement
précédente.

'***********************
Option Explicit
Sub CopieWeekEtRef()
Dim S As Worksheet
Dim S2 As Worksheet
Dim R As Range
Dim myDate As Date
Dim var
Dim var2
Dim i&
Dim j&
Dim k&
Dim Nom$
If Not IsDate([b4]) Then
MsgBox "La cellule B4 ne contient pas de date."
Exit Sub
End If
[b4].NumberFormat = "dd mmm"
myDate = [b4]
Set S = ActiveSheet
Nom$ = S.Name
For k& = 1 To 51
'---- Copie avec mise en page et forme ----
S.Copy After:=Sheets(Sheets.Count)
Set S2 = ActiveSheet
[b4] = myDate + 7 * (k&)
Set R = S2.UsedRange
'---- Traite les références ----
var = R.Formula
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
var2 = var(i&, j&)
If Left(var2, 1) = "=" And _
InStr(1, var2, "!") > 0 Then
var(i&, j&) = "='" & Nom$ & "'" & _
Mid(var2, InStr(1, var2, "!"))
End If
Next j&
Next i&
R = var
'---- Nom de la feuille ----
Nom$ = [b4].Text
S2.Name = Nom$
Next k&
End Sub
'***********************

Cordialement.

PMO
Patrick Morange



Bonjour à tous et à toutes

Je cherche à faire une macro qui va faire ceci:
J'ai un fichier à une feuille (1ere semaine de janvier 2005)
J'aimerais pouvoir la copier 52 fois en renommant chaque feuille avec la
valeur de la cellule b4 Mais au format "jj mmm" (Ex "02 Janv")
Aussi, j'aimerais que pour chaque feuilles, la celulle B4 s'incrémente de
7jours (semaine suivante)

Je cherche depuis un moment mais je n'ai pas réussi.

Merci à l'avance pour votre aide

Bonne journée

Martin





Avatar
Gaspareau
Bonjour PMO

J'ai copié ton code et adapté à mes cellules
Ça fonctionne très bien jusqu'à la semaine du 24 jullet !!!
Ensuite le Débugger démarre et me donne un erreur à la ligne

S.Copy After:=Sheets(Sheets.Count)

Bizarre que ça fonctionne jusqu'à la semaine 30 puis ça plante non ?!?!




"PMO" a écrit dans le message de
news:
Bonjour,

Un code qui copie la 1ère feuille servant de modèle tout
en transmettant sa mise en page et sa mise en forme.

'****************
Option Explicit
Sub CopierSemaine()
Dim S As Worksheet
Dim myDate As Date
Dim i&
If Not IsDate([b4]) Then
MsgBox "La cellule B4 ne contient pas de date."
Exit Sub
End If
[b4].NumberFormat = "dd mmm"
myDate = [b4]
Set S = ActiveSheet
For i& = 1 To 51
S.Copy After:=Sheets(Sheets.Count)
[b4] = myDate + 7 * (i&)
ActiveSheet.Name = [b4].Text
Next
End Sub
'****************

Cordialement.

PMO
Patrick Morange



Bonjour à tous et à toutes

Je cherche à faire une macro qui va faire ceci:
J'ai un fichier à une feuille (1ere semaine de janvier 2005)
J'aimerais pouvoir la copier 52 fois en renommant chaque feuille avec la
valeur de la cellule b4 Mais au format "jj mmm" (Ex "02 Janv")
Aussi, j'aimerais que pour chaque feuilles, la celulle B4 s'incrémente
de


7jours (semaine suivante)

Je cherche depuis un moment mais je n'ai pas réussi.

Merci à l'avance pour votre aide

Bonne journée

Martin







Avatar
Gaspareau
Encore plus bizarre

Je ferme Excel, je relance et cette fois je me rend
au 6 novembre soit la semaine 45 !!!!

Tout ça sans rien changer !!!

Je ne comprend rien !!!!


"Gaspareau" a écrit dans le message de
news:
Bonjour PMO

J'ai copié ton code et adapté à mes cellules
Ça fonctionne très bien jusqu'à la semaine du 24 jullet !!!
Ensuite le Débugger démarre et me donne un erreur à la ligne

S.Copy After:=Sheets(Sheets.Count)

Bizarre que ça fonctionne jusqu'à la semaine 30 puis ça plante non ?!?!




"PMO" a écrit dans le message de
news:
Bonjour,

Un code qui copie la 1ère feuille servant de modèle tout
en transmettant sa mise en page et sa mise en forme.

'****************
Option Explicit
Sub CopierSemaine()
Dim S As Worksheet
Dim myDate As Date
Dim i&
If Not IsDate([b4]) Then
MsgBox "La cellule B4 ne contient pas de date."
Exit Sub
End If
[b4].NumberFormat = "dd mmm"
myDate = [b4]
Set S = ActiveSheet
For i& = 1 To 51
S.Copy After:=Sheets(Sheets.Count)
[b4] = myDate + 7 * (i&)
ActiveSheet.Name = [b4].Text
Next
End Sub
'****************

Cordialement.

PMO
Patrick Morange



Bonjour à tous et à toutes

Je cherche à faire une macro qui va faire ceci:
J'ai un fichier à une feuille (1ere semaine de janvier 2005)
J'aimerais pouvoir la copier 52 fois en renommant chaque feuille avec
la



valeur de la cellule b4 Mais au format "jj mmm" (Ex "02 Janv")
Aussi, j'aimerais que pour chaque feuilles, la celulle B4 s'incrémente
de


7jours (semaine suivante)

Je cherche depuis un moment mais je n'ai pas réussi.

Merci à l'avance pour votre aide

Bonne journée

Martin











Avatar
Martin
Salut PMO

Ca fonctionne pour la 1ere feuille mais après j'ai une erreur 400 de VB, la
macro s'arrête à la ligne avec le code R = VAR dans traite les références.
Une idée pourquoi?

Martin

"PMO" a écrit dans le message de news:

Rebonjour,

Nouveau code modifié pour tenir compte des références à adapter
automatiquement.
Ne modifier pas la boucle For k& = 1 To 51
Faites plutôt ceci:
1) Créez une feuille vide "toto" qui servira d'appui pour les références
futures.
2) Créez la feuille 1ère semaine qui servira de modèle en faisant la mise
en page, la mise en page d'impression, les formules se référençant à
la feuille vide "toto".
Ex: en cellule B10 on aura la formule =toto!A3

La macro ne traite que les formules avec une seule référence de feuille.
Ainsi si on a une formule du type =toto!B8+toto!B28 ça ne marchera
pas.


En lançant la macro on obtiendra les 51 semaines voulues
avec la même mise en page et la même mise en page d'impression
et pour chaque feuille les formules se référant à la feuille immédiatement
précédente.

'***********************
Option Explicit
Sub CopieWeekEtRef()
Dim S As Worksheet
Dim S2 As Worksheet
Dim R As Range
Dim myDate As Date
Dim var
Dim var2
Dim i&
Dim j&
Dim k&
Dim Nom$
If Not IsDate([b4]) Then
MsgBox "La cellule B4 ne contient pas de date."
Exit Sub
End If
[b4].NumberFormat = "dd mmm"
myDate = [b4]
Set S = ActiveSheet
Nom$ = S.Name
For k& = 1 To 51
'---- Copie avec mise en page et forme ----
S.Copy After:=Sheets(Sheets.Count)
Set S2 = ActiveSheet
[b4] = myDate + 7 * (k&)
Set R = S2.UsedRange
'---- Traite les références ----
var = R.Formula
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
var2 = var(i&, j&)
If Left(var2, 1) = "=" And _
InStr(1, var2, "!") > 0 Then
var(i&, j&) = "='" & Nom$ & "'" & _
Mid(var2, InStr(1, var2, "!"))
End If
Next j&
Next i&
R = var
'---- Nom de la feuille ----
Nom$ = [b4].Text
S2.Name = Nom$
Next k&
End Sub
'***********************

Cordialement.

PMO
Patrick Morange



Bonjour à tous et à toutes

Je cherche à faire une macro qui va faire ceci:
J'ai un fichier à une feuille (1ere semaine de janvier 2005)
J'aimerais pouvoir la copier 52 fois en renommant chaque feuille avec la
valeur de la cellule b4 Mais au format "jj mmm" (Ex "02 Janv")
Aussi, j'aimerais que pour chaque feuilles, la celulle B4 s'incrémente
de


7jours (semaine suivante)

Je cherche depuis un moment mais je n'ai pas réussi.

Merci à l'avance pour votre aide

Bonne journée

Martin







1 2