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

VB 6 et antérieur Discussion :

[VB6] Ouverture de Forms Conditionelle dans une procédure


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut [VB6] Ouverture de Forms Conditionelle dans une procédure
    Bonjour.

    Le contexte:


    Une application en VB6 avec une 40n de Formulaires. Actuellement nous effectuons une mise à jour de tous les formulaires.

    Dans l'ecran principal nous avons une barre de menu qui nous permet de lancer tel ou tel menu. tout ceci marche trés bien.

    Actuellement, je cherche, via une procédure à ouvrire un formulaire mais ...

    Ici je clic sur mon menu qui va appeler la fonction :

    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
    Private Sub MNBateauPlanChargement_Click()
     
        On Error GoTo InterceptionErreur
     
        'Gestion du plan de chargement
        '=============================
        Screen.MousePointer = vbHourglass
        Call ouvre(GestionBateau)
     
        Exit Sub
    InterceptionErreur:
        Call TraitementErreur("MNBateauPlanChargement_Click Menu_Principal")
        Resume
     
    End Sub
    Ma procédure "ouvre" va devoir verifier si l'option "V2" stocké dans un fichier .ini est active ou non. puis en fonction lancer

    soit un formulaire :
    - GestionBateau

    soit le nouveau
    - GestionBateau2


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public sub ouvre(form_a_ouvrir As Form)
    Dim Chaine As String
     
        'Fonction de lecture du fichier ini
        Chaine = RdChaine("UPDATEVUE", "UtilisationVueV2", "0")
        If Val(Chaine) <> 0 Then
            form_a_ouvrir = form_a_ouvrir & 2
        End If
     
       Load form_a_ouvrir
       form_a_ouvrir.Show
     
    End sub
    Le probléme c'est que je n'arrive pas à concaténer une Chaine de caractére à la suite de l'objet form. (en même temp je comprend)

    j'ai essayer de convertir "form_a_ouvrir" en String, mais il n'aime pas n'ont plus.

    j'ai une autre solution, qui consisterai à passer les deux forms en parametre mais je suis têtu et je veux savoir si cela est possible sans passer les deux.

    merci d'avance de votre aide.

    Guillaume

  2. #2
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 80
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut Re: Ouverture de Formulaire Conditionelle dans une procédure
    Fin Janvier,
    Citation Envoyé par jacma
    J'ai été confronté à un problème similaire il y a peu, consistant à ouvrir une form selon son nom contenu dans une variable. J'ai beaucoup cherché, ici et ailleurs, sans obtenir de solution.
    En l'état actuel de mes recherche, je pense donc que ce n'est pas possible. Si tu trouves quelque chose, préviens
    J'ai suivi tout ceci, en me rappelant tout ce que j'avais essayé, mais il semble que vous arriviez à la même conclusion, ce qui est bien dommage. J'espérais...

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Et si tu passes par le nom de form_a_ouvrir ?
    J'ignore si c'est possible en VB mais j'essaierais un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With form_a_ouvrir
          NomForm = .name & "2"
    End with
    ou sinon, je passerais par l'objet form avec Set

    A tout hasard...

    Bonne chance

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Et bien pour l'instant, je vais utiliser plusieurs parametre dans ma fonction ouvre.

    J'ai essayer avec la propriété ".name" mais VB me signial fierement qu'il s'agit d'une propriété en lecture seul.

    pour le set j'ai essayer plusieurs solution comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MyForm = form_a_ouvrir.Name
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'avec form_a_ouvrir en string ou même en variant !
    Set MyForm = form_a_ouvrir
    Mais je crois que VB6 ne permet pas de le faire. c'est quand même étrange.

    je continu a chercher, si je trouve je poste.

    Merci quand même.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Non, pas
    Set MyForm = form_a_ouvrir.Name
    ça, ça ne peut pas marcher. Je pensais à une collection "Forms" mais là ça dépasse nettement mes compétences : En VBA(97)... on peut faire ça avec les contrôles, pas avec les forms. En VB, je ne sais pas.
    Je te laisse avec les spécialistes

    Bonne chance

    (je continuerai à surveiller pour mon info)

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Oui effectivement

    Je commence à fatiguer sur le sujet, j'ai tester tellement de chose, coéhrente et non coéhrente que .. j'en perd mon algorithmique.

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Points : 166
    Points
    166
    Par défaut
    Bonjour paltron,

    Pour charger une Feuille par dont le nom est dans une variable
    Il faut passer par la collection Forms

    2 solutions pour moi:

    Première:
    faire un load de toutes les feuilles concernées par le contenu de la variable. S'il y a 60 feuilles à charger cela risque d'être trop lourd !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim indice As String
    Dim nom as string
    indice = "V2"
    nom = "Form" & indice
    For i = 0 To Forms.Count - 1
    If Forms(i).Name = nom Then Forms(i).Show vbModal
    Next
    Deuxieme:
    Faire un Add du contenu de la variable
    La VB montre la feuille si elle existe ou la crée dans la cas contraire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim nom As String
    Dim indice As String
    Dim f As Form
    indice = "1"
    nom = "Form" & indice
    Set f = Forms.Add(nom)
    f.Show
    cela te convient-il ?
    Et toi ouskel'n'or ?

    @+

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Oui cela me convient parfaitement.

    Bravo,

    mais je ne pensait pas que Forms.Add(nom) permettai d'ouvrire une forms existante.

    C'est le genre de fonction que je chercher mais celle la je m'en souviendrai.

    le seul probleme c'est si la form n'exite pas. mais ca je peut le gérer autrement.


    Merci beaucoup.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Merci Bouley, je voyais effectivement un truc comme ça mais... bref, je comptais sur toi...

    A+

  10. #10
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 80
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par bouley
    2 solutions pour moi:
    Première:
    faire un load de toutes les feuilles concernées par le contenu de la variable. S'il y a 60 feuilles à charger cela risque d'être trop lourd !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim indice As String
    Dim nom as string
    indice = "V2"
    nom = "Form" & indice
    For i = 0 To Forms.Count - 1
    If Forms(i).Name = nom Then Forms(i).Show vbModal
    Next
    Oui, mais charger toutes les forms . Et pui, pour en créer une nouvelle :

    Deuxieme:
    Faire un Add du contenu de la variable
    La VB montre la feuille si elle existe ou la crée dans la cas contraire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim nom As String
    Dim indice As String
    Dim f As Form
    indice = "1"
    nom = "Form" & indice
    Set f = Forms.Add(nom)
    f.Show
    Là, erreur 424: un objet est requis...

  11. #11
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Si tu as l'erreur 424 c'est justement parceque ta form n'existe pas. si elle existe sa passe niquel.

    edit:

    Parcontre je comprend pas car :

    La VB montre la feuille si elle existe ou la crée dans la cas contraire
    Moi si elle n'existe sa met l'erreur 424 aussi.

  12. #12
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Je viens d'être confronté à un petit probleme du à l'application de ce code.

    Dans mon application, j'ai des boutons recherche qui m'ouvre une form spécial pour la recherche.

    lorsque je valide ma recherche les champs de ma premiere form sont remplis par rapport à ma recherche.


    cependant depuis que j'utilise ma fonction pour ouvrire les formulaire ceci ne fonctionne plus.

    je n'ai aucun message d'erreur qui apparait mais les champs reste vierge.
    si j'ouvre deux fois la premiere form (une fois avec la fonction et une autre avec le traditionnelle form1.show) seul la forme ouverte avec le form1.show acquiere les valeur correct.

    Savez vous comment faire pour renvoyer mes valeur vers le formulaire ouvert via le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim nom As String
    Dim indice As String
    Dim f As Form
    indice = "1"
    nom = "Form" & indice
    Set f = Forms.Add(nom)
    f.Show

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu as deux solutions, soit tu mets tes variables en Public dans le module te servant à ouvrir ta form1, soit tu fais référence au contrôle contenant ta valeur dans le form1 (form2 étant le nouveau form)
    Ton Form1 doit rester ouvert (si tu fais Form1.hide, les valeurs contenue dans ses contrôles sont disponibles dans form2)
    Ex
    Fom2.MonContrôle.text = Form1.LeControl.value... ou Text ou Caption ou tag ou ce que tu veux

    Hide masque le form sans le décharger.

    A+

  14. #14
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    En faite c'est justement mon probléme, les valeurs sont effectivement disponible. dailleurs je les utilisés avant et cela marché trés bien. depuis que j'ouvre mes form par

    set Myform = forms.add("Nomdemonform")
    Myform.show

    tous les composants sont bien disponible, mais lorsque je les mets a jours, (de la même gfaçon que tu me le dis) :

    Fom1.MonContrôle.text = Form2.LeControl.value

    Aucune erreur ne se produit mais les champs n'ont pas bougé.

    de plus, je vien de m'amuser à mettre un point d'arret sur mon form load du Form1 et lorsque je fait :

    Fom1.MonContrôle.text = Form2.LeControl.value

    Mon Form1 se Reload !!

    j'ai l'impression que lorsque on utilise " forms.add("Nomdemonform") " on crée un clone du form.

    mais une chose de sur je n'arrive pas à atteindre les objets de ma form pour les modifiers.

    actuellement je vien de pallier à ce probléme grâce a des variables globalles, mais je n'aime pas cela.

  15. #15
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    de plus, je vien de m'amuser à mettre un point d'arret sur mon form load du Form1 et lorsque je fait :

    Fom1.MonContrôle.text = Form2.LeControl.value
    Ne jamais se référer à des contrôles dont on n'est pas sur qu'ils sont déjà "chargés"
    Form_activate est dans ce cas plus conseillé que Form_load.

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Évidemment, les variables globales, par très sioux. Mais désolé, je ne connais pas le cas, va falloir attendre l'avis d'un spécialiste VB.

    Bon courage

  17. #17
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci de ton Aide quand même.

    Cependant, jmfmarques tu as raison, je suis même surpris, mon code passe pas par le Form_activate mais seulement pas le Form_Load.

    mais là je crois être dépassé par les événements.

    pourquoi mon textbox, ne se met il plus a jour ?

    je vais essayer de me refaire un petit projet simple pour mieux comprendre.

  18. #18
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bon je viens de refaire un test avec un projet et tout ce qui a de plus banal.

    Ce projet comporte 3 forms, avec chacune 1 textBox et 1 bouton

    Et un module pour ma fonction.

    Code du module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function ouvreVue(form_a_ouvrir As String)
     
        Dim MyForm As Form
     
        Set MyForm = Forms.Add(form_a_ouvrir)
        MyForm.Show vbModal
     
    End Function

    Voici le code du bouton de la Form1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Command1_Click()
        ouvreVue ("Form2")
    End Sub
    Voici le code du bouton de la Form2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Command1_Click()
        ouvreVue ("Form3")
    End Sub
    Voici le code du bouton de la Form3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Command1_Click()
        Form2.Text1 = Text1.Text
        Unload Me
     
    End Sub
    Qui peut m'expliquer pourquoi Le Form2.text1 ne prend pas la valeur du Form3.Text1.text ?

  19. #19
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bon...
    1) il y a plusieurs choses que je ne comprends pas dans ton projet :

    a) tentes-tu d'ajouter des forms dynamiquement, et pourquoi ?
    b) dois-tu ajouter dynamiquement des contrôles sur ces Forms ?
    c) charges-tu bien toutes les forms vers lesquelles tu "pointes" pour modifier le texte de tes textboxes ?

    2) confronté avec VB5 à ce genre de situation (ouverture d'une form en utilisant son nom), j'ai toujours choisi l'utilisation d'une boucle telle ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim titi As String
      For I = 0 To Forms.Count - 1
            titi = Forms(I).Name
            If titi = "Le_nom_de_form_a_ouvrir" Then
              Forms(I).Show
       End If
    ceci marchera si, dans l'événement activate de la 1ère Form, tu as chargé (par load, pas show) toutes les forms présentes

  20. #20
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    J'ai environs, 60 forms dans mon projet,

    si je dois les parcourir à chaque fois que je veux ouvrire un formulaire je risque de ralentir l'appli.

    A savoir que je suis entrain de faire evoluer l'appli et chaque formulaire et en double. l'original + la version 2 Nomduform2

    Si j'ouvre mes forms avec cette fonction c'est pour gerer les deux versions. dans une seul fonction sans parcourire + de 120 formulaires.


    Je n'essaie pas d'ajouter des Forms ni des controles dynamiquement.

    ce que je veux c'est :

    Ouvrire mes forms via Une fonctions qui géres les deux version sans toutes les parcourire pour verifier si elles existent.

    Puis, dans les form que je viens d'ouvrire, j'ai des bouton qui me permettent d'acceder a d'autre Forms (qui me permette de faire des recherches) et une fois la recherche fini les champ de mon form son rempli grace a mon formulaire de recherche.

    Pour savoir si je charge bien mes Form, je t'avoue que j'en doute mais j'utilise exactement le même principe que l'exemple que je vien de donner. (Sont il chargé ?)

    Peut tu me dire si c'est normal que dans mon exemple sa ne marche pas ??

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. [VB6] Inserer Windows Media player dans une form [Debutant]
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/03/2006, 12h55
  3. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31
  4. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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