Aide pour formule avec conditions sur plusieurs feuilles

Je te remercie de t’être intéressé à ma proposition l’impression de ne pas avoir travaillé pour rien c’est rassurant
1er/ A quoi sert le bouton Actualisation somme en S3 (AAAAAApourformule) ?
Ce bouton sachant normalement que par simple réactualisation des cellules B2/B3/B4 le traitement ce déclenche sert de roue de secours si celui-ci ne se passait pas correctement pour une raison X
Donc de pouvoir à la main le déclencher c’est une sécurité

« Dans mon fichier Version pre-final TEST. Je vais créer une feuille BASE ( pour faire des copies et les renommer à chaque fois). Dans le temps des nouvelles feuilles seront créé régulièrement sur ce modèle base. »
Attention dans ma version il faudra rajouter dans cette feuille BASE l’automatisme (quelques lignes de codes dans le VBA de la feuille) qui par recopie se mettra dans chaque nouvelle feuille créée c’est indispensable

« en D25 Additionner cellule E22(au lieu de B4) des feuilles ou la cellule G2(au lieu de B3) est égal à ma cellule B5(au lieu de B2)
en D26 Additionner cellule F22(au lieu de B4) des feuilles ou la cellule G2(au lieu de B3) est égal à ma cellule B5(au lieu de B2)
en D27 Additionner cellule G22(au lieu de B4) des feuilles ou la cellule G2(au lieu de B3) est égal à ma cellule B5(au lieu de B2)
en D28 Additionner cellule H22(au lieu de B4) des feuilles ou la cellule G2(au lieu de B3) est égal à ma cellule B5(au lieu de B2)
en D29 Additionner cellule I22(au lieu de B4) des feuilles ou la cellule G2(au lieu de B3) est égal à ma cellule B5(au lieu de B2) »

Il suffira d’adapter ma procédure pour inclure ces nouvelles sommes avec leur nouvelles coordonnées

Mon code actuel :

For h = 1 To Sheets.Count
If Sheets(h).Range(« A10 ») = « R?sultat » And Sheets(h).Range(« B2 ») <> «  » Then
nom = UCase(Sheets(h).Range(« B2 »))
somme = 0
For i = 1 To Sheets.Count
If UCase(Sheets(i).Range(« B3 »)) = nom Then
somme = somme + Sheets(i).Range(« B4 »)
End If
Next
Sheets(h).Range(« B10 ») = somme
End If
Next

Qui deviendrait :

For h = 1 To Sheets.Count
If Sheets(h).Range(« A10 ») = « Résultat » And Sheets(h).Range(« B5 ») <> «  » Then
nom = UCase(Sheets(h).Range(« B5 »))
somme1 = 0
somme2 = 0
somme3 = 0
somme5 = 0
For i = 1 To Sheets.Count
If UCase(Sheets(i).Range(« G2 »)) = nom Then
somme1 = somme1 + Sheets(i).Range(« E22 »)
somme2 = somme2 + Sheets(i).Range(« F22 »)
somme3 = somme3 + Sheets(i).Range(« G22 »)
somme4 = somme4 + Sheets(i).Range(« H22 »)
somme5 = somme5 + Sheets(i).Range(« I22 »)
End If
Next
Sheets(h).Range(« D25 ») = somme1
Sheets(h).Range(« D26 ») = somme2
Sheets(h).Range(« D27 ») = somme3
Sheets(h).Range(« D28 ») = somme4
Sheets(h).Range(« D29 ») = somme5
End If
Next

A voir juste l’adaptation de cette ligne :
If Sheets(h).Range(« A10 ») = « Résultat » And Sheets(h).Range(« B5 ») <> «  » Then
Dans ta première version je m’assurais que le mot « Résultat » était en cellule A10 et que la cellule du nom était renseigné en B2 donc ici en B5

Pas plus compliqué et cela fonctionnera à l’identique de ce que tu as pu constater

A toi de choisir maintenant

Re,

Oui, mais il faut créer le nom.

Mais comme je te l’ai dis dans un précédent post la solution VBA me parait plus adaptée à ta problématique.
Bonne continuation.
Cordialement.

FFO tu es un génie !!

J’ai réussi à mettre se code sur mon nouveau fichier, cependant je suis obligé d’appuyer sur le bouton Actualisation Somme . Sinon mon tableau ne se met pas à jour si je modifier certaine valeur (E22) .
Une petite astuce pour que ce soit automatisé comme sur ta première version que tu m’as transmis ?

Merci encore

Merci pour ton retour
Sincèrement si tu arrives a faire vivre cette procédure au grés de tes besoins je pense que sa gestion sera beaucoup plus simple que celle de l’option formule
De plus tous les onglets seront exempt de celles-ci et donc pleinement disponible pour le reste donc plus facile à faire vivre
Donc côté macro tu as fais des merveilles c’est une bonne chose
Je garderai moi le bouton en secours
Pour donc l’automatisation il faut ramener dans chaque onglet qui doit en bénéficier une autre petite procédure dite évènementielle
Dans le VBA de chaque onglet concerné clique droit sur le nom de l’onglet choisir l’item « Visualiser le code » recopier ces lignes de code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range(« B2 »).Address Or Target.Address = Range(« B3 »).Address Or Target.Address = Range(« B4 »).Address Then
Run (« Traitement »)
End If
End Sub

A adpter cette ligne en fonction de toutes les cellules qui doivent déclencher le traitement de mise à jour des sommes :

If Target.Address = Range(« B2 »).Address Or Target.Address = Range(« B3 »).Address Or Target.Address = Range(« B4 »).Address Then

Ici Range(« B2 »)/Range(« B3 »)/Range(« B4 ») correspondant sur ton tout premier fichier aux cellules des noms B2 et B3 et à celle du chiffre de la somme B4

Tu peux mettre plus de cellules si tu le souhaite par exemple si tu veux rajouter la cellule B10 tu doit le faire ainsi :

If Target.Address = Range(« B2 »).Address Or Target.Address = Range(« B3 »).Address Or Target.Address = Range(« B4 »).Address Or Target.Address = Range(« B10 »).Address Then

Ici j’appelle la macro des sommes à réalise :

Run (« Traitement »)

A adapter si tu changes son nom

Je pense que tu devrais t’en débrouiller

Si soucis n’hésites pas à me le dire

Donnes moi des nouvelles

Petite précision ne pas oublier d enrichir l onglet modèle de ces lignes dans son VBA :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range(« B2 »).Address Or Target.Address = Range(« B3 »).Address Or Target.Address = Range(« B4 »).Address Then
Run (« Traitement »)
End If
End Sub

Ainsi chaque onglet créé par sa copie en bénéficiera

Re,

J’ai recopié ce code pour le fichier de BASE que j’ai ensuite dupliqué. Le code apparaît bien pour chaque feuille dupliqué mais rien d’automatisé… Peut être je me suis trompé dans le code je le partage :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range(« B5 »).Address Or Target.Address = Range(« G2 »).Address Or Target.Address = Range(« J14 »).Address Or Target.Address = Range(« E12 »).Address Or Target.Address = Range(« I22 »).Address Or Target.Address = Range(« H22 »).Address Or Target.Address = Range(« G22 »).Address Or Target.Address = Range(« F22 »).Address Or Target.Address = Range(« E22 »).Address Then
Run (« Traitement »)
End If
End Sub

B2 est devenu B5
B3 est devenu G2
B4 est devenu E22 puis F22 puis G22 puis H22 puis I22 puis E12 et J14

Avec le code mentionné ci dessus rien n’est automatisé, obligé de passer par le bouton actualisation des sommes.

Voici également mon code VBA que je partage et qui lui fonctionne parfaitement :

Sub Traitement()

’ Traitement Macro

For h = 1 To Sheets.Count
If Sheets(h).Range(« M1 ») = « Résultat » And Sheets(h).Range(« B5 ») <> «  » Then
nom = UCase(Sheets(h).Range(« B5 »))
somme1 = 0
somme2 = 0
somme3 = 0
somme4 = 0
somme5 = 0
somme6 = 0
somme7 = 0
For i = 1 To Sheets.Count
If UCase(Sheets(i).Range(« G2 »)) = nom Then
somme1 = somme1 + Sheets(i).Range(« E22 »)
somme2 = somme2 + Sheets(i).Range(« F22 »)
somme3 = somme3 + Sheets(i).Range(« G22 »)
somme4 = somme4 + Sheets(i).Range(« H22 »)
somme5 = somme5 + Sheets(i).Range(« I22 »)
somme6 = somme6 + Sheets(i).Range(« E12 »)
somme7 = somme7 + Sheets(i).Range(« J14 »)
End If
Next
Sheets(h).Range(« D25 ») = somme1
Sheets(h).Range(« D26 ») = somme2
Sheets(h).Range(« D27 ») = somme3
Sheets(h).Range(« D28 ») = somme4
Sheets(h).Range(« D29 ») = somme5
Sheets(h).Range(« P11 ») = somme6
Sheets(h).Range(« P13 ») = somme7
End If
Next

End Sub

Merci une nouvelle fois de ton aide

Je viens de le tester avec ces lignes que tu me donnes la Macro « Traitement » se déclenche très bien chez moi

L’as tu bien mis au bon endroit dans le VBA de la feuille ? (clique droit sur son nom et Visualiser le code)

Le bouton manuelle fonctionne t’il ?

Déjà essais dans l’onglet « BASE » après avoir vérifié la présence du code dans son VBA en mettant une donnée en cellule B5
Regardes si les sommes ont été mise à jour

Puis fais un essai dans une feuille créée après avoir vérifié la présence du code dans son VBA en mettant une donnée en cellule B5
Regardes si les sommes ont été mise à jour

Si tout ceci est OK dans une macro créée pour la circonstance que tu nommes « Automatisation » mets cette ligne de code :

Application.EnableEvents = True

Tu l’exécutes

Puis tu ressayes l’automatisation

En dernier recours envoi moi ton fichier que je regarde

Bonjour FFO,

Le code VBA fonctionne parfaitement, mais je suis obligé de cliquer sur le bouton actualisation pour que toutes les sommes s’actualisent.
Je souhaiterais automatiser tout ca comme c’était le cas dans le premier fichier que tu m’as envoyé.

Je te joins mon fichier composé pour l’exemple de 4 feuilles ( BASE/ Jerome/Jules/Pierre)
Pour vérifier l’automatisation des cellules (D25/D26/D27/D28/D29 et P11/P13)

Il faut modifier les valeurs en P9/P10/L16 qui agissent indirectement sur les cellules
E22/F22/G22/H22/I22/J14/E12 qui sont très importante et que j’attente qu’elles se mettent à jours automatiquement…

Pour jouer sur ces valeurs et vérifier que le code fonctionne:
Modifier P9/P10/L16 sur les feuilles Pierre et Jerome et vérifier sur la feuille Jules que les valeurs ont été mise à jour ( actuellement fonctionne uniquement après appuis sur le bouton actualisation des sommes)

C’est peut être un peu fouilli mais j’ai essayé d’être le plus claire possible.
Pour résumer, il faudrait que ce qui se fait actuellement se fasse de façon automatique ( à mettre en place sur la feuille BASE qui sera dupliqué)

D’avance je te remercie encore une fois pour ton travail si professionnel.

VERSION AVEC CODE VBA CREE.xlsm (53,4 Ko)

Ps j’ai pas compris ou et comment créér cette ligne de code :

Application.EnableEvents = True

A la suite de la macro traitement mets ceci

Sub Automatisation ()
Application.EnableEvents = True
End Sub

Puis tu vas chercher cette macro Automatisation que tu executes

Du coup mon code devient :
Sub Traitement()

’ Traitement Macro

For h = 1 To Sheets.Count
If Sheets(h).Range(« M1 ») = « Résultat » And Sheets(h).Range(« B5 ») <> «  » Then
nom = UCase(Sheets(h).Range(« B5 »))
somme1 = 0
somme2 = 0
somme3 = 0
somme4 = 0
somme5 = 0
somme6 = 0
somme7 = 0
For i = 1 To Sheets.Count
If UCase(Sheets(i).Range(« G2 »)) = nom Then
somme1 = somme1 + Sheets(i).Range(« E22 »)
somme2 = somme2 + Sheets(i).Range(« F22 »)
somme3 = somme3 + Sheets(i).Range(« G22 »)
somme4 = somme4 + Sheets(i).Range(« H22 »)
somme5 = somme5 + Sheets(i).Range(« I22 »)
somme6 = somme6 + Sheets(i).Range(« E12 »)
somme7 = somme7 + Sheets(i).Range(« J14 »)
End If
Next
Sheets(h).Range(« D25 ») = somme1
Sheets(h).Range(« D26 ») = somme2
Sheets(h).Range(« D27 ») = somme3
Sheets(h).Range(« D28 ») = somme4
Sheets(h).Range(« D29 ») = somme5
Sheets(h).Range(« P11 ») = somme6
Sheets(h).Range(« P13 ») = somme7
End If
Next

End Sub
Sub Automatisation()
Application.EnableEvents = True
End Sub

Une fois que j’ai fait ca comment j’execute cette macro automatisation ? (j’ai cliqué sur actualisation somme)
L’actualisation ne se fait toujours pas en temps réel…

Je viens de corriger ton dernier fichier transmis
Tu n’as pas mis dans la procédure évènementielle les bonnes cellules qui doivent déclencher le traitement des mise à jour des sommes
Les cellules qui doivent déclencher ce traitement sont selon tes directives :

« Pour jouer sur ces valeurs et vérifier que le code fonctionne:
Modifier P9/P10/L16 sur les feuilles Pierre et Jerome et vérifier sur la feuille Jules que les valeurs ont été mise à jour ( actuellement fonctionne uniquement après appuis sur le bouton actualisation des sommes) »

C’est donc bien tel que tu l’as écrit ci-dessus les cellules P9/P10/L16 qui doivent agirent pour le déclenchement de la procédure
Or dans les lignes du VBA de la feuille nul part elles figurent :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range(« B5 »).Address Or Target.Address = Range(« G2 »).Address Or Target.Address = Range(« J14 »).Address Or Target.Address = Range(« E12 »).Address Or Target.Address = Range(« I22 »).Address Or Target.Address = Range(« H22 »).Address Or Target.Address = Range(« G22 »).Address Or Target.Address = Range(« F22 »).Address Or Target.Address = Range(« E22 »).Address Then

Run (« Traitement »)

End If

End Sub

Donc normal qu’à la modification de l’une d’entre elle le Traitement de la mise à jour des sommes ne s’effectue pas

Je l’ai corrigé ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range(« B5 »).Address Or Target.Address = Range(« P9 »).Address Or Target.Address = Range(« P10 »).Address Or Target.Address = Range(« L16 »).Address Then

Run (« Traitement »)

End If

End Sub

Et la tout roule du feu de dieu

J’ai corrigé toutes les feuilles concernées et j’ai alimenté la feuille Base pour qu’à sa copie l’onglet créé se retrouve avec cette procédure évènementielle

Comment fais tu pour créer ces nouveaux onglets à partir de l’onglet « Base » ?

J’ai rajouté le dernier petit traitement pour réactiver si besoin les fonctions évènementielles
En effet il se peut que pour une raison X elle se désactivent
Il faut dans ce cas les réactiver car l’automatisation en a besoin
J’ai donc rajouter après la procédure « Traitement » celle de l’Automatisation ainsi :
Sub Automatisation()
Application.EnableEvents = True
End Sub
J’ai rajouté en dessous du bouton « Actualisation somme » un bouton « Automatisation » relié dessus

Si l’automatisation ne semble pas fonctionner actives ce nouveau bouton et celle-ci devrait renaitre de ses cendres
Je te rassure c’est très rare mais il faut tout prévoir

Voilà j’espère que cette fois-ci tout est rentré dans l’ordre

Donnes moi des nouvelles

VERSION AVEC CODE VBA CREE.xlsm (54,0 Ko)

Re,
C’est super tout à l’air de fonctionner parfaitement…
Il me reste encore quelques modification à faire et quelques test, mais je pense que tout est ok…

Je vais te demander un dernier service (j’espère ne pas trop abuser)…

Mon classeur portera un nom de mois+année .
Exemple : Mai2020 et le suivant Juin2020 et ainsi de suite…
J’aimerais pouvoir afficher dans une cellule la somme des cellules J14 pour le mois en cours et le mois précédent.
Exemple en Juin2020 je voudrais afficher (en temps réel) en cellule A41(par exemple) le total des cellules J14 de Mai2020 et Juin 2020 ( pour Jerome par exemple)

Est ce que cela est possible?
Je vais préparer mon fichier pour pouvoir te préciser la cellule réel ou je souhaite cette information.

Si tu ne souhaites pas m’aider d’avantages, je comprendrais vu le temps que tu as déja du passer et ailleurs je te remercie une nouvelle fois.

Ravi que cela te satisfasse pleinement
Tu ne m’as pas dis comment tu effectuais la copie de l’onglet Base :

En utilisant la procédure manuelle que je t’ai indiquée ?
En utilisant une procédure par macro ?

Merci de m’en dire plus sur le sujet il en va de la pérennité du fonctionnement des futurs onglets à venir

Pour la gestion des sommes J14 pour un classeur concerné
Cette somme doit elle être actualisée à chaque traitement ou seulement quant la cellule J14 est modifiée ?
Si c’est au passage de chaque traitement je pense que cette prouesse est à ta portée en t’inspirant des lignes de codes pour toutes les sommes
Sinon il faudra réaliser un petit traitement à part
A toi de me dire
Pour récupérer la somme des J14 d’un classeur mois sur un classeur mois +1 on peut le récupérer manuellement dans une cellule adjacente à celle des sommes J14 du nouveau classeur celle du précédent et celle du nouveau seraient l’une à côté de l’autre
Cette récupération peut être automatisée en réalisant pour le nouveau classeur mois + 1 une copie du classeur mois et ainsi pour ce nouveau classeur de tout récupéré et plus particulièrement la somme des J14 de tous les onglets (Onglets Macro bouton somme J14 etc …)
Reste à déplacer pour bien les conserver ces sommes sur une cellule adjacente soit à la main soit par macro avec un bouton avant toute nouvelle utilisation de ce nouveau classeur
La somme de ces sommes du mois précédent et de celui en cours pourrait être effectuée par simple formule sur un 3° cellule adjacente

Voilà ce que je peux te proposer

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.