Bonjour,
J'ai un petit problème avec mon bouton.
Voici son code :
Le souci, c'est que les Sub EcartMoyenM et EcartMoyenS font des calculs à partir des autres colonnes.
Ces Sub font les calculs si les cellules sont non-vides.
Or elles se remplissent au clic sur le bouton.
Est-ce qu'au clic, on appelle les sub dans l'ordre; c'est à dire Moyenne - NomFeuille - FormuleDistance - FormuleVitesse etc ... ?
Quand je passe en pas à pas sur mon sub EcartMoyenM, je sors de ma boucle alors que les cellules ne sont pas vides.
Code EcartMoyenM:
Code qui remplit colonne B :
La colonne D est remplie manuellement.
Merci de votre aide.
J'ai un petit problème avec mon bouton.
Voici son code :
Code:
Private Sub CommandButton1_Click()
Call Moyenne
Call NomFeuille
Call FormuleDistance
Call FormuleVitesse
Call Decalage
Call TempsMoyen
Call TempsArret
Call EcartMoyenM
Call EcartMoyenS
End Sub
Le souci, c'est que les Sub EcartMoyenM et EcartMoyenS font des calculs à partir des autres colonnes.
Ces Sub font les calculs si les cellules sont non-vides.
Or elles se remplissent au clic sur le bouton.
Est-ce qu'au clic, on appelle les sub dans l'ordre; c'est à dire Moyenne - NomFeuille - FormuleDistance - FormuleVitesse etc ... ?
Quand je passe en pas à pas sur mon sub EcartMoyenM, je sors de ma boucle alors que les cellules ne sont pas vides.
Code EcartMoyenM:
Code:
Sub EcartMoyenM()
For m = 4 To Range("D65536").End(xlUp).Row Step 1
For n = 4 To Range("B65536").End(xlUp).Row Step 1
For o = 4 To Range("H65536").End(xlUp).Row Step 1
If Range("B" & n).Value <> 0 And Range("D" & n).Value <> 0 Then
Range("H" & n).Value = Range("D" & n).Value - Range("B" & n).Value
End If
Next o
Next n
Next m
End Sub
Code qui remplit colonne B :
Code:
Sub Moyenne()
'Effacement des resultats precedents
Range("B3:C65536").ClearContents
'ligne de depart des ecritures
ligne = 3
' tableau repertoriant les colonnes dont on souhaite les moyennes
col = Array("J", "P")
'Pour chaque feuille dans la collection des feuilles
For Each Sh In Sheets
'Si le nom de la feuille est <> de Recap alors
If Sh.Name <> "Recap" Then
'pour chaque element de col
For m = LBound(col) To UBound(col)
'pour n de 1 a derniere cellule remplie de la colonne considerée (col(m))
For n = 1 To Sh.Range(col(m) & "65536").End(xlUp).Row
'Si le contenu de la cellule ligne=n et colonne concernée est une date non nulle alors
If IsDate(Sh.Range(col(m) & n)) And Sh.Range(col(m) & n) <> 0 Then
'tot est augmenté de la valeur de la cellule
tot = tot + CDate(Sh.Range(col(m) & n))
'nb est incrementé (nb final sera le nombre de cellules totalisées
nb = nb + 1
End If
Next
'Si le total n'est pas nul Ecriture de la moyenne (total divisé par le nombre de cellules)
If tot <> 0 Then Cells(ligne, 2 + m) = tot / nb
'remise a o de tot et nb pour calcul suivant
tot = 0
nb = 0
'nouvel element de col
Next m
'ligne=ligne d'ecriture suivante
ligne = ligne + 1
End If
Next
'classement en colonneB
Range("B3:B" & Range("B65536").End(xlUp).Row).Sort Key1:=Range("B3"), Order1:=xlAscending, Header:=xlGuess
'classement en colonne C
Range("C3:C" & Range("C65536").End(xlUp).Row).Sort Key1:=Range("C3"), Order1:=xlAscending, Header:=xlGuess
End Sub
La colonne D est remplie manuellement.
Merci de votre aide.