Sumif calcul écart d'heure

Bonjour,

Je début dans la programmation VBA.

cela fait quelque temps que je cherche des informations pour l'utilisation de la formule "Sumif"

dans le langage Excel ma formule serait la suivante :

=si(AO2="";""(AO2+(AO2<AO3)-AO3))

Dans le langage VBA, j'y arrive pas.

j'ai cela :

Worksheet.Function.SumIf(Cells(k, 41) = "" & ";" & "" & ";(" & Cells(k, 41) + (Cells(k, 41) < Cells(a, 41) & ")-" & Cells(a, 41)))

Est ce que l'on peut m'aider ?

Merci

Bonjour,

Tu fais de la bouillie ! SUMIF c'est NB.SI, à ne pas confondre avec IF (SI). [à noter qu'en plus tu as esquinté la formule ! ]

VBA permet d'utiliser le fonctions Excel (pas toutes, mais la plupart) au moyen de la propriété WorksheetFunction de l'objet Application...

[ Il s'agit de WorksheetFunction et non de Worksheet.Function ne répondant à aucune syntaxe... ]

Cette propriété renvoie un objet WorksheetFunction dont les fonctions Excel utilisables constituent des méthodes de cet objet (il ne s'agit plus de formules... et la syntaxe d'utilisation en est une syntaxe VBA).

Avant de se tourner vers les fonctions Excel, qui peuvent rendre quelques services en VBA lorsqu'il n'existe pas de fonction VBA équivalente, il convient d'inventorier les possibilités offertes par VBA ! Or la fonction VBA Iif fonctionne de façon assez semblable à SI...

Le temps de te dépêtrer de ton mélange SI / NB.SI, de prendre en compte le fait que l'utilisation d'une fonction en VBA se traduit généralement par une ligne d'affectation : on affecte soit à une cellule soit à une variable le résultat renvoyé par une fonction (ou une expression utilisant une ou plusieurs fonctions), tu pourras aussi te pencher sur l'avantage qu'il y a à qualifier ses expressions qui renvoient notamment des objets Range (qualifier signifie les faire référer explicitement à la feuille [objet Worksheet] à laquelle ils appartiennent), et compte tenu du fait que dans ta (fausse) formule tu as des variables qui semblent indiquer la possible utilisation de boucles pour affecter des résultats successifs à plusieurs cellules, passer par l'intermédiaire d'un tableau pourrait alors s'avérer une opération intéressante.

Cordialement.

Bonjour,

Je vous remercie pour votre réponse qui effectivement me paraît plus clair.

Quel idiot je fais !!!

Je veux juste rappeler d'où viens ma source... Formation Excel VBA dans un Greta... Merci pour cette erreur...

Cordialement,

PS : je galère énormément dans le VBA lorsque les cellules de mon fichier sont des heures...y a t'il une raison ?

Cordialement,

Quels problèmes rencontres-tu avec les heures ?

On a plus souvent des problèmes avec les dates qu'avec les heures (en VBA). Au niveau Excel, il faut par contre faire attention aux formats de cellule : avec les formats habituels h:mm ou hh:mm, on affiche de 0:00 à 23:59, même si la valeur dépasse 24h, pour afficher au-delà de 24, format [h]:mm.

Cordialement.

Merci pour votre rapidité de réponse.

Le plus simple est que je vous donne les fichiers...

Je dois y apporter des modifications avants.

J'ai plusieurs classeurs Excel (base de données) que j'exploite dans un autre classeur.

Ma bdd sous format Excel, mais l'ensemble des données sont des formats Standard près je dois exploiter les jours et heures.

Mon classeur exploitation fonctionne bien hors toutes les heures sont sous format personnalisé parceque lorsque je change en format heure, rien ne fonctionne...

De plus par rapport aux critères, je calcul l'écart en heures et par une mise en forme conditionnelle, me fait rougir les case où on est mauvais.

Je souhaite ensuite exploiter sur une autre feuille toutes les case rouge. Hors les temps (écart) ressort en 0,15666...-52. je sèche sur cette données.

J'ai ensuite essayer d'extraire toutes les lignes qui ont une case rouge. J'ai abolie cette procédure qui me paraît trop complexe.

Je dois ensuite sur un onglet rapport mettre des compteurs via les différents critères filtrer.

Je pense que les fichiers seront plus parlant, enfin j'espère...😀

Je joint les fichiers dès que possible.

Merci

Les heures sont gérées de la même façon que les dates dans Excel, sur la base d'une même unité qui représente 1 jour.

Une date est un nombre compté à partir du 1er janvier 1900 (jour 1). Si on adjoint une heure à la date, l'heure devient la partie décimale du nombre. Des heures saisie sans précision de date sont représentées par un nombre inférieur à 1.

Ainsi : 06:00 (c'est : 0,25), 12:00 (c'est : 0,5)... 1 c'est 24h (s'affichera :00:00 (avec format hh:mm) ou 24:00 (avec format [h]:mm).

Bonjour,

Je vous joint donc mon fichier de traitement et quelques dossiers sources.

Pouvez vous m'aider sur les format de colonne Heure, et surtout que les écarts soit bien des écart de traitement en heure et pas des 0,...)

Cordialement,

Zebugore

7compteur-gps.xlsm (422.01 Ko)
10base-de-donnee.7z (705.10 Ko)

Bonsoir,

Je regarderai mais cela dépendra de ma disponibilité, j'ai pas mal de choses en route que je ne vais pas abandonner...

Tes fichiers m'ont paru plutôt lourds pour le volume de données qu'ils contiennent, il est vrai qu'en enregistrant en xlsx on n'a plus que le tiers du poids initial. Curieusement d'ailleurs pas pu les enregistrer en xls ! J'ai tout de même pu les réenregistrer en xls à partir des xlsx... On verra par la suite.

Ce que je note surtout c'est que toutes les données sont du texte... on va voir ce qui en résulte dans le traitement tel qu'il est conduit, mais il est certain que pour faire des calculs avec ces données, des conversions vont être indispensables.

Mais pour pouvoir examiner un peu rationnellement tout ça, il me faut commencer par remettre en forme les procédures pour les rendre un peu plus lisibles, et je vais sans doute par la même occasion entamer quelques modifications qui me paraîtront indispensables, supprimer 6 modules sur 7 (pour 7 procédures on peut largement se contenter d'un module qui pourrait en accueillir bien plus...) Je reviens quand j'aurais établi des constatations intéressantes.

Cordialement.

Des choses commencent à m'intriguer... [J'avais commencé ainsi mais depuis ça ne m'intrigue plus !]

Bon ! Résumons : la procédure de démarrage, pas grand chose, j'ai noté un Select que je ferai disparaître en son temps (toujours l'indice de futurs problèmes dans un code, et le facteur de ralentissement par excellence...). Je me suis contenté pour le moment de substituer Timer pour la mesure du temps (plus précis et mesure en secondes) et remplacé 3 variables par une qui suffit pour le job (pas avare sur la quantité de variable ton code... )

On passe donc à l'ouverture des fichiers. Outre des variables en nombre superflu, on trouve cette imbécillité récurrente d'affecter ThisWorkbook a une variable (pour qui plus est ne même pas l'utiliser... ), on prend des chemins détournés pour l'opération : on teste avec Dir si on a un premier fichier, étant le cas on démarre une boucle (qu'on démarre habituellement tout de suite après Dir, mais là non !), pour... consigner les noms de fichiers dans un tableau ! Je me suis dit qu'on avait une utilisation particulière de ce tableau mais non ! on s'en sert juste pour dans une autre boucle ouvrir les fichiers... J'ai réduit le nombre de variable à 4, en en ajoutant une (après en avoir supprimé beaucoup d'autres)

[variables mal déclarées d'ailleurs, par quelqu'un qui ignore que les variables se typent individuellement et non par groupes, ...à lui signaler le cas échéant !]

Après enquête (toujours comme ça quand on travaille à coup de Select au lieu d'appeler un chat un chat ! on ne sait jamais ni où on est ni où on va), pour conclure qu'on place les données récupérées sur la feuille CollageBase, on arrive au bout de cette procédure, que j'ai fait fondre de moitié, mais qui en appelle une autre : suppheurenuit... et c'est là que je trouve que ça se corse un peu !

Après sélections et activations d'usage on commence par supprimer la colonne AN... laquelle est vide sur tous les fichiers source (ça s'arrête à AM) ! (ça fait pas de dégâts au moins... )

Puis on ouvre une boucle de 1 à 4 pour parcourir les 4 feuilles du classeur !

Il y a bien 4 feuilles, elles contiennent une ligne d'en-tête mais sont vides de données, mais OK on vide l'existant antérieur ! Sauf que ce n'est pas sa place ici ! Sans doute pour ça qu'on a invalidé la suppression... Il faut replacer ça dans la procédure de démarrage.

Puis (c'est ce qui est déclaré) on met au format heure la colonne C !

    Columns("C").Select
    colonnec = Columns("C").Select
    colonnec = Format(colonnec, "HH:MM:SS")

A noter que colonnec est une variable non déclarée, et passons sur le fait qu'on sélectionne deux fois (mais en la matière on n'arrête pas de sélectionner plusieurs fois les mêmes choses, un vrai cauchemar ambulant cette procédure !), mais à quoi peut bien servir ce truc, là il faut renvoyer celui qui a écrit ça à de sérieuses révisions...

Et c'est en plus répété deux fois...

Vu les contours pour arriver au bout de cette affaire, j'ai bien failli me perdre... On vérifie que I1 contient "PK", sans doute parce qu'on ne sait plus si on a tranféré l'en-tête ou pas, et si elle y est on va placer une mention en AN1 dont on n'aura rien à faire sur cette feuille qu'on devra effacer ! On passe un certain temps à supprimer des lignes en partant du haut ! au lieu de se préoccuper des lignes à récupérer... Après avoir passé un bout de temps à recoller les morceaux de tests éclatés, je suis arrivé à la conclusion que ce qu'on voulait faire se résumait ainsi :

  • on parcourt la base
  • à chaque ligne on teste si l'heure en C est >5h et <21h
  • si c'est le cas, on regarde si la valeur en I se situe dans une des 4 tranches prédéfinies
  • si la valeur est incluse dans l'une des tranches, la ligne est à prélever pour aller dans une des feuilles X1 à 4 (chacune correspondant à l'une des tranches).

Vu la façon dont c'était fait, j'aimerais bien qu'on me le confirme !

Je me demande quel pouvait être le résultat avec des données intégralement textuelles alors qu'on ne procédait à aucune conversion ! Si on trouvait des nombres à l'arrivée cela tient déjà du miracle, mais une conversion générale automatique ne paraît guère envisageable...

Celle-là, je l'ai réécrite en entier, elle s'est ainsi pas mal réduite, mais je n'arrive pas à imaginer qu'elle ait pu fonctionner correctement.

Cordialement.

J'ai jeté un oeil sur la suite... Tu supprimes donc les lignes ayant la même heure en C ?

A confirmer.

Encore des suppressions en partant du haut... !

Ensuite ça devient particulièrement confus ! Alors il va falloir exposer clairement, logiquement, ce que tu veux obtenir car c'est strictement incompréhensible.

Seule chose sûre, c'est que les procédures ne sont pas en état de fonctionner !

Bonjour,

Ce qui est clair pour moi, c'est que j'arrive à faire quelque chose avec rien, ou avec trop. 😂.

En gros, la base de données sont des relevés GPS. Et je dois sortir des compteurs de temps de passage à des points bien précis.

Cette procédure est valable que entre 5h et 21h.

Au delà de 4h00 sur un des points, il dois me le référencer. Et je dois l'explication.

Au delà de 6h00, il doit aussi me le référencer sur un autre onglet. (Délais interdit à franchir).

Pour ces deux critères, je souhaite que cela apparaisse dans un tableau référencent les +4h et +6h de Chauny des points précis.

J'ai joints que 3 fichiers de base de donnée, hors j'en est un par jour, soit 365 par an.

Je les traite par moi, afin que la procédure doit moins lourde en traitement.

Est ce que je suis plus clair ?

Si tu ne précises pas comment est calculé l'écart, je ne suis pas plus avancé.

Et j'ai demandé diverses confirmation dont je souhaiterais qu'elles soient faites explicitement.

Cordialement.

Bonjour,

Oui désolé.

Votre conclusion est bien :

on parcourt la base

  • à chaque ligne on teste si l'heure en C est >5h et <21h
  • si c'est le cas, on regarde si la valeur en I se situe dans une des 4 tranches prédéfinies
  • si la valeur est incluse dans l'une des tranches, la ligne est à prélever pour aller dans une des feuilles X1 à 4 (chacune correspondant à l'une des tranches).

L'écart est calculé entre deux passages. C'est à dire sur chaque feuille 1a4, écart entre heure de passage colonne ''C2'' et ''C3''. Ainsi de suite.

Cette écart vient en AO2.

Si plus de 4h, cellule se met en rouge et se référence dans feuille de récap des plus de 4h.

Si je comprends bien, parce que la précision n'est pas ton fort, on mesure l'écart horaire entre chaque ligne et la suivante en colonne C, en partant de la 2 et donc jusqu'à l'avant-dernière... Mais dans la mesure où tu cumules plusieurs états, il faudra donc veiller à ne le mesurer que sur la même date...

On note l'écart en AN : tous les écarts ou seulement ceux supérieurs à 4h ?

Effectivement, mes explications sont peux être pas aussi claire que vous le désirez.

on mesure l'écart horaire entre chaque ligne et la suivante en colonne C.

On note l'écart en AN : tous les écarts.

Si écart supérieur à 4h, la cellule devient rouge.

Celle ligne doit aussi être copier/coller dans une nouvelle feuille appelé Récap. cette feuille donne tous les écarts de plus de 4h des feuille X1 à X4.

Pas dans ton classeur cette feuille Récap...

Et pour les écarts supérieurs à 6h ?

Si, tout dans le le même classeur, 😀.

Merci

Bonsoir,

Voilà, on en est au stade où les données sont parvenues dans les feuilles cibles, les écarts calculés et la MFC en place. Pas de Récap, donc je m'arrête ici...

Avec tes 3 fichiers, je n'ai eu que des X1 et X2, pas de X3 ou X4. A toi de dire si c'est normal ou si cela dévoile une anomalie...

Cordialement.

17compteur-gps.xlsm (615.27 Ko)

Bonjour,

Je te remercie du travail fournis.

X4 est vide et cela est normal.

Hors, j'ai bien des données sur le fichiers X1, X2 et X3.

J'ai pas encore regardé ton fichier, mais je pense savoir le problème.

Cordialement,

Zeb

Rechercher des sujets similaires à "sumif calcul ecart heure"