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

VBA Access Discussion :

Changer par VBA le nom d'un contrôle se trouvant dans le formulaire en cours [AC-2003]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut Changer par VBA le nom d'un contrôle se trouvant dans le formulaire en cours
    Bonjour !

    Je voudrai savoir s'il est possible de changer le nom d'un contrôle (par du code) étant situé dans le même formulaire que le code en question.

    Je m'explique :

    Dans un formulaire, j'ai une liste de jour (lundi, ..., vendredi) que je voudrai remplir grâce à un contrôle calendrier. Mais ce contrôle étant assez gros, j'aimerai vraiment évider d'en mettre un par jour. Je voudrai donc, par exemple dans l'évennement "Mardi_GotFocus", changer le nom de ce contrôle en "DateMardi". De cette façon, je pourrai attribuer à mon champ "Mardi" la valeur de mon contrôle "DateMardi", et ainsi, avec un nom chaque fois différent pour le même calendrier, je ne modifierai pas mes autres champs "Lundi", "Mercredi", etc, même en changeant la valeur du calendrier.


    J'ai l'impression de ne pas être très claire, mais si vous n'avez pas compris ce que je veux faire peu importe, ma question se résume à ceci : comment changer le nom d'un contrôle se trouvant dans le formulaire sur lequel on est ?


    Pour un autre formulaire, je sais qu'on peut faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.OpenForm "Nom_Du_Formulaire" , acDesign
    [Forms]![Nom_Du_Formulaire].[Champ_A_Modifier].Name = "nouvelle valeur"

    Le problème, c'est qu'ici, le contrôle se trouvant dans le même formulaire, Access ne veut pas executer "OpenForm". J'ai essayé d'ajouter un "DoCmd.Close" la ligne du dessus, mais il refuse également...

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    il n'est pas nécessaire de modifier le nom du contrôle; il suffit de placer sa valeur dans la zone de texte qui a le focus. Tu disposes à priori d'une zone de texte par jour de semaine (soit 7 ) et un seul contrôle calendrier.
    Place le contrôle calendrier dans un formulaire à part, et que tu ouvres en cliquant dans une des 7 zones de texte; la date sélectionnée est renvoyée dans le contrôle actif.
    Sinon, le contrôle DatePicker est plus petit que le contrôle calendrier.
    ou encore regarde ceci :http://www.developpez.net/forums/d24...us-zone-texte/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup pour cette réponse, j'étais partie pour contrôler dans le calendrier une variable globale qui changerait en fonction du jour, mais le dernier lien est en fait super


    Cela dit, histoire de progresser un peu, j'aimerai tout de même comprendre : ouvrir un formulaire en cliquant sur un contrôle, ça je vois, mais comment faire pour qu'il retourne une valeur au champ qui l'a appellé ?

    Et puis, si quelqu'un connait la réponse à ma première question, elle m'intéresse quand même, on ne sait jamais, ça pourra servir .


    En attendant, grâce à toi, mon problème de calendrier est résolu, merci pour ton aide

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par lil404 Voir le message
    Je voudrai savoir s'il est possible de changer le nom d'un contrôle (par du code) étant situé dans le même formulaire que le code en question.
    Non

    Philippe

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    Oh.
    Ca a le mérite d'être clair .
    Merci Philippe.

    Allez, promis, plus que la réponse d'Ilank et je mettrai le tag résolu

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Citation Envoyé par lil04
    Cela dit, histoire de progresser un peu, j'aimerai tout de même comprendre : ouvrir un formulaire en cliquant sur un contrôle, ça je vois, mais comment faire pour qu'il retourne une valeur au champ qui l'a appellé ?
    Tu peux passer par une fonction qui reçoit l'appel du contrôle, ouvre le formulaire qui contient le calendrier attend qui'l soit fermé puis renvoie la date choisie dans le contrôle appelant.
    Ou encore, tu peux déclarer dans le formulaire "Calendrier" une variable de type Access.Control qui sera associée au contrôle appelant.

  7. #7
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour,

    Pour info, pour changer le nom d'un controle de formulaire il faut que le formulaire soit ouvert en mode création (il est possible de la faire par code) puis de modifier le nom du controle contenu dans ce formulaire.

    Mais il est imposssible de faier cette opération dans du code VBA du formulaire car le formulaire ne peu pas être lancé pendant la modification dû simplement au problèmes de résolution de noms.
    Exemple simple un bouton s'appelant Btn contenant du code sur l'évènement Btn_Click, si son nom change durant l'execution le code évènement est perdu et pire encore tout les pointeurs vers le bouton graphique sont perdu donc c'est techniquement impossible et ce dans tout les languages (C, C++, QT, VB, VBA, Tcl/tk, Oracle Forms, etc, ...).

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    D'accord, merci beaucoup pour ces précisions.


    Je ne connaissais pas le type Access.Control, j'ai bien compris la solution, merci =) . Encore une chose :

    Tu peux passer par une fonction qui reçoit l'appel du contrôle, ouvre le formulaire qui contient le calendrier attend qui'l soit fermé puis renvoie la date choisie dans le contrôle appelant.
    Le problème est le même : comment savoir quel contrôle l'a appelé ?

  9. #9
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Tu n'as pas besoin de le savoir puisque c'est une fonction et pas une procédure c'est à dire qu'elle va forcément renvoyer une valeur à l'apellant.

    exemple de déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public function toto() AS String
     
    'Traitement
    toto = "Ma valeur de retour"
     
    End Function
    L'apellant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
     
       Dim resultat as String
     
       resultat = toto()
     
       msgbox resultat
     
    End sub
    Cela affiche dans une boite de dialogue le message "Ma valeur de retour"

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    Aaaaaaaaaaah

    D'accord, merci pour toutes ces réponses =)

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    autre exemple :
    Placer sur un nouveau formulaire
    un contrôle Calendrier "Calendar0" sur un formulaire
    + un bouton pour btnApply libellé "Appliquer" pour valider
    + bouton btnCancel libellé "Annuler" pour fermer sans valider.
    Feuille de propriété :
    Formulaire Onglet événement
    Sur Chargement : [Procédure événementielle]
    Onglet Autres
    Fen Indépendant : Oui

    Dans le module du formulaire écrire :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Dim ControlAppelant As Access.Control
     
    Private Sub Form_Load ()
     On Error Goto NoControl_Error
     BtnApply.Enabled=False
     BtnCancel.Enabled=true
     CurDate=Date() 
     Set ControlAppelant=Screen.ActiveControl
     If Not Isnull(ControlAppelant.Value) And IsDate(ControlAppelant.Value) then CurDate=ControlAppelant.Value
    NoControl_Error:
     PrevDate=CurDate
     Calendar0.Value=CurDate
    End sub 
     
    Private Sub RetourProc()
     If not (ControlAppelant Is Nothing) Then ControlAppelant.Value=CurDate
     Docmd.Close AcForm,Form.name,AcSaveNo
    End sub 
    'Retourner la date choisie
    Private Sub BtnApply_Click()
     CurDate=Calendar0.Value
     RetourProc
    End sub
     
    'Retourner la date initiale (Date du jour si aucune date initiale
    Private Sub BtnCancel_Click()
     CurDate=PrevDate
     RetourProc
    End sub
     
    'Sélection d'une nouvelle date rendre le bouton Appliquer disponible
    Private Sub Calendar0_AfterUpdate()
     BtnApply.Enabled=True
    End sub 
     
    'Sélection d'une nouvelle date appliquer les changements 
    ' et fermeture du formulaire
    Private Sub Calendar0_DblClick()
     BtnApply_click
    End sub
    Dans un module standard écrire la fonction d'appel du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public PrevDate as Date, CurDate as Date
    'Fonction d'appel du formulaire
    Public Fucntion GetCalendar() As Date
     Docmd.OpenForm "Calendrier",,,,,acdialog
     GetCalendar=CurDate
    End sub
    Maintenant, pour utiliser dans une zone de texte écrire dans la feuille de propriété - Onglet événement :
    Sur click : =GetCalendar()

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    Fiou, compliqué tout ça, mais je crois avoir à peu près compris. A quelques détails près : pourquoi utiliser dans le champ texte la fonction getCalendar ? Est-ce que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If not (ControlAppelant Is Nothing) Then ControlAppelant.Value=CurDate
    ne remplit pas déjà le champ ?

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    Pour remplir le champ, il faut bien appeler la fonction.
    Le signe "=" ne sert qu'à préciser que l'événement exécute une fonction. Sans ce signe, Access recherche une procédure ou une macro.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    Hum en fait en relisant tout ça je crois que ma question était mal formulée : je comprends finalement pourquoi on appelle la fonction (le formulaire ne s'ouvre pas tout seul, elle est donc nécessaire...) mais pourquoi retourner une valeur ? Lorsque l'on marque controle.value, on entre déjà une valeur dans un champ, non ?

  15. #15
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Oui, tu as raison. J'ai donné une version hybride de ce que j'ai. En fait, avant je renvoyais une date sans passer par le contrôle.
    J'ai transformé la fonction pour qu'elle renvoie directement la date choisie dans le contrôle appelant, mais j'ai laissé les variables PrevDate et CurDate dans le code; mais elles ne sont plus utiles.
    Donc tu peux appeler la fonction comme je l'ai écrit ou encore de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Texte1_Click()
       Me.Texte1=GetCalendar()
      'ou simplement
      GetCalendar()
    End sub

  16. #16
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Le signe "=" indique que l'on effectue une affectation. On affecte à une variable/propriété une valeur.

    Le retour de la variable dans la fonction permet de l'utiliser comme ça dans du code extérieur


  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    (J'ai bien compris à quoi servait le signe "=", je ne comprennais juste pas son utilité dans le cas présent )

    Compris. Merci pour ces précisions .

  18. #18
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Maintenant lil404, tu dis que tu avoir mal posé ta question ou plutôt que les réponses ne correspondent pas à ce que tu souhaites faire.

    Sans passer par un autre formulaire. Donc en ayant un seul contrôle calendrier pour les 7 jours de la semaine et dans le même formulaire
    Je crois qu'en fait, tu as peut-être juste besoin de ceci :
    1) Quand l'un des 7 champs "Lundi" ... "Vendredi" reçoit le focus
    alors dans le module du formulaire tu écris :
    Pour l'exemple, le contrôle calendrier s'appelle Calendar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim ControlAppelant as Access.Control
    Public Function SetCalendar()
     Set ControlAppelant=Screen.ActiveControl
     Calendar.Value=iif(IsDate(ControlAppelant.Value),ControlAppelant.Value,Date())
    End Function
    2) quand la date du calendrier a été choisie et modifiée alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Calendar_AfterUpdate()
     ControlAppelant.Value=Calendar.Value
    End sub
    Dans la feuille de propriété des 7 contrôles des jours de la semaine tu écris
    Sur Réception focus : =SetCalendar()

    En clair, ici tu utilises un seul contrôle calendrier, un seul formulaire, les dates de chaque jour apparaissent sur le calendrier et sont récupérés dans le bon contrôle.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 35
    Points
    35
    Par défaut
    les réponses ne correspondent pas à ce que tu souhaites faire.
    Ce n'était pas exactement ce que j'avais demandé, c'est vrai, mais toutes ces réponses me vont . Je continue juste à poser toutes ces questions parce que j'aimerai apprendre .



    Quand je recopie ton code, Access me marque "Impossible d'attribuer une valeur à cet objet" à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ControlAppelant.Value=Calendar.Value

    J'ai l'impression (?) qu'il n'appelle pas la fonction SetCalendar.. j'ai pourtant vérifié, elle est bien orthographiée.

  20. #20
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    C'est dangereux de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ControlAppelant=Screen.ActiveControl
    On sais pas si le control est un bouton par exemple (ou un groupe d'option, un cadre, etc ...), si s'en est un impossible de lui affecter une valeur.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Accédez à la valeur prise par un contrôle se trouvant dans un autre Form
    Par Nokho dans le forum Visual Studio
    Réponses: 3
    Dernier message: 02/01/2013, 13h48
  2. [AC-2010] webbrowser url changer par vba
    Par mapmip dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2012, 13h39
  3. Réponses: 8
    Dernier message: 11/10/2007, 08h03
  4. Réponses: 2
    Dernier message: 16/03/2007, 15h44
  5. Réponses: 7
    Dernier message: 15/06/2006, 17h36

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