Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Somme cellules sélectionnées VBA

BlackShift

XLDnaute Nouveau
Bonjour,

J'aimerais ajouter une fonction à la barre d'état d'excel pour afficher un total en heure minutes, à partir d'une plage de donnée en minute le tout sur une plage sélectionner. Simplement : il s'agit de la même fonction somme présente par défaut dans la barre d'état d'excel, qui me retourne donc actuellement une somme de minutes sur la plage sélectionnée, à laquelle il faut ajouter une fonction de conversion en heure minute. J'ai commencé par essayé de faire la somme de la plage sélectionnée :

Private Sub WorkSheet_SelectionChange(ByVal Target As Range)

On Error Resume Next

X = Application.WorksheetFunction.Sum(Selection)

Application.StatusBar = "Somme = " & X

End Sub


Le problème est que j'utilise des filtres, et il faut que je limite la somme aux cellules visibles. J'ai essayé :


Private Sub WorkSheet_SelectionChange(ByVal Target As Range)

On Error Resume Next

X = Application.WorksheetFunction.Sum(Selection.SpecialCells(xlCellTypeVisible))

Application.StatusBar = "Somme = " & X

End Sub
Mais cela ne marche pas...

En ce qui concerne la conversion en heure minute, je pense pouvoir utiliser la fonction TimeSerial(0, X, 0).

Merci pour votre aide !
 

Iznogood1

XLDnaute Impliqué
Bonjour,

Code:
Option Explicit

Sub test()
  Dim r As Range
  Dim result As Double
  Dim heures As Integer
  Dim minutes As Integer

  On Error Resume Next

  For Each r In Selection
  If Not r.EntireRow.Hidden And Not r.EntireColumn.Hidden Then result = result + r.Value
  Next r

  On Error GoTo 0

  heures = CInt(result) * 24
  minutes = result - heures
  MsgBox heures & ":" & Format(minutes, "mm:ss")
End Sub

Il semblerait qu'on ne puisse pas utiliser Format(result, "[h]:mm:ss")
 

BlackShift

XLDnaute Nouveau
Merci de ton aide, voilà ce qui a marché comme je le voulais:

Private Sub WorkSheet_SelectionChange(ByVal Target As Range)

On Error Resume Next

Dim r As Range
Dim result As Double
Dim heures As Integer
Dim minutes As Integer

On Error Resume Next

For Each r In Selection
If Not r.EntireRow.Hidden And Not r.EntireColumn.Hidden Then result = result + r.Value
Next r

On Error GoTo 0
heures = Int(result / 60)
minutes = result - heures * 60

Application.StatusBar = "Temps: " & heures & ":" & minutes

End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…