Calcul de plages horaires à partir de valeurs booléennes (0 - 1) - Résolu

Al1C21

XLDnaute Nouveau
Bonjour,

Je cherche une solution, sans recours à des macros, pour déterminer des heures d'ouverture et fermeture de service, sur une période de 24 heures, en ayant pour chaque service l'information si le service est ouvert ou non dans chaque créneau d'une heure.

Pour chaque service j'ai donc une succession de 24 valeurs 0 ou 1, et je veux obtenir en bout de ligne les heures de début (ouverture) et de fin (fermeture) du service. Il peut y avoir 2 ou 3 plages d'ouverture.

J'ai "bricolé" quelque chose qui me donne bien la première ouverture, mais ça ne fonctionne pas pour la suite.

Notez bien qu'il y a des services qui n'on aucune ouverture, ou au contraire qui sont toujours ouverts.

Merci d'avance de votre aide, et même si la solution complète n'émerge pas je pense que vous m'aurez permis d'avancer.

Cordialement.
 

Pièces jointes

  • Plages de Service.xls
    23.5 KB · Affichages: 75
  • Plages de Service.xls
    23.5 KB · Affichages: 78
  • Plages de Service.xls
    23.5 KB · Affichages: 76

Fo_rum

XLDnaute Accro
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonsoir,

la formule de Rachid :D te convient ?
Pour éviter d'avoir dans l'onglet une grande quantité de formules qui peuvent ralentir le programme, on peut la traduire et ne garder que les réponses par VBA (Cas2).

Elle ne donne pas les mêmes résultats que la macro de Roger ;). En attendant son retour, le Cas 1 (toujours avec l'idée précédente) semble le faire (par exemple avec 04:00 05:30 et 23:00 04:00 on n'a qu'une plage 23:00 05:30).
 

Pièces jointes

  • 2ReportHoraires(VBA).xlsm
    40.5 KB · Affichages: 50

eriiic

XLDnaute Barbatruc
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonsoir tout le monde,

Cette version devrait fonctionner quelque soit le découpage de la journée.
Maintenant ne sélectionner que la plage des horaires et non toutes les données.
Tu peux désigner une autre feuille (d'un autre classeur éventuellement) pour la '1ère cellule Résultats'.

eric
 

Pièces jointes

  • Plages de Service v2.xls
    105.5 KB · Affichages: 52
Dernière édition:

Al1C21

XLDnaute Nouveau
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonjour,

Excusez-moi pour une aussi longue absence !

Je reviens ce matin et vais regarder les dernières propositions (Fo_rum et eriiiic) d'ici demain.

Merci encore.
Alain
 

Al1C21

XLDnaute Nouveau
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonsoir tout le monde,

Cette version devrait fonctionner quelque soit le découpage de la journée.
Maintenant ne sélectionner que la plage des horaires et non toutes les données.
Tu peux désigner une autre feuille (d'un autre classeur éventuellement) pour la '1ère cellule Résultats'.

eric

Merci eriiiic

Cela semble très bien fonctionner.

Il me reste à passer sur le fichier de données réel.
Comment puis-je copier ta macro (y compris le userform) pour qu'elle soit utilisable directement dans le fichier réel ?
Excuse-moi, je suis béotien en matière de macros...

Cordialement.
Alain
 

eriiic

XLDnaute Barbatruc
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonsoir,

En fait j'avais prévu un autre fonctionnement pensant que tu recevais un nouveau fichier régulièrement.
Dans ce cas tu ouvres le fichier avec la macro, celui avec tes données et tu tapes Ctrl+t.
La fenetre de dialogue s'ouvres, tu désignes tes plages sur le fichier de données et celui-ci est traité.
Tu peux même avoir tes plages horaires sourcesune feuille d'un classeur, et demander le résultat dans une autre feuille, d'autre classeur éventuellement.

Maintenant si tu colles tes données toujours sur la même feuille autant y transférer les macros oui. Pour les macros pas de pb je t'expliquerai, pour le formulaire tu risques de devoir le reconstruire.
Je regarderai si on peut exporter un formulaire pour te faciliter la tâche (il me semble qu'exporter seul le formulaire n'est pas suffisant...) mais avant dis-moi comment tu comptes travailler suite à ces explications.

eric
 

ROGER2327

XLDnaute Barbatruc
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonsoir à tous


(...)

Pour le VBA de Roger, il y aurait une amélioration à apporter : par exemple, pour le service Gardien (ID 102, ligne 5) il faudrait en fait trouver 2 plages : 4:00 h - 10:00 h et 22:00 h - 4:00 h (le premier 4:00 est le début de période, le deuxième est en fait le lendemain).
(...)
Si vous considérez que faire apparaître une plage continue comme étant deux plages distinctes est une amélioration, salopons un peu le code... On obtient la solution en pièce jointe, dans laquelle le gardien fera deux périodes de 4h à 10 h et de 22h à 4h ; l'équipe de Production3 fera deux postes, de 4h à 5h et de 21h à 4h, au lieu d'un de 21h à 5h... Est-ce bien ce que vous voulez ?​



ROGER2327
#5926


Dimanche 22 Merdre 139 (Ontogénie pataphysique - fête Suprême Première première)
20 Prairial An CCXX, 9,7318h - fourche
2012-W23-5T23:21:22Z
 

Pièces jointes

  • XLD_185501_Plages horaires(3).xlsm
    27.7 KB · Affichages: 37

Al1C21

XLDnaute Nouveau
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonjour,

Pour Roger : effectivement c'est bien ce que je veux (contrainte de raisonner sur une période de 24 heures, le 4h de la fin n'étant pas le même jour que le 4h du début). Ce que tu as fait me convient parfaitement, il ne reste plus qu'à me dire comment je fais pour utiliser cette macro dans mon fichier de données.

Pour Eric : ça marche très bien, il reste la même question que pour Roger : comment je fais pour faire tourner ça dans mon fichier de données (71000 lignes, 50 colonnes) et afficher les résultats soit sur la même feuille (au bout des 50 colonnes) soit dans un feuille différente.

Pour Fo_rum : effectivement la solution boucle. Mais vu l'avancement avec Eric et Roger, je ne cherche pas de troisième code. Merci de ta collaboration.

Encore merci à tous.
Je crois que dès que j'aurai les indications pour faire tourner les macros dans mon fichier je pourrai clore le fil.

Cordialement.
Alain
 

eriiic

XLDnaute Barbatruc
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonjour,

Le plus simple, pour mon fichier et vu qu'il n'y a pas de code sur la feuille, c'est que tu copies ta feuille de données de ton classeur vers le mien.
Tu ouvres les 2 classeurs et tu les réduits pour avoir une visibilité sur les 2.
Tu cliques sur l'onglet de tes données et tu le fais glisser dans mon classeur, et tu appuies sur Ctrl avant de relacher la souris (pour faire une copie et non un déplacement, tu as un + qui s'ajoute sur l'icone de la souris)

eric
 

Al1C21

XLDnaute Nouveau
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonjour,

Le plus simple, pour mon fichier et vu qu'il n'y a pas de code sur la feuille, c'est que tu copies ta feuille de données de ton classeur vers le mien.
Tu ouvres les 2 classeurs et tu les réduits pour avoir une visibilité sur les 2.
Tu cliques sur l'onglet de tes données et tu le fais glisser dans mon classeur, et tu appuies sur Ctrl avant de relacher la souris (pour faire une copie et non un déplacement, tu as un + qui s'ajoute sur l'icone de la souris)

eric

Ok Eric, ça marche.

À ceci près que ça ne traite que 23 lignes (comme les 23 lignes de la feuille d'exemple).
Comment étendre le traitement à l'ensemble des 71078 lignes de données ?

Alain
 

eriiic

XLDnaute Barbatruc
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Re,

Normalement je me base sur la dernière cellule remplie de la colonne de ton 1er horaire (4:00) pour déterminer la plage de traitement.
Dans un 1er temps mets les résultats sur la même feuille que les données. Il faut sans doute que j'ajoute la mémorisation des feuilles choisies....
Si ça ne marche pas ça serait bien d'avoir un fichier (pas 3000 lignes hein !) qui fait l'erreur.
eric
 

Al1C21

XLDnaute Nouveau
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Re...

Eh bien ça marche !
Je ne sais pourquoi cela a foiré le premier coup.

Je mets effectivement les résultats sur la même feuille que les données.

Le traitement des 71000 lignes prend une à deux minutes maximum.

Merci beaucoup.

Je rappelle que la solution par formules proposée par Rachid fonctionne très bien, même avec 71000 lignes !
La solution macro v2 d'Eric a tourné avec succès.

Encore un grand merci à tous les contributeurs.

Ce fil peut être clos, la question considérée comme résolue.

Alain
 

eriiic

XLDnaute Barbatruc
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Bonsoir,

Tiens, j'avais répondu mais j'ai du mal valider...

J'ai testé en ajoutant quelques lignes, je n'ai pas constaté le défaut.
Si tu pouvais essayer avec une centaines de lignes avant d'en prendre 70000 on verra si c'est un pb de la macro chez toi ou un problème de limite atteinte (par curiosité tu as combien de mémoire et la mémoire virtuelle windows est-elle bien activée ?).

Dans un 1er temps colle le résultat sur la feuille des datas, ensuite teste si tu veux en collant sur une autre feuille si tu penses avoir besoin de cette fonctionnalité.

eric
 

Al1C21

XLDnaute Nouveau
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

OK Eric,

voir mon post 42 : tout fonctionne bien, et a fonctionné plusieurs fois.
2 minutes pour traiter les 71000 lignes (51 colonnes), c'est super.

...merci encore...

Cordialement.
Alain
 

eriiic

XLDnaute Barbatruc
Re : Calcul de plages horaires à partir de valeurs booléennes (0 - 1)

Re,

Ok, je n'avais pas vu qu'on était passés en page 2...
C'est clair que rachid est ceinture noire 5ème dan en formules, pas prêt d'être à son niveau ;-)

A+
eric
 

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 501
dernier inscrit
talebafia