Somme conditionnelle sous VBA

downloads

XLDnaute Nouveau
Bonjour,

J'aurai besoin d'aide pour faire une somme conditionnelle sous vba.
J'ai un planning des taches qui sont attitrées à des personnes pour chaque jours, qui se presente de la manière suivante :

Jour1 Jour2 Jour3
Personne1 Tache1 Tache2 Tache1
Heure supp/Jours
Heure1 Heure2 Heure3
Personne2 Tache4 Tache2 Tache1
Heure supp/Jours
Heure1 Heure2 Heure3


Je voudrais faire un tableau annexe qui regroupe le nom de la tache et le nombre d'heures par mois passées dessus. Pb=> ma liste de personne peut augmenter.
Je ne sais pas du tout par ou commencer car je débute à peine dans VBA. Pour cela je fais appel à votre solidarité. Je vous remercie d'avance !!
 

Pièces jointes

  • Classeur1.xls
    34 KB · Affichages: 122
  • Classeur1.xls
    34 KB · Affichages: 125
  • Classeur1.xls
    34 KB · Affichages: 144

mromain

XLDnaute Barbatruc
Re : Somme conditionnelle sous VBA

Bonjour downloads,


Tu trouvera en PJ un essai avec des formules.
Sinon, voici une macro à appliquer sur le fichier que tu nous as fournis.
VB:
Option Explicit


Public Sub BilanTaches()
'déclaration des variables
Dim laTache As Range, totalTache As Double

    'se positionner sur la première tache (AH4)
    Set laTache = ThisWorkbook.Sheets("Janvier").Range("AH4")
    
    'boucler sur toutes les taches
    While laTache.Text <> ""
        'récupérer le total de la tache
        totalTache = SommerHeures(laTache)
        'écrire le résultat une case en dessous
        laTache.Offset(1, 0) = totalTache
        'passer à la tache suivant
        Set laTache = laTache.Offset(0, 1)
    Wend
End Sub



Private Function SommerHeures(tache As Range) As Double
'déclaration des variables
Dim laCell As Range, zoneRecherche As Range, memAdressePremCell As String, motRecherche As String

    'initialiser les variables
    motRecherche = tache.Text               'on recherche la tache
    Set zoneRecherche = ThisWorkbook.Sheets(tache.Parent.Name).Range("B:AF")   'dans les colonnes B à AF de la feuille traitée
    
    'rechercher avec la méthode Find la première cellule contenant le mot recherché dans la feuille active
    '   xlWhole signifie qu'on recherche la totalité du contenu de la cellule (texte exact)
    '   le remplacer xlPart pour rechercher une partie du contenu de la cellule
    Set laCell = zoneRecherche.Find(motRecherche, , xlValues, xlWhole)
    
    'si une cellule a été trouvé
    If Not laCell Is Nothing Then
        'mémoriser l'adresse de cette première cellule trouvée
        memAdressePremCell = laCell.Address
        
        'boucler sur toutes les cellules contenant le texte recherché
        Do
            'traiter la cellule trouvée
            'ici, on va rajouter au total la valeur de la cellule située 2 cases en dessous
            SommerHeures = SommerHeures + laCell.Offset(2, 0).Value
            
            'trouver la cellule suivante contenant le texte recherché
            Set laCell = zoneRecherche.FindNext(laCell)
            
        'boucler jusqu'à qu'on revienne sur la première cellule trouvée
        Loop Until laCell.Address = memAdressePremCell
    End If
End Function
a+
 

Pièces jointes

  • Classeur1.zip
    7.8 KB · Affichages: 78
  • Classeur1.zip
    7.8 KB · Affichages: 81
  • Classeur1.zip
    7.8 KB · Affichages: 94
Dernière édition:

downloads

XLDnaute Nouveau
Re : Somme conditionnelle sous VBA

Merci bcp pour cette aide precieuse et pour la rapidité de ta reponse
Je rencontre cependant un petit problème lorsque je rajoute une personne, le tableau ne veut pas m'indiquer les heures travaillées ???
Je ne comprend pas l'erreur, pourrai tu m'aider encore un peu ? Merci d'avance :D
 

mromain

XLDnaute Barbatruc
Re : Somme conditionnelle sous VBA

re bonjour,

Essaye en modifiant cette formule en AJ3 (à tirer ensuite vers la droite et vers le bas) :
Code:
=SI(OU($AI3="";AJ$1="");"";SOMMEPROD((DECALER($B$1:$AF$1;EQUIV($AI3;$A$1:$A$100;0)-1;)=AJ$1)*DECALER($B$1:$AF$1;EQUIV($AI3;$A$1:$A$100;0)+1;)))
cette formule prendra en compte les personnes saisies jusqu'à la ligne 100.

a+
 
Dernière édition:

downloads

XLDnaute Nouveau
Re : Somme conditionnelle sous VBA

Ca ne marche toujours pas ....
Je n'ai plus le message d'erreur par contre à la place j'ai des 0 ???

Un grand merci encore une fois, je suis tres touchée de cette aide car je commencais à m'arracher les cheveux a chercher toute seule comment faire !
 

mromain

XLDnaute Barbatruc
Re : Somme conditionnelle sous VBA

Re,

Je te renvoi le fichier avec la formule modifiée. Chez moi, ça à l'air de marcher..

a+
 

Pièces jointes

  • Classeur1.zip
    6.9 KB · Affichages: 120
  • Classeur1.zip
    6.9 KB · Affichages: 124
  • Classeur1.zip
    6.9 KB · Affichages: 117

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 821
Membres
104 677
dernier inscrit
soufiane12