Bonjour, j'ai en feuil1 un modèle de semaine (simplifié) pour l'exemple.
En feuil2, un modèle, tout aussi simplifié de calendrier mensuel. Dans les cellules de cette feuille j'ai des formules du type : =INDEX(Feuil1!$B$1:$L$7;JOURSEM($A1;2);COLONNE()-1)
qui me permettent de rapatrier les données de la feuil1 vers la feuil2.
Seulement, une formule par cellule multipliée par 10 colonnes pour 31 jours.... ça fait beaucoup et c'est bien lourd.
Bonjour Halecs,
Le problème est de savoir si le contenu de ces 31 feuilles serviront pour d'autres calculs dans d'autres feuilles.
Si ce n'est pas le cas, le plus rapide est de rafraichir ces feuilles lorsqu'on les sélectionne. C'est le plus simple et le moins lourd en termes de temps, avec une macro Worksheet_Activate.
Cependant comme elles ne sont actualisées que lorsqu'elles sont sélectionnées, leurs données ne seront pas à jour si vous aviez une autre feuille qui utilisent ces données. ( sauf si à ce moment vous réactualisez chaque feuille )
Par ex dans chaque feuille :
VB:
Sub Worksheet_Activate()
Application.ScreenUpdating = False
DL = Cells(Cells.Rows.Count, "A").End(xlUp).Row
DC = Cells(1, Columns.Count).End(xlToLeft).Column
Formule = "=INDEX(Feuil1!B$1:L$7;JOURSEM($A1;2);COLONNE()-1)" ' Formule à mettre à jour
Range(Cells(1, "B"), Cells(DL, DC)).FormulaLocal = Formule
Range(Cells(1, "B"), Cells(DL, DC)) = Range(Cells(1, "B"), Cells(DL, DC)).Value
End Sub
Bonjour Halecs,
Le problème est de savoir si le contenu de ces 31 feuilles serviront pour d'autres calculs dans d'autres feuilles.
Si ce n'est pas le cas, le plus rapide est de rafraichir ces feuilles lorsqu'on les sélectionne. C'est le plus simple et le moins lourd en termes de temps, avec une macro Worksheet_Activate.
Cependant comme elles ne sont actualisées que lorsqu'elles sont sélectionnées, leurs données ne seront pas à jour si vous aviez une autre feuille qui utilisent ces données. ( sauf si à ce moment vous réactualisez chaque feuille )
Par ex dans chaque feuille :
VB:
Sub Worksheet_Activate()
Application.ScreenUpdating = False
DL = Cells(Cells.Rows.Count, "A").End(xlUp).Row
DC = Cells(1, Columns.Count).End(xlToLeft).Column
Formule = "=INDEX(Feuil1!B$1:L$7;JOURSEM($A1;2);COLONNE()-1)" ' Formule à mettre à jour
Range(Cells(1, "B"), Cells(DL, DC)).FormulaLocal = Formule
Range(Cells(1, "B"), Cells(DL, DC)) = Range(Cells(1, "B"), Cells(DL, DC)).Value
End Sub
Re,
Le but quand on sélectionne une feuille est de faire exactement ce que vous faites en formules. Mais ensuite un copier coller valeurs permet de ne pas alourdir le fichier ni de le ralentir.
A adapter suivant vos besoins, evidemment.
Bonjour Halecs,
Le problème est de savoir si le contenu de ces 31 feuilles serviront pour d'autres calculs dans d'autres feuilles.
Si ce n'est pas le cas, le plus rapide est de rafraichir ces feuilles lorsqu'on les sélectionne. C'est le plus simple et le moins lourd en termes de temps, avec une macro Worksheet_Activate.
Cependant comme elles ne sont actualisées que lorsqu'elles sont sélectionnées, leurs données ne seront pas à jour si vous aviez une autre feuille qui utilisent ces données. ( sauf si à ce moment vous réactualisez chaque feuille )
Par ex dans chaque feuille :
VB:
Sub Worksheet_Activate()
Application.ScreenUpdating = False
DL = Cells(Cells.Rows.Count, "A").End(xlUp).Row
DC = Cells(1, Columns.Count).End(xlToLeft).Column
Formule = "=INDEX(Feuil1!B$1:L$7;JOURSEM($A1;2);COLONNE()-1)" ' Formule à mettre à jour
Range(Cells(1, "B"), Cells(DL, DC)).FormulaLocal = Formule
Range(Cells(1, "B"), Cells(DL, DC)) = Range(Cells(1, "B"), Cells(DL, DC)).Value
End Sub
Re,
Le but quand on sélectionne une feuille est de faire exactement ce que vous faites en formules. Mais ensuite un copier coller valeurs permet de ne pas alourdir le fichier ni de le ralentir.
A adapter suivant vos besoins, evidemment.
Ha... en fait, dans le fichier final, je vais avoir 12 feuilles correspondant aux 12 mois de l'année. L'idée est de propager une semaine type (feuil1) dans toutes les autres
Par ex, dans la PJ, lorsque vous sélectionnez une feuille mensuelle alors celle ci est mise à jour comme avec vos propres calculs, mais se termine par un copier coller valeurs.
Par ex, dans la PJ, lorsque vous sélectionnez une feuille mensuelle alors celle ci est mise à jour comme avec vos propres calculs, mais se termine par un copier coller valeurs.
Par ex, dans la PJ, lorsque vous sélectionnez une feuille mensuelle alors celle ci est mise à jour comme avec vos propres calculs, mais se termine par un copier coller valeurs.
En fait, cette solution ne s'adapte pas vraiment à ce que je souhaite faire. En gros, je rentre des données dans la semaine type, et la macro les recopie sur les 12 mois de l'année.
Alors votre demande initiale était trop flou.
Un essai en PJ avec :
VB:
Sub Propager()
Application.ScreenUpdating = False
For Each F In Worksheets
If F.Name <> "Entete" Then
With Sheets(F.Name)
DL = .Cells(Cells.Rows.Count, "A").End(xlUp).Row
DC = .Cells(1, Columns.Count).End(xlToLeft).Column
.[B1:K32].ClearContents
Formule = "=INDEX(Entete!B$1:L$7;JOURSEM($A1;2);COLONNE()-1)" ' Formule à mettre à jour
.Range(.Cells(1, "B"), .Cells(DL, DC)).FormulaLocal = Formule
.Range(.Cells(1, "B"), .Cells(DL, DC)) = .Range(.Cells(1, "B"), .Cells(DL, DC)).Value
End With
End If
Next F
End Sub
La macro, par appui sur le bouton, actualise toutes les pages, exceptée Entete.
Alors votre demande initiale était trop flou.
Un essai en PJ avec :
VB:
Sub Propager()
Application.ScreenUpdating = False
For Each F In Worksheets
If F.Name <> "Entete" Then
With Sheets(F.Name)
DL = .Cells(Cells.Rows.Count, "A").End(xlUp).Row
DC = .Cells(1, Columns.Count).End(xlToLeft).Column
.[B1:K32].ClearContents
Formule = "=INDEX(Entete!B$1:L$7;JOURSEM($A1;2);COLONNE()-1)" ' Formule à mettre à jour
.Range(.Cells(1, "B"), .Cells(DL, DC)).FormulaLocal = Formule
.Range(.Cells(1, "B"), .Cells(DL, DC)) = .Range(.Cells(1, "B"), .Cells(DL, DC)).Value
End With
End If
Next F
End Sub
La macro, par appui sur le bouton, actualise toutes les pages, exceptée Entete.
En fait, cela fonctionne.... mais, si j'efface la plage de cellule B1:K1 et que je relance la macro, cela donne ce que je vous ai montré sur la capture d'écran....
B1:K1 de quelle feuille ?
J'ai fait les tests en supprimant B1:K1 sur chaque feuille, et je ne reproduit pas votre phénomène.
Peut être qu'avec un PJ "vraiment" représentative, on éviterai les allers retours.
B1:K1 de quelle feuille ?
J'ai fait les tests en supprimant B1:K1 sur chaque feuille, et je ne reproduit pas votre phénomène.
Peut être qu'avec un PJ "vraiment" représentative, on éviterai les allers retours.