OVH Cloud OVH Cloud

Une seule macro i/o plusieurs

9 réponses
Avatar
Péhemme
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)

9 réponses

Avatar
michdenis
Bonjour Péhemme,

ceci retourne le nom du contrôle qui est actif

Msgbox ActiveControl.Name


Salutations!



"Péhemme" a écrit dans le message de news: 418d0b79$0$18898$
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)
Avatar
Péhemme
Bonsoir Denis,

Merci encore à toi de te pencher sur mes états d'âme ;-)))

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.

Si je fais :
S = usfIns.Controls.ActiveControl.Name
MsgBox S
=> cela bogue

:-(((

Bien amicalement
Michel



"michdenis" a écrit dans le message de news:

Bonjour Péhemme,

ceci retourne le nom du contrôle qui est actif

Msgbox ActiveControl.Name


Salutations!



"Péhemme" a écrit dans le message de news:
418d0b79$0$18898$
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne
conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)





Avatar
Frédéric Sigonneau
Bonjour Michel,

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.


Essaye :

S=usfIns.ActiveControl.ActiveControl.Name

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir Denis,

Merci encore à toi de te pencher sur mes états d'âme ;-)))

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.

Si je fais :
S = usfIns.Controls.ActiveControl.Name
MsgBox S
=> cela bogue

:-(((

Bien amicalement
Michel



"michdenis" a écrit dans le message de news:


Bonjour Péhemme,

ceci retourne le nom du contrôle qui est actif

Msgbox ActiveControl.Name


Salutations!



"Péhemme" a écrit dans le message de news:
418d0b79$0$18898$
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne
conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)










Avatar
michdenis
Bonjour Péhemme,


Si ton contrôle "Textbox" est dans un "Frame" :

MsgBox Me.Frame1.ActiveControl.Name

'---------------------------------

Si ton contrôle "Textbox" est dans un "Multipage" :

MsgBox Me.MultiPage1.SelectedItem.ActiveControl.Name


Salutations!





"Péhemme" a écrit dans le message de news: 418d17c3$0$15909$
Bonsoir Denis,

Merci encore à toi de te pencher sur mes états d'âme ;-)))

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.

Si je fais :
S = usfIns.Controls.ActiveControl.Name
MsgBox S
=> cela bogue

:-(((

Bien amicalement
Michel



"michdenis" a écrit dans le message de news:

Bonjour Péhemme,

ceci retourne le nom du contrôle qui est actif

Msgbox ActiveControl.Name


Salutations!



"Péhemme" a écrit dans le message de news:
418d0b79$0$18898$
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne
conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)





Avatar
michdenis
Bonjour Frédéric,

Cette syntaxe est inopérante !
S=usfIns.ActiveControl.ActiveControl.Name


Salutations!




"Frédéric Sigonneau" a écrit dans le message de news:

Bonjour Michel,

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.


Essaye :

S=usfIns.ActiveControl.ActiveControl.Name

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir Denis,

Merci encore à toi de te pencher sur mes états d'âme ;-)))

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.

Si je fais :
S = usfIns.Controls.ActiveControl.Name
MsgBox S
=> cela bogue

:-(((

Bien amicalement
Michel



"michdenis" a écrit dans le message de news:


Bonjour Péhemme,

ceci retourne le nom du contrôle qui est actif

Msgbox ActiveControl.Name


Salutations!



"Péhemme" a écrit dans le message de news:
418d0b79$0$18898$
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne
conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)










Avatar
Frédéric Sigonneau
Bonjour,

Denis,

Bizarre, chez moi ça fonctionne bien (Excel 2002).

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonjour Frédéric,

Cette syntaxe est inopérante !
S=usfIns.ActiveControl.ActiveControl.Name


Salutations!




"Frédéric Sigonneau" a écrit dans le message de news:

Bonjour Michel,

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.


Essaye :

S=usfIns.ActiveControl.ActiveControl.Name

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonsoir Denis,

Merci encore à toi de te pencher sur mes états d'âme ;-)))

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.

Si je fais :
S = usfIns.Controls.ActiveControl.Name
MsgBox S
=> cela bogue

:-(((

Bien amicalement
Michel



"michdenis" a écrit dans le message de news:



Bonjour Péhemme,

ceci retourne le nom du contrôle qui est actif

Msgbox ActiveControl.Name


Salutations!



"Péhemme" a écrit dans le message de news:
418d0b79$0$18898$
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne
conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)














Avatar
michdenis
Sous excel 2002,

J'ai utiliser cet événement du textbox :

'-------------------
Private Sub TextBox1_Enter()

MsgBox UserForm1.ActiveControl.ActiveControl.Name

End Sub
'-------------------

Et lorsque je clique dans le textbox, on me retourne un message d'erreur !


Salutations!


"Frédéric Sigonneau" a écrit dans le message de news:

Bonjour,

Denis,

Bizarre, chez moi ça fonctionne bien (Excel 2002).

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonjour Frédéric,

Cette syntaxe est inopérante !
S=usfIns.ActiveControl.ActiveControl.Name


Salutations!




"Frédéric Sigonneau" a écrit dans le message de news:

Bonjour Michel,

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.


Essaye :

S=usfIns.ActiveControl.ActiveControl.Name

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonsoir Denis,

Merci encore à toi de te pencher sur mes états d'âme ;-)))

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox qui
est dans celle-ci.

Si je fais :
S = usfIns.Controls.ActiveControl.Name
MsgBox S
=> cela bogue

:-(((

Bien amicalement
Michel



"michdenis" a écrit dans le message de news:



Bonjour Péhemme,

ceci retourne le nom du contrôle qui est actif

Msgbox ActiveControl.Name


Salutations!



"Péhemme" a écrit dans le message de news:
418d0b79$0$18898$
Bonsoir à Toutes et à Tous,

Sur une Usf j'ai plusieurs TextBox permettant de saisir des dates.
Afin d'éviter tout problème de saisie, j'ai actuellement une macro par
TextBox (adaptation du fichier : CalFr2.xls de Iznogood).
Je me demande cependant, s'il n'y aurait pas une possibilité de ne
conserver
qu'une seule macro qui remplisse la TxtBox "appelante", sachant que chaque
TextBox est remplie avec des dates différentes.
J'écris ce qui suit :

Sub DateCalendrier()

Dim UnJour As Date
UnJour = FormCal.Calendrier
'Il y a un Usf calendrier qui fonctionne parfaitement

S = Application.usfIns.Controls
'Où usfIns est le nom de mon Usf
==> je souhaite à ce niveau "récupérer" le nom de la TxtBox appelante

If UnJour <> 0 Then
Application.usfIns.TextBox(S).Value = Format(UnJour, "dd/mm/yyyy")
Else
Application.usfIns.TextBox(S).Value = ""
End If
End Sub

Bien sûr, cela ne fonctionne pas...

Avez-vous une idée pour remettre sur la voie ?
Merci d'avance de votre aide.
Michel (Le seul qui s'accroche)














Avatar
Péhemme
Bonjour Frédéric, Bonjour Denis,

Désolé de ne revenir que maintenant...
Je viens de tester la proposition de syntaxe de Frédéric.
S=usfIns.ActiveControl.ActiveControl.Name
La MsgBox me renvoie bien le nom de mon objet TextBox (Excel XP)
Il ne me reste plus qu'à manipuler ma variable.
Excusez-moi encore, j'ai du monde à la maison, je reviens dès que possible.
Mille mercis et amitiés à vous deux.
Michel



"Frédéric Sigonneau" a écrit dans le message de
news:
Bonjour Michel,

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox
qui
est dans celle-ci.


Essaye :

S=usfIns.ActiveControl.ActiveControl.Name

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !




Avatar
Péhemme
Bonsoir Frédéric, Bonsoir Denis, Bonsoir tout le monde...

Je ne vois pas apparaître mon post précédent. Wanadoo a du partir pour la
fin de semaine.
Pas grave.
Quand je reprends isolément la syntaxe de Frédéric, ma MsgBox me retourne
bien le nom de ma TextBox.
Pour l'utilisation dans ma macro, je déclare S comme objet dans lequel je
souhaite retourner la valeur Date issue du calendrier d'Iznogood.
A cet effet, j'écris :
Sub DateCalendrier()
Dim UnJour As Date
UnJour = FormCal.Calendrier
Dim S As Object
Set S = usfIns.ActiveControl.ActiveControl
If UnJour <> 0 Then
S.Value = Format(UnJour, "dd/mm/yyyy")
Else
S.Value = ""
End If
End Sub
Pour que cette procédure fonctionne correctement, il faut qu'elle soit
incluse dans le code du Usf.
J'ai testé (c'était mon but d'origine) de l'écrire dans un module en
écrivant :
usfIns.S.Value = Format(UnJour, "dd/mm/yyyy")
mais là, je me faisais jeter comme le mauvais que je suis.

Par cette méthode, j'ai tout de même remplacé 6 macros par une seule (les
procédures appelantes demeurent naturellement, mais un bon copier/coller ne
prends pas de temps).

Merci donc mille fois à Denis pour son aide indéfectible et à Frédéric...
ben parce que c'est Frédéric égal à lui-même ;-)))
Amitiés
Michel



"Frédéric Sigonneau" a écrit dans le message de
news:
Bonjour Michel,

Si je fais :
S = usfIns.ActiveControl.Name
MsgBox S
=> cela me retourne le nom de ma Frame et non pas le nom de la TextBox
qui
est dans celle-ci.


Essaye :

S=usfIns.ActiveControl.ActiveControl.Name

FS
---