XL 2010 Somme en gras

guggen

XLDnaute Nouveau
Bonjour à tous ! après avoir cherché et testé, je n'arrive pas à mettre une macro somme_gras pour le total des valeurs en gras, en D16 des cellules D4 à D15, ensuite la même chose pour Fevrier, mars, etc... et ceci sur les jours suivants, mardi, mercredi, etc...
sachant que les chiffres en gras correspondent aux sommes encaissées.
J'ai testé la formule suivante :

Function Somme_gras(Plage_donnees As Range)

Dim somme As Double
Dim cellule As Range

somme = 0

For Each cellule In Plage_donnees
If (IsNumeric(cellule.Value) And (cellule.Font.Bold)) Then
somme = somme + cellule.Value
End If
Next cellule

Somme_gras = somme

End Function

Chaque fois, j'ai le message suivant "end sub" attendu.

Voici comment je procède :
je clique sur D16, enregistrer une macro, Macro 1, ce classeur, description : cellule gras, ok
et je colle la formule entre sub Macro() et End sub ce qui donne ceci :

Sub Macro1()
Function Somme_gras(Plage_donnees As Range)

Dim somme As Double
Dim cellule As Range

somme = 0

For Each cellule In Plage_donnees
If (IsNumeric(cellule.Value) And (cellule.Font.Bold)) Then
somme = somme + cellule.Value
End If
Next cellule

Somme_gras = somme

End Function

End Function
là à partir de cet instant je pense que je ne fais pas tout ce qui doit être fait, je ferme la fenêtre et j'arrête le script ? Bon ou pas bon ? et là il me met erreur de compilation End sub attendu ...
Merci de votre aide !
 

Pièces jointes

  • copie Echéancier.xlsx
    105.9 KB · Affichages: 42

Lone-wolf

XLDnaute Barbatruc
Re : Somme en gras

Bonjour guggen et bienvenue sur XLD :)

Il faut enregistrer le fichier en .xlsm. Classeur excel (prenant en charge les macros). Ensuite modifie cette ligne If (IsNumeric(cellule.Value) And (cellule.Font.Bold)) Then Par

If IsNumeric(cellule.Value) And cellule.Font.Bold = True Then
 

Paf

XLDnaute Barbatruc
Re : Somme en gras

Bonjour guggen , Lone-wolf,

la function fonctionne, c'est a priori la mise en place qui ne va pas bien.

la fonction
Code:
Function Somme_gras(Plage_donnees As Range)
 Dim somme As Double
 Dim cellule As Range
 somme = 0
 For Each cellule In Plage_donnees
    If (IsNumeric(cellule.Value) And (cellule.Font.Bold)) Then
        somme = somme + cellule.Value
    End If
 Next cellule
 Somme_gras = somme
End Function

doit être copiée dans un module standard

puis, en D16 : =Somme_gras(D4:D15)

A+
 

grisan29

XLDnaute Accro
Re : Somme en gras

Bonsoir guggen, Paf, lone-wolf

tu ouvre vba part alt +f11 tu vois en haut a gauche la réprésention de l'icône excel et juste a coté un autre bouton avec une flèche verte vers le bas et une petite noire sur sa droite tu clic dessus et tu as un déroulant qui s'ouvre pour te laisser le choix entre la création d'un userform, Module et module de classe, tu clic sur module et voila sur la partie droite qui est devenue blanche et qui est un module standard où tu peux coller le code
 

guggen

XLDnaute Nouveau
Re : Somme en gras

Ok merci, cette fois, ça marche ! Mais est-ce normal que lorsque j'ajoute ou repasse un montant en gras, l'opération ne se produit pas directement, je dois recliquer sur l formule, et là, le montant se rétablit...?
Merci encore une fois !
 

Lone-wolf

XLDnaute Barbatruc
Re : Somme en gras

Bonsoir Paf, Pascal :)

@guggen: je pense que cela est dû à la fonction. Essai comme ceci. Clic-droit sur la feuille, clique sur Visualiser le code et copie le code suivant.

Code:
Const somme As Double = 0
Private Sub Worksheet_Change(ByVal Target As Range)
Dim somme As Double, plage As Range, cel As Range
Application.EnableEvents = False
Application.ScreenUpdating = False
 Set plage = Range("d4:d15")
 For Each cel In plage
        somme = somme + cel.Value
 Next cel
         Range("d16") = somme
If somme > 0 Then
Range("d16").Font.Bold = True
Else
Range("d16").Font.Bold = False
Exit Sub
End If
Application.EnableEvents = True
End Sub
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Somme en gras

Bonjour,

Un changement de format ne déclenche pas d'événement (Change), ta fonction n'est donc pas ré-évaluée.
Tu peux améliorer les choses en ajoutant au début Application.Volatile
Elle sera ré-évaluée à chaque recalcul de la feuille. C'est à dire une validation n'importe où sur la feuille ou par F9.
eric
 

Lone-wolf

XLDnaute Barbatruc
Re : Somme en gras

Bonjour Eric

alors comme ceci

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
With ActiveSheet
If Not Intersect(Target, .Range("d4:d15")) Is Nothing Then
 If IsNumeric(Activecell) And Activecell.Font.Bold = False Then
 Activecell.Font.Bold = True
 .Range("d16") = .Range("d16") + Activecell.Value
 Else
  Activecell.Font.Bold = False
  .Range("d16") = .Range("d16") - Activecell.Value
End If
End If
End With
End Sub
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
196
Réponses
1
Affichages
224

Statistiques des forums

Discussions
312 842
Messages
2 092 732
Membres
105 519
dernier inscrit
faivre-roussel.ivan@orang