je cherche à créer un calendrier qui ne dépende pas des contrôles Microsoft qui disparaissent au fur et à mesure des versions. Je fais ça pour mon travail, pour plusieurs utilisateurs sur différents PC sur réseau, sur des PC dont les versions excel changent régulièrement et où mes accès sont limités.
Voici ce que j'ai réalisé :
J'ai mis une série de ToggleButtons pour sélectionner le jour.
En cliquant sur une date le calendrier s'ouvre à cette date.
Ce que je souhaite c'est que le toggle du jour soit activé à l'ouverture du toggle.
Puis lorsqu'on sélectionne un autre jour, que la date en haut soit actualisée et que l'ancien toggle soit désactivé et le nouveau activé.
Chaque Toggle lance la macro "CLICtoggles"
Voici cette macro :
Code:
Sub CLICtoggles()
' Détecte le jour sélectionné
Debug.Print Me.ActiveControl.Caption
JOURselect = Me.ActiveControl.Caption
' Désactive tous les toggles sauf celui du jour sélectionné
For i = 1 To 31
If i <> JOURselect Then
CALENDRIER.Controls("ToggleButton" & i) = False
End If
Next i
' Renseigne la textbox
DATEinit = CDate(JOURselect & "/" & MOISbox & "/" & ANNEEbox)
Call INSCRIREdate
End Sub
Le problème est que la boucle For i ne fonctionne pas et je ne trouve pas pourquoi.
Re : Utilisation de plusieurs Toggles dans un userform
Bonsoir.
Mettez JOURselect = CInt(Me.ActiveControl.Caption)
ou alors typez explicitement vos variables.
Moi j'aurais probablement mis : Sub CLICtoggles(ByVal Jour As Integer) et puis 31 lignes de :
Private Sub ToggleButtonX_Click(): CLICtoggles X: End Sub
Ou alors un module de classe.
J'ai déjà testé cette instruction. D'une part ce n'est pas que le focus qu'il faut mais aussi l'activation du toggle (enfoncé) et d'autre part l'userform ne se ferme que lorsque l'utilisateur appuie sur Valider. Il peut donc changer de date plusieurs fois avant et les anciens toggles doivent se désactiver.
J'essaie d'éviter le module de classe. Je veux un calendrier le plus petit possible et le plus simple possible afin de l'intégrer à d'autres classeurs par la suite. On en trouve un paquet sur le net (d'ailleurs c'est à partir de l'un d'entre eux que j'ai démarré) mais ce sont pour la plupart des usines à gaz où il faut exporter l'userform + un module + un module de class + des macros dans la feuilles.
Moi j'aurais probablement mis : Sub CLICtoggles(ByVal Jour As Integer) et puis 31 lignes de :
Private Sub ToggleButtonX_Click(): CLICtoggles X: End Sub
Bonne idée, j'ai pas l'habitude d'utiliser cette méthode ! Merci !!!
Je constate que je me suis mal exprimé. Mon souci est que lorsqu'on appuie sur un toggle, il faut que l'ancien se désactive, a savoir qu'au lancement de l'userform, le toggle de la date de la cellule est activé automatiquement.
Dans mon cas lorsque je clique sur un nouveau toggle, l'ancien ne se désactive pas, ou alors si je modifie un peu les instructions, aucun ne s'active...
Non. Elles sont déclarées en Public, mais non explicitement typées, elles sont donc implicitement typées As Variant. Me.ActiveControl.Caption est un String, or un Variant/String ne peut être égal à un Variant/Integer.
Oui, c'est plus compliqué que je ne le pensais parce que la mise à False de ToggleButtonX provoque l'exécution de la ToggleButtonX_Click, alors ça se mord la queue.
Il vaudrait peut être mieux Transmettre le ToggleButton lui même en paramètre, pour pouvoir abandonner l'exécution tout de suite si sa Value est False.
Re : Utilisation de plusieurs Toggles dans un userform
ça va changer quoi ? C'est quoi la différence entre
JOURselect = Me.ActiveControl.Caption
et
JOURselect = CInt(Me.ActiveControl.Caption)
J'ai trouvé une solution en fouillant des forums en anglais :
Sub CLICtoggles()
' Détecte le jour sélectionné
Debug.Print Me.ActiveControl.Caption
JOURselect = Me.ActiveControl.Caption
' Désactive tous les toggles sauf celui du jour sélectionné
For Each Ctrl In CALENDRIER.Controls
If TypeName(Ctrl) = "ToggleButton" Then
If Ctrl.Object.Caption = JOURselect Then
Ctrl.Object.Value = True
Else
Ctrl.Object.Value = False
End If
End If
Next Ctrl
' Renseigne la textbox
DATEinit = CDate(JOURselect & "/" & MOISbox & "/" & ANNEEbox)
Call INSCRIREdate
End Sub
étrangement de cette manière plus de défaut espace pile.
Question variables, j'ai lu que les typer améliore la rapidité d’exécution des macros. Mais dans mon cas à qui ça me sert de les déclarer en string ou integer ?
Re : Utilisation de plusieurs Toggles dans un userform
Ça aurait servi à ce qu'ils soient de même nature des 2 cotés de la comparaison et qu'il puisse trouver l'égalité.
Mais comme ça ça va aussi, c'est String des deux coté puisque ça vient des deux cotés de Caption.
Exécuter ça pour voir la différence :
Re : Utilisation de plusieurs Toggles dans un userform
Bonjour.
Bon, et bien j'y vais de mon calendrier aussi, d'autant que j'avais vaguement en tête l'idée de le faire en voyant que je ne trouvais aucune trace de contrôle Calendar ni autres DTPicker (ils étaient moches de toute façon) dans les fournitures de mon nouvel ordi (une chance que j'ai la ListView par contre).