Copie plusieurs onglets en VBA
bonjour à tous,
voilà, j'ai une macro qui me permet de copier mon onglet "A" 52 fois, bien pratique pour copier un planning sur 52 semaines :
Sub copyongletXfois()
'declare
Dim numsemaine As String
Dim wrkcpy As Worksheet
Dim mywork As Workbook
Dim wrksource As Worksheet
Dim i As Long
'init
Set mywork = ActiveWorkbook
Set wrksource = mywork.ActiveSheet
'work
For i = 1 To 52
wrksource.Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
If Len(i) = 1 Then
numsemaine = "0" & i
Else
numsemaine = i
End If
ActiveSheet.Name = numsemaine
Next
End Sub
Maintenant, j'ai des planning en cycle sur 5 semaine A B C D et E. je voudrais que la macro fasse une copie A en 1, B en 2... E en 5 puis A en 6, B en 7...
merci d'avance pour vos retours,
et bon WE
Francky
oups, il faut voir "A" à la place de "0".
désolé,
Francky
Bonsoir,
à la place de quel Zéro ? celui devant 52 ?
voilà la bonne macro
Sub copyongletXfois()
'declare
Dim numsemaine As String
Dim wrkcpy As Worksheet
Dim mywork As Workbook
Dim wrksource As Worksheet
Dim i As Long
'init
Set mywork = ActiveWorkbook
Set wrksource = mywork.ActiveSheet
'work
For i = 1 To 52
wrksource.Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
If Len(i) = 1 Then
numsemaine = "A" & i
Else
numsemaine = i
End If
ActiveSheet.Name = numsemaine
Next
End Sub
merci d'avance,
Francky
Bonjour,
Francky69100 a écrit :voilà la bonne macro
merci d'avance,
Francky
tu n'aurais pas la bonne question aussi ?
Que veux tu pour la semaine 52 ?
bonjour Pierre.jy,
désolé si je ne suis pas claire, je vais essayer de le redire :
- Actuellement, j'avais un planning dans l'onglet "A" et je le dupliquait avec la macro ci-dessus sur 52 semaines. Tout allait bien car le planning était identique.
- Aujourd'hui je gère aussi des plannings en cycle, et actuellement sur 5 semaines. d'où ma demande, si j'ai le théorique en "A", "B"... "E", je voudrais que la macro copie la semaine "A" en l'onglet "1", "B" en l'onglet "2".. "E en l'onglet "5" puis de nouveau "A" en l'onglet "6", "B en l'onglet "7"... et jusqu'à la semaine (onglet) "52". Si je ne me trompe pas ce sera la semaine (onglet) "B".
j'espère avoir été un peu plus clair, sinon, je ferais un fichier exemple come résultat attendu.
cordialement,
Francky
en exemple un fichier, j'ai sauté de la semaine 10 à 50 pour faire court.
cordialement,
Francky
bonsoir,
est-ce que ma demande est pas clair ou vous considérez sans intérêt !
je ne sais malheureusement pas faire ce gendre de programme.
cordialement,
Francky
Bonsoir,
ben c'était pas clair... cela va mieux tiens un code commenté exécute le tu verra le résultat dans la fenêtre d'exécution CTRL+G
Sub Montest()
Dim i As Integer
Debug.Print Asc("@")
For i = 1 To 52
' i Mod 5 => renvoi le reste de la division de i par 5
' Asc("A") que l'on peu aussi remplacer par 65 renvoi le code Ascii de A
' Chr c'est l'inverse de Asc ainsi Chr(65) donne A , Chr(66) donne B ...
Debug.Print Chr(i - 1 Mod 5 + Asc("A")) & i
' Et si tu veut rajouter un 0 devant i pour les nombres < 10 tu utlise Format.
'Debug.Print Chr(i - 1 Mod 5 + Asc("A")) & Format(i, "00")
Next
End Sub
ce code devrait t'aider pour modifier le tiens reviens vers nous et montre nous ou tu en est si tu n'y arrive pas
Bonjour,
mais désolé ça ne marche pas...
concernant cette boucle :
Sub copyongletXfois()
'declare
Dim numsemaine As String
Dim wrkcpy As Worksheet
Dim mywork As Workbook
Dim wrksource As Worksheet
Dim i As Long
'init
Set mywork = ActiveWorkbook
Set wrksource = mywork.ActiveSheet
'work
For i = 1 To 52
wrksource.Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
If Len(i) = 1 Then
numsemaine = "A" & i
Else
numsemaine = i
End If
ActiveSheet.Name = numsemaine
Next
End Sub
En fait il faudrait que cette boucle prenne la feuille A et la copie en 1 (c'est le nome de la feuille), 5, 10... et qu'elle s'arrête en 52
puis la feuille B copier en feuille 2,6,11... jusqu'à 52
.... jusqu'à la feuille E.
j'espère être plus clair !...
Francky
Bon, pour la feuille "A" quand je lance l'enregistreur de macro voilà ce que ça donne :
Sub Essai()
'
' Essai Macro
Sheets("A").Select
Sheets("A").Copy After:=Sheets(1)
Sheets("A (2)").Select
Sheets("A (2)").Name = "1"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(2)
Sheets("A (2)").Select
Sheets("A (2)").Name = "5"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(3)
Sheets("A (2)").Select
Sheets("A (2)").Name = "10"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(4)
Sheets("A (2)").Select
Sheets("A (2)").Name = "15"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(5)
Sheets("A (2)").Select
Sheets("A (2)").Name = "20"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(6)
Sheets("A (2)").Select
Sheets("A (2)").Name = "25"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(7)
Sheets("A (2)").Select
Sheets("A (2)").Name = "30"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(8)
Sheets("A (2)").Select
Sheets("A (2)").Name = "35"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(9)
Sheets("A (2)").Select
Sheets("A (2)").Name = "40"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(10)
Sheets("A (2)").Select
Sheets("A (2)").Name = "45"
Sheets("A").Select
Sheets("A").Copy After:=Sheets(11)
Sheets("A (2)").Select
Sheets("A (2)").Name = "50"
End Sub
et puis il faudrait faire pou "B" en 2, 6, 12...
en sachant qu'il faut s'arrêter à 52
puis "C" jusqu'à "E".
je pense que là je suis clair.
bon dimanche à tous,
Francky