IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Vba envoi valeur à un textbox dans un etat


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 81
    Points : 60
    Points
    60
    Par défaut Vba envoi valeur à un textbox dans un etat
    Bonjour,

    Je dispose d'un état comprenant plusieurs textbox indépendant aux quel je souhaite affecter des valeurs à l'ouverture de l'état.

    J'ai tester les codes les codes suivant pour affecter cette valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Me.TexteNom = Form_Consultations.TexteNom
     
    Reports("RapportFr").Controls("TexteNom")=Forms("Consultations").Controls("TexteNom")
     
    Me.texteNom="blabla"
     
    Reports("RapportFr").Controls("TexteNom")="blabla"
    Dans tous les cas, je reçois le même message d'erreur, à savoir

    Il est impossible d'affecter une valeur à cette objet
    Après vérification (de toutes façon, le message ne laisse pas trop de solution), c'est bien au niveau du textBox de l'état que cela bloque....

    Est-il strictement impossible d'affecter soi-même une valeur à un objet dans un état? (si je pose la question de façon générale, c'est parce que j'ai le même problème avec deux autres états, affectant aussi bien des textbox que des labels.....)

    Merci par avance pour votre aide.

  2. #2
    jfc
    Invité(e)
    Par défaut Affecter une valeur à un contrôle
    Cela est possible d'affecter une valeur d'un contrôle d'un état. Je fais exactement dans un état ce que tu essaies de faire, càd affecter la valeur d'un champ indépendant de formulaire à un état qui est tout aussi indépendant.

    Le code est placé sur l'événement Print de la section Détail

    Voici l'exemple du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Dim ctl As Control
    Dim lValue As Long
     
    On Error GoTo Détail_Print_Error
     
    For Each ctl In Me.Détail.Controls
        Debug.Print ctl.Name
        If left(ctl.Name, 3) = "mde" Then
            ctl.value = Forms!frmEDBTableauBord.Controls(ctl.Name).value
     
        End If
        If ctl.Name = "ctlPrix" Then
            lValue = Forms!frmEDBTableauBord.Controls("ctlPrix").value * 100
     
            Me.ctlPrix.value = lValue / 100
     
        End If
     
     
     
    Next

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 81
    Points : 60
    Points
    60
    Par défaut
    Merci jfc,

    Toutefois, ton code est un peu technique pour moi (je n'ai pas trop l'habitude de jongler avec des objets comme tu le fais), aussi, si tu permets, je vais reprendre ton exemple en expliquant ce que je comprend histoire d'être sur de moi....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim ctl As Control
    Dim lValue As Long
     
    On Error GoTo Détail_Print_Error
    bon, là, c'est pas dur, tu déclare une variable de type control, une variable de type long et tu prépares ta gestion d'erreur...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ctl In Me.Détail.Controls
    le code qui suivra sera appliquer à tous les contrôles qui se situent dans détail...

    je suppose que cela sert au debuggage, pour connaitre les valeurs des objets qui ont été traités...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If left(ctl.Name, 3) = "mde" Then
    tu récupères les trois premières lettre du nom de l'objet en partant de la gauche... et tu regardes si elles sont égale à "mde"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctl.value = Forms!frmEDBTableauBord.Controls(ctl.Name).value
    dans le formulaire "frmEDBTableauBord", tu prend la valeur du control ayant le même nom que dans ton état, tu récupère la valeur et l'attribu au controle dans l'état....

    (bon, je saute le endif....)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If ctl.Name = "ctlPrix" Then
            lValue = Forms!frmEDBTableauBord.Controls("ctlPrix").value * 100
     
            Me.ctlPrix.value = lValue / 100
     
        End If
    et là, si vérifie s'il s'agit du prix (ce qui me laisse penser que la première donnée était le nom d'un article) et si c'est le cas, tu récupères le prix (multiplié par 100) puis tu affectes ce résultat (divisé par 100) à ton controle dans l'état....

    le jeu des *100 puis /100 permettant d'utiliser le type long au lieu d'un réel. (je suppose que c'est lié à un gain de place dans la mémoire.... non?)

    Donc, si je comprend bien, tu fais : me.NomDuControle.value=valeur...

    Quel genre de controles utilises-tu dans ton état? dans mon cas, ce sont des textBox, et je n'ai pas de paramètre Value pour attribuer ma chaine de caractères....

    Je vais quand même tenter d'utiliser une variable de type controle, et de lui donner le nom de mes controles au fur et à mesure... en espérant que ça marche comme ça....


    merci pour ton temps.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 81
    Points : 60
    Points
    60
    Par défaut
    Après test,

    Est-il possible d'affecter un objet que je choisi à ma variable de type objet?

    Parce qu'en fait, je dispose de 72 champs textes dans mon états qui sont remplis en 4 phases distinctes (une quinzaine récupèrent des valeurs dans le formulaire précédent, les autres les obtiennes de requêtes....)

    donc, je peux difficilement me permettre de parcourir l'ensemble des objets à chaques fois.....

    Par contre, si je peux lui dire que Clt correspond à la variable me.texteNom et ainsi de suite, ça devient tout à fait gérable....

  5. #5
    jfc
    Invité(e)
    Par défaut
    Le bouclement sur 72 objets est très rapide, surtout si tu fais un choix de traitement pendant la boucle.

    Pour ma part, j'ai aussi été confronté à ce type de traitement.
    J'ai utilisé la propriété des textbox Remarque (en anglais Tag) en y saisissant une valeur (p ex. cdyn pour champ dynamique).

    Ensuite, dans la boucle For Next, il suffit d'examiner la propriété Remarque, lorsqu'elle contient cdyn, tu modifies la valeur.

    Tu remarqueras que dans le cas que je t'ai montré, seuls les contrôles qui commencent par mde se modifient, les autres pas. C'est aussi une autre piste que tu peux suivre.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 81
    Points : 60
    Points
    60
    Par défaut
    Oki.

    L'ennuis, c'est qu'avec le code que j'ai, je veis devoir boucler 4 fois sur mes 72 objets, alors que j'aurais entre 12 et 32 modifs. Ca fait pas mal de gaspillage.

    Mais je n'ai plus trop le temps de chercher à optimiser absolument. Donc, je pense que je vais me rabattre sur cette solution.
    Avec une select case dans ma boucle, cela devrait assez bien fonctionner.

    En tout cas, j'en teste une première, et je vous tiens au courant.

    En attendant, si quelqu'un d'autre connait le moyen d'affecter un objet existant à une variable de type objet, ce serait vraiment parfait..

    Dans tous les cas, merci à toi jfc, ça faisait un moment que ce problème me prenait la tête.

  7. #7
    jfc
    Invité(e)
    Par défaut
    Salut,

    Excuses-moi, j'ai oublié de t'indiquer comment affecter un objet variable, c'est tout simple, par exemple ctl ensuite s'adresse au contrôle nommé monControl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ctl = me.controls("monControl")

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 81
    Points : 60
    Points
    60
    Par défaut
    AAAAAh, ça c'est super, comme je connais déjà les noms de mes contrôles, je peux passer par cette méthode, ce qui me fera gagner 3 millièmes de secondes, et un peu de mémoire machine... lol

    En tout cas, grâce à toi, cela fonctionne.

    Petite précision pour le prochain qui aurait ce genre de soucis.

    si la donnée vient d'un autre formulaire, ça merde, et il faut passer par ton code, ou, dans mon cas par

    dim ctl as control

    Set ctl = me.controls("monControl")

    ctl.value=mavaleur

    set ctl = nothing

    (je suppose qu'il y a un set ctl = nothing pour fermer le tout)

    sinon, si la valeur provient d'une requête, le code suivant fonctionne

    Me.Controls("NomControl") = MaValeur

    en effet, j'ai eut la surprise de voir ce code fonctionner dès que j'ai supprimer les me.textbox=AutreForm.TextBox


    Voilà.

    Encore merci pour tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser la valeur d’un textbox dans une requete sql
    Par Developpeur19 dans le forum VB.NET
    Réponses: 8
    Dernier message: 14/11/2008, 09h10
  2. Réponses: 3
    Dernier message: 19/02/2008, 10h49
  3. Recuperation La valeur de textBox dans un autre Form
    Par FITRI dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/02/2008, 17h16
  4. [VBA] controle visible ou non dans un etat
    Par choubak dans le forum IHM
    Réponses: 2
    Dernier message: 27/05/2007, 17h53
  5. [VBA-E] SetFocus sur TextBox dans UserForm_Initialize ne fonctionne pas ?
    Par Jipété dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/11/2006, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo