shadockgreg
Messages postés18Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention 5 septembre 2006
-
2 août 2006 à 18:32
shadockgreg
Messages postés18Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention 5 septembre 2006
-
7 août 2006 à 00:48
Bonjour,
J'ai cree un formulaire qui me retourne une date.
Je voudrais stocker cette date comme variable publique pour pouvoir la reutiliser.
Des idees ?
Merci,
Greg
Note :
En declarant ma var publique dans mon formulaire, je n'y ai pas acces par la
suite dans les modules.
En faisant ma declaration dans un module ca ne marche pas davantage.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 4 août 2006 à 00:18
Et non, pas Match, mais il faut voir du côté de "Find" et "Next".
Admettons que tu recherches le mot "cowboy", dans tes cellules de la Feuil1 :
Sheets("Feuil1").Range("A1").Select
Cells.Find(What:="cowboy", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
(cherche, à partir de A1, le mot "cowboy" [tu peux aussi mettre une variable], la recherche s'effectue par ligne)
MsgBox Selection.Value 'te donnera "cowboy" s'il y a ce mot
Cells.FindNext(After:=ActiveCell).Activate
(recherche du suivant)
@++
Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
pymaster
Messages postés74Date d'inscriptionvendredi 14 juillet 2006StatutMembreDernière intervention14 août 2006 2 août 2006 à 19:43
rebonjour
Normalement c'est supposé fonctionner. Il doit y avoir un bug quelque part. Premièrement est ce que DatetoInput est toujours déclaré dans ton formulaire et dans ton module en même temps ? Si c'est le cas alors il va toujours allez modifier la valeur de lui dans ton formulaire avant ce qui pourait causer l'erreur ici.
Pour corriger ce genre de problème je te conseil de prendre une fonctione global pour acceder à tes variables dans ton module
Module
--------------
Private gMadate as date
public function getMaDate() as date
getMaDate = gMaDate
end function
public sub setMaData(ByVal dte as Date )
gMaDate = dte
end sub
-----------------
Formulaire
-----------------
setMaDate( dateQueTuVeuxMettre )
....
msgbox ( getMaDate )
Voila, c'est plus de code mais c'est aussi plus facile pour trouver les erreurs car tu peux placer des BreakPoint à l'entré de tes fonctions.
Aussi n'oublie pas que si une erreur dans le code se produit alors les valeurs global sont perdu. Donc ça peux te causer se genre d'erreur
Avec ça tu devrais au moins être capable de trouver l'erreur,
Bonne chance
PY
Vous n’avez pas trouvé la réponse que vous recherchez ?
Il faut t'assurer que la variable DateToInput soit déclarée uniquement
dans ton module, au tout début du code, après Option Explicit , si
c'est le cas (et ça devrait...) et à l'extérieur de toutes procédures.
Dans ton formulaire, si tu écris
DateToInput = InputBox("Entrez une date")
MsgBox DateToInput
ça te retournera la date inscrite s'il n'y a pas d'erreur de format, sinon une erreur de type (#13)
Le mieux serait peut-être de déclarer ta variable As Variant et de définir toi-même si c'est une date
Public DatetoInput as Variant
.....
Sub XYZ()
DateToInput = InputBox("Entrez une date")
If IsDate(DateToInput) Then ' vérifier si c'est un bon format de date
MsgBox CDate(DateToInput) ' force le texte entré à devenir une date traitable
Else
MsgBox "Il y a une erreur dans le format de la date"
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 3 août 2006 à 03:51
Shadockgreg : tu dis
"Dans mon module :
Public DatetoInput as Date
' Msgbox n'affiche rien
MsgBox DatetoInput"
Il faut bien entendu avoir au préalable donner une valeur à la variable "DatetoInput".
En gros, tant que tu appelles cette variable dans le module, tu n'auras rien (c'est logique, il faut que le UserForm soit lancé).
@++
Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
shadockgreg
Messages postés18Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention 5 septembre 2006 3 août 2006 à 19:55
Oui, c bien le prb Mortalino. Je perds ma valeur apres qql temps quand mon formulaire est ferme. Mt par contre, DatetoInput est uniquement declaree dans le module (en declaration).
MPI, merci pour ton aide. Ca ma aide sur la declaration publique. Ta deuxieme explication colle moins avec ce ke je recherche vu ke lutilisateur ne saisit la date kune seule fois... et quelle est conservee ensuite ds le module.
1. QUESTION / A QUOI SERT L'option EXPLICIT ?
Pour que ma date soit sauvegardee, j'ai du mettre mon userform en Sub et pas Private Sub...
2. Quelle difference cela fait ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 3 août 2006 à 23:46
Option Explicit oblige à déclarer les variables utilisées. En fait, tu
peux rechercher dans l'aide et tu trouveras toutes les explications.
Pour le déclarer par défaut, tu vas dans le menu Outils de l'éditeur
VBA, puis Options. Dans l'onglet Éditeur, tu coches «Déclaration des
variables obligatoire» et moi j'en profite pour décocher «Vérification
automatique de la syntaxe» qui t'envoie toujours un MsgBox d'erreur qui
m'énerve... :)
"Mettre ton UserForm en Sub" ???
Qu'est-ce que c'est que ça ?
Pour que ta date soit reconnue partout et tout au long de la session,
la variable doit être déclarée dans un module en Public. Ensuite, selon
le programme, tu l'initialises en lui donnant une valeur. Ça peut être
dans une procédure Private ou Public, dans un formulaire ou un UserForm
ou encore dans une fonction d'un module ou d'un module de classe. Quand
je parle de Module, c'est un module de base (.bas)
Pour la 2e partie, le fait de déclarer une variable As Variant permet à
l'utilisateur d'entrer ce qu'il veut sans générer d'erreur. Ensuite tu
peux vérifier ce qui a été entré. Si tu veux que ce soit une date, tu
fais If IsDate(MaVar)... Else ...End If
En utilisant une variable As Date, si l'utilisateur entre "ABC", ça va
générer une erreur d'Excel (mauvais type de donnée - Erreur 13)
Personnellement, je préfère gérer les erreurs moi-même, mais bon...
Pour terminer, normalement, lorsque la variable est déclarée en
Public dans un module et qu'on lui affecte une valeur à un moment
donné, cette variable devrait conserver cette valeur tout au long de la
session ou jusqu'à ce qu'elle soit changée ailleurs dans le programme.
Ça m'est déjà arrivé de perdre cette valeur en chemin, mais je n'ai
jamais su pourquoi (???)
Lorsque tu fermeras l'application, cette valeur deviendra nulle et ce
sera à recommencer à la prochaine session. Si tu veux conserver cette
valeur pour qu'elle soit utilisable à chaque fois que tu ouvres le
programme, alors il faudra utiliser d'autres méthodes et ça pourrait
devenir le sujet d'un autre Post...
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 3 août 2006 à 23:55
Très bonnes explications de MPi,
je rajouterai :
"Ça m'est déjà arrivé de perdre cette valeur en chemin, mais je n'ai jamais su pourquoi"
=> C'est Microsoft lol
Pour info, ma technique de recherche de la Première ligne vide est :
PLV = Columns(1).Find("", [A1], , , xlByRows, xlNext).Row
Je l'avais dans un prog, et du jour au lendemain il m'a envoyé boulé (avec erreur)
"Si tu veux conserver cette valeur pour qu'elle soit utilisable à chaque
fois que tu ouvres le programme, alors il faudra utiliser d'autres
méthodes"
=> C'est simple, il est avec Excel, il peut stocker ce qu'il veut dans une cellule (valeur, date, nom...) et la récupérer quand il le veut (et donc par l'évènement ThisWorkbook_Open)
@++
Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
shadockgreg
Messages postés18Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention 5 septembre 2006 4 août 2006 à 00:07
Pas mal pour la premiere ligne vide. Pour rechercher une valeur qui apparait plusieurs fois, vous avez des idées. EN part. Je cherche un num de ligne et avec Match ca ne marche pas ...
shadockgreg
Messages postés18Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention 5 septembre 2006 4 août 2006 à 00:15
merci pour ta reponse.
Je ne conserve pas non plus bien longtemps le resultat et je ne sais pas pkoi, j'obtiens 0 apres un moment. Comment faire pour conserver la valeur ss passer par des ecritures ds Excel... Jai fait ca mais ca me semble etre du bricolage !!
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 4 août 2006 à 11:22
Mortalino, intéressante ta méthode de recherche dans un sens uniquement.
Je pense que je vais adopter :)
La méthode que j'utilise retourne au début et recommence en boucle et
je dois vérifier l'adresse de départ (première valeur trouvée) ... ce
qui complique un peu le code.
Pour les valeurs de variables qui se perdent, j'aimerais bien en
comprendre le pourquoi (?) En VB, ça ne m'est jamais arrivé. Mais avec
Excel, c'est arrivé à quelques reprises...
Comme si Excel utilisait des adresses-mémoire déjà allouées par lui-même en cours de route...