Microsoft 365 Aide VBA somme suivant couleur Police

XaOE33

XLDnaute Nouveau
Bonjour à toutes et tous,

Je sollicite une nouvelle fois votre aide car je n'y connais rien en programmation VBA.
J'ai créé un tableau Excel avec plusieurs onglets. Chacun des ces onglets représente une catégorie de dépenses.
A la fin de chaque ligne j'aimerai une formule qui me calcule automatiquement la colonne "payé" que je matérialise avec une police en coloris rouge.
Ensuite je pourrai faire calculer à Excel la colonne "En attente" en prenant le Total - le Payé.

J'espère que mes explications sont assez claires.

Mais plutôt que de longs discours, le fichier me parait être assez parlant à lui tout seul.

Merci une nouvelle fois de votre précieuse aide ;-)
Prenez toutes et tous bien soin de vous
 

Pièces jointes

  • SP_Suivi_Charges_Fixes.xlsx
    109.8 KB · Affichages: 7
Solution
Oups! Un petit souci car le changement de couleur d'une cellule ne provoque pas de recalcul. Ce que j'avais oublié.
Donc Application.Volatile ne sert à rien dans cette configuration.

Une solution : mettre dans chaque feuille un Recalcul si selection cellule :
VB:
Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("C33:L66")) Is Nothing Then
          Calculate
    End If
End Sub
Mais même là, la mise à jour ne se fait pas sur le changement de couleur mais sur la sélection d'une cellule.
En clair : On choisit une cellule, on la met en rouge. Rien ne se passe.
On sélectionne une autre cellule et tout se recalcule.
Pas génial mais je n'ai pas d'autre solution à vous proposer. A voir en...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir XaOE,
En PJ je vous propose cette simple fonction perso :
VB:
Function Payé(Plage)
For Each c In Plage
    If c.Font.Color = vbRed Then Payé = Payé + c
Next
End Function
La syntaxe est : =Payé(C33:L33) ( voir ex en P33 )
 

Pièces jointes

  • SP_Suivi_Charges_Fixes.xlsm
    109.9 KB · Affichages: 6

XaOE33

XLDnaute Nouveau
Tout simplement parfait ;-)
Sincèrement MERCI ;-)

Au
Bonsoir XaOE,
En PJ je vous propose cette simple fonction perso :
VB:
Function Payé(Plage)
For Each c In Plage
    If c.Font.Color = vbRed Then Payé = Payé + c
Next
End Function
La syntaxe est : =Payé(C33:L33) ( voir ex en P33 )

Existe t'il une possibilité pour quela formule s'actualise en temps réel ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Oui, mais dans ce cas tout sera recalculé à chaque recalcul de la feuille;
C'est un choix. A voir si ça ne ralentit pas trop XL. Tout dépend du nombre de formules présentes dans votre feuille.
VB:
Function Payé(Plage)
Application.Volatile
For Each c In Plage
    If c.Font.Color = vbRed Then Payé = Payé + c
Next
End Function
 

XaOE33

XLDnaute Nouveau
Bonjour,
Oui, mais dans ce cas tout sera recalculé à chaque recalcul de la feuille;
C'est un choix. A voir si ça ne ralentit pas trop XL. Tout dépend du nombre de formules présentes dans votre feuille.
VB:
Function Payé(Plage)
Application.Volatile
For Each c In Plage
    If c.Font.Color = vbRed Then Payé = Payé + c
Next
End Function


Désolé, mais aurais-tu la possibilité de m'actualiser "le code" en ce sens ?
Je suis archi nul en VBA ;-(
 

Pièces jointes

  • SP_Suivi_Charges_Fixes (1).xlsm
    116.1 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oups! Un petit souci car le changement de couleur d'une cellule ne provoque pas de recalcul. Ce que j'avais oublié.
Donc Application.Volatile ne sert à rien dans cette configuration.

Une solution : mettre dans chaque feuille un Recalcul si selection cellule :
VB:
Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("C33:L66")) Is Nothing Then
          Calculate
    End If
End Sub
Mais même là, la mise à jour ne se fait pas sur le changement de couleur mais sur la sélection d'une cellule.
En clair : On choisit une cellule, on la met en rouge. Rien ne se passe.
On sélectionne une autre cellule et tout se recalcule.
Pas génial mais je n'ai pas d'autre solution à vous proposer. A voir en PJ si ça vous va.

Sinon il faut trouver une autre approche avec un bouton Payé par ex. Un clic sur ce bouton met la cellule en rouge et fait le recalcul. Ou encore utiliser une touche pour cette fonction.
 

Pièces jointes

  • SP_Suivi_Charges_Fixes (2).xlsm
    111.7 KB · Affichages: 3

XaOE33

XLDnaute Nouveau
Oups! Un petit souci car le changement de couleur d'une cellule ne provoque pas de recalcul. Ce que j'avais oublié.
Donc Application.Volatile ne sert à rien dans cette configuration.

Une solution : mettre dans chaque feuille un Recalcul si selection cellule :
VB:
Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("C33:L66")) Is Nothing Then
          Calculate
    End If
End Sub
Mais même là, la mise à jour ne se fait pas sur le changement de couleur mais sur la sélection d'une cellule.
En clair : On choisit une cellule, on la met en rouge. Rien ne se passe.
On sélectionne une autre cellule et tout se recalcule.
Pas génial mais je n'ai pas d'autre solution à vous proposer. A voir en PJ si ça vous va.

Sinon il faut trouver une autre approche avec un bouton Payé par ex. Un clic sur ce bouton met la cellule en rouge et fait le recalcul. Ou encore utiliser une touche pour cette fonction.

Votre solution me convient parfaitement pour l'utilisation que j'en fais ;-)
Un GRAND MERCI à vous et bonne journée
 

Statistiques des forums

Discussions
312 203
Messages
2 086 195
Membres
103 153
dernier inscrit
SamirN