Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

format hh:nn:ss et boucle (VBA)

  • Initiateur de la discussion Initiateur de la discussion AzoR
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

AzoR

XLDnaute Occasionnel
Bonjour,

J'ai un petit soucis avec cette partie de mon programme :

debut = Time
ComboBox1.NumberFormat = "hh:nn:ss"
a.NumberFormat = "hh:nn:ss"
a = 00:00:16


For i = 1 To (ComboBox1.Value / a)

Enfaite j'ai une acquisition qui se lance et qui dure tout le temps 16 secondes. Or je souhaiterais mettre dans mon interface le temps total d'acquisition dans ma ComboBox1.
J'ai donc besoin de dire que mon i de ma boucle for va de 1 à "TempsTotal/16secondes"
Ainsi, la boucle se répétera le maximum de fois possible dans le temps total d'acquisition souhaité.
Il faut donc arrondir à l'entier inférieur pour ne pas dépasser le temps demandé.

Mon soucis est que j'ai une erreur de format ce qui est normal puisque je veux diviser le temps total ( qui est entré dans la ComboBox1 en format hh:nn:ss ) et mon 16 secondes n'est donc pas dans le même format.

Comment puis-je faire pour qu'il comprenne lui même combien de fois il doit réaliser ses acquisitions à partir du temps total voulu rentré par l'utilisateur ?

PS : Le temps d'acquisition est TOUJOURS de 16 secondes, donc ne vous embêter pas à diviser par un temps mesuré pour que ce soit exactement à la microseconde prêt ce n'est pas le but, une division par 16 secondes suffi !

Merci d'avance, je vous joins mon programme en pièces jointes ! 🙂
 

Pièces jointes

Re : format hh:nn:ss et boucle (VBA)

Bonjour AzoR,

Je n'avais jamais vu la notation hh:nn:ss auparavant, cela fonctionne t-il vraiment ? 😕

Alors, je suggère pour obtenir tes 16 secondes d'essayer d'abord avec
Code:
a = TimeValue("00:00:16")

Sinon, essayer :

Code:
For i = 1 To Int(CDate(ComboBox1.Value) / 24 / 60 / 60 * 16)
 
Re : format hh:nn:ss et boucle (VBA)

En sachant que dans ma ComboBox2 j'ai un temps de pause qui se répète entre chaque mesure, j'aurai donc quelque chose du genre :

for i = 1 To ((ComboBox1.Value/"16secondes")-(ComboBox2.Value/(ComboBox1.Value/"16secondes")))

Avec "16secondes" qui sera remplacé par quelque chose comme "00:00:16" mais cela ne fonctionne pas 🙁
 
Re : format hh:nn:ss et boucle (VBA)

En fait, 00:00:16 c'est un format.. Excel peut parfois le considérer comme une durée mais c'est plutôt réservé à l'affichage si je dis pas de bétises.

Le mieux, c'est de travailler avec des jours en décimal. Tu es sûr de ne pas avoir d'erreur..

Reprenons :
Tu as dans ComboBox1 la durée totale de l'acquisition
Tu as dans ComboBox2 la durée de la pause entre chaque acquisition

Tu souhaites obtenir le nombre total d'acquisitions réalisables durant cette période.

Code:
a = 1 / 24 / 60 / 60 * 16  'Durée d'une acquisition
b = CDbl(CDate(ComboBox1.Value)) 'Durée de l'acquisition
p = CDbl(CDate(ComboBox2.Value)) 'Durée de la pause


For i = 1 To b / (a+p)
 
Re : format hh:nn:ss et boucle (VBA)

Cela marche niquel NezQuiCoule !

Du coup avec mon programme le seul soucis qu'il reste pour ce fonction est qu'il fait une dernière pause après la dernière acquisition, ce que je ne souhaite pas, une idée pour qu'il ne fasse pas cette dernière pause ?

Merci aussi Dranreb mais je dois prendre en compte le temps de pause que je rentre également.

Cordialement, AzoR
 
Re : format hh:nn:ss et boucle (VBA)

Il faut donc vérifier après une acquisition que ce ne soit pas la dernière. En reprenant notre code :

Code:
a = 1 / 24 / 60 / 60 * 16  'Durée d'une acquisition
b = CDbl(CDate(ComboBox1.Value)) 'Durée de l'acquisition
p = CDbl(CDate(ComboBox2.Value)) 'Durée de la pause


For i = 1 To b / (a+p)

On sait que i va aller de 1 à la valeur max sans la dépasser, sans se soucier de l'arrondir
Prenons un exemple, si b / (a+p) vaut 5,732 alors i va de 1 à 5
On doit donc vérifier si i = 5, qui correspond à l'entier (integer) de b / (a+b)

On place donc ceci avant l'instruction de pause :

Code:
If i = Int(b / (a+p)) Then Exit For
 
Re : format hh:nn:ss et boucle (VBA)

Avec ceci, il n'a fait que 36 secondes au lieu de 1 minute que je lui ai demandé. Il aurait du avoir le temps de faire une acquisition de plus

Cordialement, AzoR
 
Re : format hh:nn:ss et boucle (VBA)

Effectivement, s'il y a n acquisitions, il y aura n-1 pauses.

Pour remédier à cette contrainte je propose d'ajouter le temps d'une pause dans le temps total, cette dernière ne sera pas faite dans tous les cas, mais permettra un calcul d'itérations correct.

Code:
 For i = 1 To (b + p) / (a+p)

Et donc remplacer aussi avant la pause

Code:
If i = Int((b + p) / (a+p)) Then Exit For

Ce coup-ci ça devrait coller avec tes attentes 😉
 
Re : format hh:nn:ss et boucle (VBA)

C'est bon cela marche super !
J'ai saisi 1 minute il m'a fait 56 secondes et 1,30minute il m'a fait 1,16minute donc c'est super!

Petite question "BONUS" (lol😛) : Comment faire pour afficher chaque tableau dans une userform différente à chaque fois ?

Sachant que j'ai déjà créée le bouton " afficher les valeurs ", et quand l'on clique je souhaiterai qu'il ouvre les trois fenêtres.

Il ouvrira donc 3 userforms jusqu'ici rien de compliqué mais comment faire pour insérer un tableau dans un userform ? Tu sais ? 🙂

Cordialement, AzoR.



 

Pièces jointes

  • screen.JPG
    12.5 KB · Affichages: 26
  • screen.JPG
    12.5 KB · Affichages: 23
  • screen2.JPG
    50.5 KB · Affichages: 25
  • screen2.JPG
    50.5 KB · Affichages: 26
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
312
Réponses
12
Affichages
1 K
Réponses
3
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…