boucle sur spinbutton + format date

frtoussaint

XLDnaute Nouveau
Bonjour à tous,

J'ai un problème que je n'arrive pas à résoudre malgré mes recherches très actives sur le forum. J'explique.

J'ai un formulaire avec quinze textbox qui sont chacun gérés par une toupie (chaque textbox a son spinbuton).

J'aimerais créer une boucle pour que chaque spinbutton agisse de la même façon sur sa textbox.

Je peux le faire en mettant adaptant chaque spinup et chaque spindown... mais je me dis qu'il doit être possible de le faire et réduire ainsi le code.

Voici un extrait du code...


Code:
Private Sub SpinButton01_SpinDown()
If TextBox01.Value = format(0, "h:mm") Then Exit Sub
TextBox01.Value = format(CDbl(CDate((TextBox01.Value)) - (15 / 1440)), "h:mm")
TextBox01.ForeColor = &H80000008
If TextBox01.Value = format(0, "h:mm") Then TextBox01.ForeColor = &H80000005
End Sub

Private Sub SpinButton01_SpinUp()
TextBox01.Value = format(CDbl(CDate((TextBox01.Value)) + (15 / 1440)), "h:mm")
TextBox01.ForeColor = &H80000008
End Sub

Private Sub SpinButton02_SpinDown()
If TextBox02.Value = format(0, "h:mm") Then Exit Sub
TextBox02.Value = format(CDbl(CDate((TextBox02.Value)) - (15 / 1440)), "h:mm")
TextBox02.ForeColor = &H80000008
If TextBox02.Value = format(0, "h:mm") Then TextBox02.ForeColor = &H80000005
End Sub

Private Sub SpinButton02_SpinUp()
TextBox02.Value = format(CDbl(CDate((TextBox02.Value)) + (15 / 1440)), "h:mm")
TextBox02.ForeColor = &H80000008
End Sub

Comme vous l'aurez compris, ce que j'essaie de faire, c'est d'incrémenter chaque textbox de 15 min en 15 min.
Dans le fond, j'y arrive mais je me dis qu'il doit y avoir moyen de le faire + simplement...


- Seconde question : est-il possible dans un textbox d'écrire "9" ou "9,5" et que ça se transforme en 9:00 ou 9:30?

Merci d'avance,
François
 

klin89

XLDnaute Accro
Re : boucle sur spinbutton + format date

Bonjour le forum,
Bonjour Pierrot93, frtoussaint

Tu dis :
- Seconde question : est-il possible dans un textbox d'écrire "9" ou "9,5" et que ça se transforme en 9:00 ou 9:30?

MyDearFriend abordait ce sujet dans un fil.

Dans une textbox, il saisissait 0823 et après validation cela affichait 08:23
De plus, avec différents évenements de la textbox, tu évitais toute erreur de saisie (exemple :823 ou 1072) avec affichage de message d'erreur et retour sur la textbox.

Je me souviens d'un travail remarquable.

Personnellement, je pense qu'une saisie manuelle est plus aisée.
Dans ton cas, incrémenter 15 textbox avec un spinbutton est beaucoup plus fastidieux.

Il faut simplement retrouver le fil et le superbe travail de myDearFriend :)

Amicalement Klin89
 
Dernière édition:

frtoussaint

XLDnaute Nouveau
Re : boucle sur spinbutton + format date

Salut,
J'ai regardé vos deux "pistes" et j'ai essayé d'adapter.
Avec la solution de klin89, il est clair que les spinbutton deviennent plus fastidieux comme controle. Alors, bien que j'ai réussi à faire le module de classe pour gérer ma "boucle" de spinbutton, je les ai supprimé.
Mais du coup, ma boucle doit se faire sur les textbox et sur l'événement exit. Hors, exit n'est pas disponible dans les modules de classe.
J'ai essayé autrement mais ça ne fonctionne pas :

Voici le code qui marche avec un textbox. La fonction checkhourformat se trouve dans un module.
Code:
Option Explicit


Private Sub TxtBox1_Exit(ByVal cancel As MSForms.ReturnBoolean)
If Not Check_hourFormat(TxtBox1.Value) Then

        MsgBox "le format de l'heure saisie n'est pas valide", vbExclamation, "erreur de saisie"
        TxtBox1.Value = ""
        cancel = True
        Exit Sub
              
    Else
   
        TxtBox1.Value = Left(TxtBox1.Value, 2) & ":" & Right(TxtBox1.Value, 2)
   
    End If
    
 
End Sub

Après avoir testé en vain de faire la boucle par module de classe, mon idée a été de faire ceci :
Code:
Option Explicit
Public cancel As Boolean



Private Sub TxtBox1_Exit(ByVal cancel As MSForms.ReturnBoolean)
Call time
End Sub

Private Sub time()
Dim i As Byte


For i = 1 To 15

If Not Check_hourFormat(Me.Controls("TxtBox" & i).Value) Then

        MsgBox "le format de l'heure saisie n'est pas valide", vbExclamation, "erreur de saisie"
        Me.Controls("TxtBox" & i).Value = ""
        cancel = True
        Exit Sub
              
    Else
   
        Me.Controls("TxtBox" & i).Value = Left(Me.Controls("TxtBox" & i).Value, 2) & ":" & Right(Me.Controls("TxtBox" & i).Value, 2)
   
    End If
 Next i
 End Sub

Mais ça ne fonctionne bien. Il lance le Msgbox de validation malgré que je rentre les données correctement. Je me dis qu'en fait il continue la boucle et constate que l'entrée de donnée en textbox2 est incorrecte alors il lance le msgbox. Alors ma question : comme faire cette boucle?

Autre question : avec mes heures ainsi "fabriquées" par la fonction, est-ce que je vais pouvoir les additionner comme des heures ou est-ce du format texte?

Est-ce que je suis clair? :)

Merci pour votre aide.
François
 

klin89

XLDnaute Accro
Re : boucle sur spinbutton + format date

Bonjour frtoussaint
Bonjour le forum

Tu dis :

Mais du coup, ma boucle doit se faire sur les textbox et sur l'événement exit. Hors, exit n'est pas disponible dans les modules de classe.

Vois le travail de Boisgontier et son module de classe (événement Change).

Pour la saisie de tes heures, faire une compilation du travail de Boisgontier et MyDearFriend, ça serait le top :)

https://www.excel-downloads.com/threads/change-de-textbox-auto.88284/

Amicalement klin89
 

Discussions similaires

Réponses
17
Affichages
423

Statistiques des forums

Discussions
312 488
Messages
2 088 861
Membres
103 979
dernier inscrit
imed