Calcul de moyennes faisant intervenir les numéros des colonnes

quicktibong

XLDnaute Nouveau
Bonjour,

je suis nouvelle sur ce forum et cela fait à peine quelques semaines que j'utilise le VBA.
Voici donc ce que j'aimerais faire, mais je n'y arrive pas...

Dans un onglet nommé "TM1" j'ai un tableau avec les colonnes suivantes : "Chose1" , "Chose2" , "Chose3" , "Temps".
J'aimerais que mon programme parcoure mon tableau tant que "Chose1" , "Chose2" et "Chose3" de la ligne de départ est identique à "Chose1" , "Chose2" et "Chose3" de la ligne d'en dessous. Une fois qu'il trouve une des choses de différentes, il doit me faire la moyenne des temps de toutes les lignes parcourues et l'inscrire dans la cellule juste à droite de celle contenant le temps de la dernière ligne parcourue.

Pour faire ma moyenne, j'avais imaginé faire la somme des temps et la diviser par la différence entre le numéro de la dernière ligne et le numéro de la première ligne.

Je ne sais pas si c'est bien clair mais je vous mets en dessous le morceau de programme que j'ai écris. Il est bien évidement incomplet et il manque la partie où je dois faire la moyenne mais je ne sais pas trop où la mettre...

En espérant que vous pourrez m'apporter au moins une aide si ce n'est une solution à mon problème.
En tous cas, je vous en remercie par avance.

Code:
Sub Moyenne_des_temps()

    Dim CelluleCourante As Range
    Dim CelluleSuivante As Range
    Dim NumPremièreLigne As String
    Dim NumDernièreLigne As String
    
    Set TM1 = Worksheets("TM1")
    Set CelluleCourante = TM1.Range("H1")
    
    
    'Boucle Tant Que ...
    Do While Not IsEmpty(CelluleCourante) = True
    
        Set CelluleSuivante = CelluleCourante.Offset(1, 0)
        'Set NumPremièreLigne = CelluleCourante.Row
        
        If CelluleSuivante.Value = CelluleCourante.Value Then
        
            If LignesIdentiques(CelluleCourante, CelluleSuivante) = True Then
            
            Set CelluleCourante = CelluleSuivante
            
            
            End If
            
        End If
        
        Set CelluleCourante = CelluleSuivante

    Loop

End Sub



Function LignesIdentiques(CellCourante As Range, CellSuivante As Range) As Boolean

    If CellCourante.Offset(0, 1).Value <> CellSuivante.Offset(0, 1).Value Then
        LignesIdentiques = False
    ElseIf CellCourante.Offset(0, 2).Value <> CellSuivante.Offset(0, 2).Value Then
        LignesIdentiques = False
    Else
        LignesIdentiques = True
    End If
    
End Function
 

Theze

XLDnaute Occasionnel
Re : Calcul de moyennes faisant intervenir les numéros des colonnes

Bonjour,

Regarde si ça convient et adapte mais avant, fait une copie de ta feuille au cas où je n'ai pas pris en compte les bonnes colonnes (de H à L, L pour inscrire les moyennes) :
Code:
Sub Moyenne_des_temps()
    
    Dim Plage As Range
    Dim Cel As Range
    Dim I As Long
    Dim Total As Double
    
    'défini la plage en colonne H
    With Worksheets("TM1")
 
        Set Plage = .Range(.Cells(1, 8), .Cells(.Rows.Count, 8).End(xlUp))
    
    End With
    
    'parcours la plage
    For Each Cel In Plage
        
        With Cel
            
            'si la cellule en cours est = à la cellule de dessous <-- en colonne H
            'ET que la cellule à droite est = à celle qui lui est dessous <-- en colonne I
            'ET que la cellule à droite est = à celle qui lui est dessous <-- en colonne J
            'totalise les valeurs situées en colonne K et ensuite, divise par le diviseur qui est incrémenté (I)
            If .Value = .Offset(1, 0).Value _
                And .Offset(, 1).Value = .Offset(1, 1).Value _
                And .Offset(, 2).Value = .Offset(1, 2).Value Then
            
                I = I + 1
                Total = Total + .Offset(0, 3).Value
                
            Else
                
                'la condition n'étant plus rempli, récupère la valeur de la colonne K pour l'ajouter
                Total = Total + .Offset(0, 3).Value
                
                'incrémente une dernière fois
                I = I + 1
                
                'inscrit la moyenne en colonne L
                .Offset(, 4) = Total / IIf(I = 0, 1, I)
                
                'réinitialise pour la suite
                Total = 0
                I = 0
                
            End If
            
        End With
        
    Next Cel

End Sub

Hervé.
 

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260