XL 2016 Propagation de données

halecs93

XLDnaute Impliqué
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.

Je cherche une "solution" en vba.

Si quelqu'un a une idée. Grand merci.
 

Pièces jointes

  • PROPAGER DONNEES.xlsx
    13 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 
Dernière édition:

halecs93

XLDnaute Impliqué
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,

En fait, Je veux juste calculer les données une fois. Ensuite, aucun autre calcul ne sera fait sur celles ci.

Je regarde votre formule et reviens.

Merci
 

halecs93

XLDnaute Impliqué
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
Du coup, je n'ai pas bien saisi votre propos... :( :(
 

halecs93

XLDnaute Impliqué
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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
'idée est de propager une semaine type (feuil1) dans toutes les autres
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.
 

Pièces jointes

  • PROPAGER DONNEES (V2).xlsm
    23.6 KB · Affichages: 2

halecs93

XLDnaute Impliqué
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.
j'ai essayé de propager.... mais voilà ce que j'obtiens (en image)
1699005958834.png
 

halecs93

XLDnaute Impliqué

halecs93

XLDnaute Impliqué
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. :)
Je viens d'effacer, manuellementbB1:K31 de la feuille Octobre. Je laisse l'apparence de la feuille telle quelle (les dates ont même été supprimées...)
 

Pièces jointes

  • PROPAGER DONNEES (V2) après avoir effacé.xlsm
    23.8 KB · Affichages: 1

Discussions similaires

Réponses
24
Affichages
413

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin