Appeler un Textbox à l'aide d'une variable

Résolu/Fermé
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 - Modifié par pijaku le 6/08/2014 à 13:13
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 7 août 2014 à 09:45
Bonjour,

J'ai un petit soucis avec VBA, je souhaite partager une variable entre deux USF et afin de réutiliser cette variable dans une commande (je pense que c'est surtout ici que se trouve le problème).

Pour résumer, j'ai dans mon premier USF plusieurs textbox destinées à accueillir des dates, mon second USF est un calendrier où nous choisissons la date et la réimplantons dans le premier USF.
Jusqu'ici tout fonctionne très bien, le soucis est que pour que ma macro actuelle fonctionne, il me faut un USF calendrier pour chaque textbox destiné à acceuillir une date puisque je spécifie le nom de ma textbox dans l'USF calendrier. Je souhaite donc créer une variable afin de ne pas multiplier les USF calendrier (J'ai 10 textbox pouvant acceuillir des dates)

Voici ce que j'ai fais :

Dans un module j'ai declaré ma variable
Public date2 As Date
Public CaseDate As String


Dans mon premier USF j'ai créé un bouton à coté de chaque textbox pouvant accueillir une date sur ce modèle :
Sub Calendar1_Click()
CaseDate = Echeance1 'nom de ma textbox
Calendrier1.Show vbModeless
End Sub


Et enfin sur mon USF calendrier, je choisis de réimplanter la date selectionné :
   
'Traitement.Echeance1.value = date2 'ceci fonctionne mais je dois donc créer un USF calendrier pour chaque nom de textbox
Traitement.CaseDate.Value = date2 'Ceci ne fonctionne pas (il cherche qqch nommé CaseDate sur mon USF directement) mais cela me permettrait de tout gérer avec le meme calendrier.
   
   Traitement.Show vbModeless
    Unload Me


Je suis désolé, je m'y prend certainement très mal...
Merci d'avance pour votre aide.

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 août 2014 à 13:12
Bonjour,

Essaye peut être :
Traitement.Controls(CaseDate).Value = date2

Si CaseDate est un String ça devrait le faire...
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
6 août 2014 à 13:42
Bonjour Pikaju,

Merci pour ton aide.
En essayant ta solution, je me suis rendu compte d'un autre problème (qui existait déjà avant mais que je n'avais surement pas remarqué)...
En effet, avant d'executer cette ligne :
Traitement.Controls(CaseDate).Value = date2


VBA retourne sur mon USF "Traitement' et lance Userform_Initialize, ce qui me pause problème puisque cela reprend les valeurs de base de mon USF donc si des modifications ont été faite avant de choisir la date, tout est perdu... (et en l'occurence fait planter ma macro car il y'a une valeur qu'il n'arrive pas à récupérer). Est-il possible d'empêcher le lancement de cette procedure, et donc de voir si ta solution fonctionne ?

Merci d'avance,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 août 2014 à 14:11
Lorsque tu "passes" de ton Userform traitement à ton calendrier, comment "fermes"-tu Traitement?
UnLoad Traitement
ou
Traitement.Hide
Normalement traitement.Hide ne fait que masquer l'userform et donc ne relance pas Initialize. A vérifier toutefois.
Sinon ne ferme pas traitement et utilises les propriétés Modales de tes userform...
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
Modifié par Villette54 le 6/08/2014 à 15:02
Là je suis perdu, mais alors complètement....

Au début je ne fermais aucun USF j'utilisais les propriétés modales (plutôt non modales) pour que Calendrier1, "passe au dessus" de traitement. sans rien fermer.
Mais ne connaissant pas toutes les particularités d'un USF non modale je me suis résigné à juste .hide mon "Traitement" ... Et enfin en désespoir de cause, j'ai essayé de Unload mon "Traitement".

Dans les 3 cas, au moment d'executer cette ligne
Traitement.Controls(CaseDate).Value = date2

VBA relance l'initialisation de traitement.

Je ne comprends vraiment pas pourquoi cette procedure se relance à chaque fois...

En lien l'USF complet, je ne sais pas si cela pourra t'aider. Pour ma part, je ne comprend pas 90% de ces procedures car l'USF n'est pas de moi et j'ai gardé le code dans l'état.
http://cjoint.com/data3/3HgpcBZSioi.htm

PS : Ma question n'a plus rien à voir avec le sujet d'origine désolé.
Edit : Erreur dans le lien.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 août 2014 à 15:01
Pourrais tu plutôt me passer le classeur, même sans données... avec les 2 userforms et leurs codes...
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
Modifié par Villette54 le 6/08/2014 à 15:26
J'ai retiré quelques données, mais je t'ai laissé deux exemples et les quelques données de base pour que le fichier soit utilisable.

Je m'excuse par avance, car il risque de te brûler les yeux... notamment au niveau du code que j'ai créé moi-même, des formules ou même de la mise en page...

Encore merci pour ton aide.

http://cjoint.com/data3/3Hgpzfp92mU.htm
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 août 2014 à 15:30
Si tu parle de l'userform qui se lance avec le petit + à côté de la date d'échéance de l'action 1, il fonctionne super bien...
La date saisie dans le calendrier vient se mettre ou il faut sans rien dérégler............
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 août 2014 à 15:39
Regarde ton fichier en retour.
Je t'ai fait les4 premiers boutons "+". Ils fonctionnent bien.
Par contre, Calendar est le nom d'un contrôle VBA. J'ai donc renommé tes boutons Calendrier...
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
7 août 2014 à 07:33
Bonjour Pikaju,

Effectivement, l'implantation de la date se fait sans soucis.
Mais si tu essayes de modifier le texte avant (ex : je change la description de l'incident, je met une date d'échéance puis je valide --> mes modifications dans la description ne sont pas prise en compte, car l'USF s'est initialiser lors de l'utilisation du calendrier (regarde en step by step)

Par contre, je n'arrive pas à utiliser le fichier que tu m'as envoyé dès que je clique sur un + il me met un "Compil Error: Method or data member not found" sur le calendrier1 alors qu'il est bien là avec le bon nom (Je deteste la version d'Excel que nous avons au boulot, j'ai souvent des erreurs sans explication comme ça alors que je ne les ai pas à la maison)

Encore merci, pour ton aide.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 août 2014 à 08:09
Salut,

"Compil Error: Method or data member not found"

Ma faute, ma très grande faute....
J'ai nommé un bouton de commande Calendrier1 tout comme l'userform... Passe bien en renommant l'userform Calendrier.

Par contre, je n'arrive pas à reproduire le second bug. Pour moi tout va bien...

Le fichier avec quelques modifications (notamment dans le module 1)
https://www.cjoint.com/?DHhihUymFko
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
7 août 2014 à 09:40
Ok pour la solution du premier bug... Je n'avais meme pas remarqué je manque vraiment de pratique...

Pour ce qui est du second bug, j'ai réussi à le solutionner avec une nouvelle variable pour me faire passer outre la procedure initialize, donc cela ne me posera plus de soucis.

Merci d'avoir retravailler un peu mon module 1, j'avais effectivement eu quelques difficultés pour le créer (en même temps j'avais pas initialisé ma variable...).

Je pense que tous les problèmes évoqués ont été solutionnés... Merci beaucoup.

Puis-je me permettre d'abuser de ta bonté en te demandant de jetter un oeil à un autre de mes soucis ici ? Ou dois-je recréer un sujet adapté (qui pourra peut-être aider d'autres personnes) ?
Il s'agit principalement d'alimentation/affichage dans les textbox (le format de la date, et faire en sorte qu'il y est des menus déroulants dépendants).

Encore merci.
0