Declaration variables Formulaire VBA

[Résolu]
Signaler
Messages postés
18
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
18
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
5 septembre 2006
-
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.

13 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
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"
Messages postés
74
Date d'inscription
vendredi 14 juillet 2006
Statut
Membre
Dernière intervention
14 août 2006

Bonjour

Créé toi un module, les fonctions et valeurs publique d'un module en VBA dont visbile par tous les formulaires/modules

Sinon fait NomDuModule.FonctionQuiRetourneMaValeurPublic()

PY
Messages postés
18
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
5 septembre 2006

Oui je sais. EN fait voila comment jai procede:

Dans mon formulaire :
DatetoInput = ....
' Msgbox m'affiche la bonne valeur
MsgBox DatetoInput

Dans mon module :
Public DatetoInput as Date
' Msgbox n'affiche rien
MsgBox DatetoInput

Prb...
Messages postés
74
Date d'inscription
vendredi 14 juillet 2006
Statut
Membre
Dernière intervention
14 août 2006

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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
***********************************

Dans mon formulaire :

DatetoInput = ....

' Msgbox m'affiche la bonne valeur

MsgBox DatetoInput


Dans mon module :

Public DatetoInput as Date

' Msgbox n'affiche rien

MsgBox DatetoInput
************************************


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"

    End If

End Sub


MPi
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
Messages postés
18
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
5 septembre 2006

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 ?

Merci !!!!
Greg
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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...

MPi
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
Messages postés
18
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
5 septembre 2006

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 ...
Messages postés
18
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
5 septembre 2006

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 !!
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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...

MPi
Messages postés
18
Date d'inscription
mardi 18 juillet 2006
Statut
Membre
Dernière intervention
5 septembre 2006

Merci Mortalino pour cette astuce. Jessaye demain et te fais un retour. Je sens que cà va menlever une grosse epine du pied. Merci !!!!
++ Greg