XL 2016 Propagation de données

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour