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".
Si je veux que les onglets est des chiffres, c'est que j'ai des formule dans mes planning qui prennent en compte le numéro de l'onglet pour mettre les dates et fériés...

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

12planning-cyle.xlsx (21.99 Ko)

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

Rechercher des sujets similaires à "copie onglets vba"