Créer un tableau par calculs à partir d'un autre tableau Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
E
Emma Bou
Jeune membre
Jeune membre
Messages : 44
Inscrit le : 16 octobre 2014
Version d'Excel : 2007

Message par Emma Bou » 17 octobre 2014, 13:50

Bonjour,

J'aimerais automatiser les calculs des moyennes de temps et de vitesse par code VBA mais comme je débute je suis bloquée très vite... peut être avez-vous des idées...

Comment faire comprendre par code VBA que je veux sélectionner certaines cellules précises d'un tableau pour les utiliser dans les calculs d'une autre cellule d'un autre tableau?

Plus précisément, j'ai en colonnes différentes heures et en ligne différentes données correspondant à chaque heure... J'aimerais faire la moyenne des données à l'intérieur d'une plage horaire...

Par exemple par rapport au tableau en pièce jointe, je veux calculer la moyenne des vitesses et des temps moyens entre 00 et 1h dans les cellules N7 et N9. Mais le but final serait de remplir automatiquement toutes les cellules colorées de mon tableau de droite. Les formules utilisées seraient :

temps moyen = Moyenne(plage_de_cellules tm) ==> dans la cellule N7 par exemple
temps théorique = Moyenne(plage_de_cellules tt)
vitesse = 0.3/(HEURE(N7)+MINUTE(N7)/60+SECONDE(N7)/3600)

Si une piste est possible... Merci beaucoup :)
essai_macro.xlsm
(14.31 Kio) Téléchargé 35 fois
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'982
Appréciations reçues : 359
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 17 octobre 2014, 16:26

Bonjour,

solution via une fonction personnalisée, exemple d'utilisation de la fonction en pièce jointe.
Function averageinterval(critere, min, max, param, Optional ignorezero = True)
' fonction qui calcule une moyenne sur des valeurs sélectionnées si le critère correspondant se situe entre min(inclus) et max(exclu)
    If critere.Count <> param.Count Then averageinterval = "erreur": Exit Function
    For i = 1 To critere.Count
        If critere(i) >= min And critere(i) < max Then
            If ignorezero = True And param(i) = 0 Then Else c = c + 1
            s = s + param(i)
        End If
    Next i
    averageinterval = s / c
End Function
edit correction code
essai_macro.xlsm
(20.33 Kio) Téléchargé 40 fois
Modifié en dernier par h2so4 le 22 octobre 2014, 12:34, modifié 1 fois.
E
Emma Bou
Jeune membre
Jeune membre
Messages : 44
Inscrit le : 16 octobre 2014
Version d'Excel : 2007

Message par Emma Bou » 20 octobre 2014, 10:04

Bonjour, merci beaucoup :)

J'ai bien compris la fonction averageinterval (critère, min, max, paramètre) mais si par exemple j'ai un autre tableau je ne saurais pas comment l'appeler cette fonction... Il faudrait que j'écrive une procédure que j'associe à un bouton (une procédure appelant cette fonction pour remplir mes cases voulues), et je nage un peu car je suis novice en programmation et en langage VBA mais j'en ai besoin alors... Si vous avez encore des pistes...

Merci en tout cas, bonne journée :)
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'982
Appréciations reçues : 359
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 20 octobre 2014, 13:25

Bonjour,

cette fonction personnalisé peut être utilisée dans une cellule comme n'importe quelle fonction classique d'excel.
=averageinterval (critère, min, max, parametre, optional ignorezero=true)
ou
critère est un vecteur contenant les valeurs critères pour la sélection (dans ton cas l'heure de l'événement mesuré)
min représente la valeur minimum à laquelle le critère doit répondre pour sélectionner la valeur à prendre en compte pour la moyenne
max représente la valeur maximum à laquelle le critère doit répondre pour sélectionner la valeur à prendre en compte pour la moyenne
parametre est un vecteur contenant les valeurs à sélectionner pour le calcul de la moyenne
ignorezero permet de ne pas tenir compte des valeurs nulles pour le calcul de la moyenne (true, vrai est l'option par défaut)


tu peux voir comment cette fonction est utilisée dans les cellules des colonnes N et O.

pour que la fonction donne un résultat correct, les données heures doivent être de type date( et heure) et non texte. (j'ai dû corriger ton tableau exemple pour cela)

pour sélectionner les valeurs dans l'intervalle 0h à 1h min=0 et max=1/24 (1/24 de jour=1 heure)
pour sélectionner les valeurs dans l'intervalle 1h à 7h min=1/24 et max=7/24
E
Emma Bou
Jeune membre
Jeune membre
Messages : 44
Inscrit le : 16 octobre 2014
Version d'Excel : 2007

Message par Emma Bou » 22 octobre 2014, 11:58

Bonjour,

D'accord merci :). Par contre je ne comprends pas pourquoi la formule ne marche pas avec mon fichier... (colonne N). Peut-être savez vous le problème...?

Bonne journée,
essai_macro.xlsm
(23.57 Kio) Téléchargé 29 fois
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'982
Appréciations reçues : 359
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 22 octobre 2014, 12:52

Bonjour,

Pourquoi cela ne fonctionne pas ?

2 raisons :

1) cfr message précédent
pour que la fonction donne un résultat correct, les données heures doivent être de type date( et heure) et non texte. (j'ai dû corriger ton tableau exemple pour cela)
pour transformer les heures de texte en nombre, je copie un cellule contenant 0 et fait un coller spécial "addition" sur les cellules contenant les heures en ligne C.

2) le vecteur critère et du vecteur parametre doivent avoir la même longueur. j'ai corrigé la fonction pour qu'elle affiche bien "erreur" si ce n'est pas le cas.

tu trouveras en pièce jointe en feuil1 , ta feuille qui ne fonctionne pas et en feuil2 la feuille avec les corrections.
essai_macro.xlsm
(26.41 Kio) Téléchargé 34 fois
E
Emma Bou
Jeune membre
Jeune membre
Messages : 44
Inscrit le : 16 octobre 2014
Version d'Excel : 2007

Message par Emma Bou » 22 octobre 2014, 13:46

Merci beaucoup :)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message