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.
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
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" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
O4ViUdE6EHA.3612@TK2MSFTNGP14.phx.gbl...
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
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
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
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
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
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
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.
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
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
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" <PMO@discussions.microsoft.com> a écrit dans le message de
news:A2E6E346-712D-4580-8629-5ECD474B53DD@microsoft.com...
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.
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
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
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" <123@234> a écrit dans le message de
news:unXmuSF6EHA.3756@TK2MSFTNGP14.phx.gbl...
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" <PMO@discussions.microsoft.com> a écrit dans le message de
news:A2E6E346-712D-4580-8629-5ECD474B53DD@microsoft.com...
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.
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
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
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" <PMO@discussions.microsoft.com> a écrit dans le message de news:
FE792403-5AD3-46AD-B2C7-A69C9361E5CD@microsoft.com...
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.
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.