Besoin de support VBA... encore

Résolu
Bonjour,

travaillant toujours sur un projet incluant du VBA, j'ai quelques questions à vous poser :

sur l'un de mes Userform, j'ai créé une zone de liste ainsi qu'un bouton "Valider". L'utilisateur doit sélectionner l'un des choix proposer, puis cliquer sur valider pour passer à la fenêtre suivante.
1. comment programmer le passage à la fenêtre suivante à partir de sa selection, puis son clic ?
2. comment recopier sa sélection dans le userform suivant ?

Un peu plus loin dans ce projet, j'aimerais afficher une fenêtre (userform) récapitulative. Selon les choix émis par l'utilisateur, ce userform contiendra un nombre de données variables. D'où ma question :
Est-il possible de créer une macro permettant de sortir un userform ayant un nombre d'objets variable ?

Merci d'avance pour tous ces renseignements, je serais surement amené à vous resolliciter à l'avenir.

Alanderson69
Configuration: Windows 2003
Firefox 3.0.9

16 réponses

Résumé de la discussion

Le fil aborde la gestion des UserForm en VBA, avec la problématique de passer à la fenêtre suivante après que l'utilisateur a sélectionné un élément dans une liste puis cliqué sur Valider. Des solutions proposées préconisent de transférer la sélection vers le formulaire suivant en affectant TextBox.Text = var1 et d'afficher ce formulaire via Show tout en fermant l'ancien. Pour le récapitulatif avec un nombre d'objets variable, il est envisagé de créer dynamiquement des contrôles à l'exécution (Controls.Add) et d'adapter la logique pour récupérer les données sélectionnées. En parallèle, l'utilisation d'une zone de texte non modifiable (Enabled = False ou Locked = True) peut préserver l'affichage du titre, tandis que d'autres ajustements visuels facilitent l'interaction sans modification par l'utilisateur.

Bobot (l’IA à votre service)
  1. 1. comment programmer le passage à la fenêtre suivante à partir de sa selection, puis son clic ?
    Il faut que dans la partie ou tu gère le clic, tu fasse des conditions comme suit par exemple:
    if listbox1="choix1" then userform2.show
    Attention ca ne ferme pas le premier userform :-)

    2. comment recopier sa sélection dans le userform suivant ?
    Tu peux definir une variable globale dans ton module et récupérer le choix de l'utilisateur dans cette variable!
    1. Oula,

      merci pour ta réponse rapide, mais j'ai pas bien capté pour la deuxième question.
      Je suis novice en programmation. Est-ce possible d'être un ti peu plus clair stp ?
      Merci beaucoup !
      1. Ca veut dire que tu as compris pour la première!
        C'est déjà bien lol
        Sinon pour la deuxième,
        tu dois avoir dans ton projet, un module et des userforms si je m'abuse?
        Le module étant le premier truc qui se lance et qui doit donc appeler ton premier userform!
        Si c'est bien le cas, il faut que tout en haut de celui ci, tu mette:
        Public var1
        Et par la suite dans le userform tu récupère le résultat de la saisie de l'utilisateur dans la listbox:
        var1 = listbox1.text (je suis pas trop sur de la syntaxe ^^ mais tu dois la connaitre je pense)
        et apres tu peux reutiliser var1 dans une autre userform sans soucis!
        1. je ne connais malheureusement pas bien la syntaxe en VBA ^^, je suis tellement pas spécialiste la-dedans.
          J'essaie de me dépatouiller.
          Si qqn peut m'éclairer ^^ merci
          1. Hmm Pour ca il faudrait la forme de ton projet à l'heure actuel, et ce que contiennent les userforms!
        2. en fait, j'ai bien capté la logique. J'ai crée ma variable.
          Pour réafficher le contenu de la variable dans le userform suivant, dans quel type d'objet doit-je rappeler ma variable ? Et quelle est la ligne de prog pour rappeler une variable ?
          Merci infiniment pour ton aide
          1. Je comprend pas...
            je pense que ta variable contient une chaine de caractere!
            Donc tu as juste, pour tester, à faire un petit :
            msgbox(var1)
            dans ta deuxieme userform pour verifier qu'elle est bien accessible!
            Et apres tu as juste à l'utiliser normalement!
            Attention, ta variable est deja defini dans module, donc il ne faut pas la redeclarer!
        3. le contenu de ma variable est correct. Je ne sais juste pas si je dois l'afficher dans une zone de texte, ou un intitulé dans le userform suivant.

          Imaginons que ce soit un un intitulé, comment entrer le contenu de ma variable dans cet intitulé à l'ouverture du userform ?
          1. Q'est ce que tu appel un intitulé?
        4. c comme un titre qui s'affiche dans un cadre (non-modifiable par l'utilisateur).
          La zone de texte peut être modifiée (si j'utilise une zone de texte, il faut que je bloque la possibilité de modification par l'utilisateur.)
          1. Tu peux donc le faire une textbox je pense!
            Et après tu fais:
            textbox1.value=var1
            textbox1.enabled=false
            comme ca elle est protégée ;)
            et après en modifiant l'aspect de ta textbox tu peux peut etre la rendre plus jolie^^
        5. je n'y arrive pas T;T
          Je vais te marqué exactement ce que j'ai marqué et tu me dis si tu vois l'erreur
          Dans le userform qui s'ouvre après e clic sur valider :

          Private Sub UserForm_Open()
          fourchoisi.Text = fournisseur
          fourchoisi.Enabled = False
          End Sub

          fourchoisi étant ma textbox et fournisseur ma variable.

          J'ai essayé fourchoisi.Value c pas mieux.
          1. Il te retourne quelle erreur?
        6. Il n'y a pas d'erreur mais ma textbox est vide lors de l'ouverture du userform. De plus, l'utilisateur peut écrire dans la textbox
          1. Remplace:

            Private Sub UserForm_Open()

            par:

            Private Sub userform_initialize()
        7. Amélioration ^^ :

          l'utilisateur ne peut plus écrire mais la case est encore vide.
          1. ok donc ca veut dire que c'est au niveau du textbox1.text = fournisseur que ca merde^^
            essaye ca:

            textbox1 = var1
        8. négatif m'sieur ^^

          merci encore de te donner du mal pour moi
          1. Donc si on résume, ta variable fournisseur contient bien le nom du fournisseur, la textbox se grise bien donc l'appel à celle ci est bon.
            Mais ca marche pas???
            lol
            bizarre
            1. j'ai refait un text msgox(var1) à l'initialisation de la userform et la valeur est nulle donc ca vient de la variable et non du remplissage de la textbox
              1. Bon ca me rassure ^^
                fais voir comment tu delcare et initialise ta variable!
            2. dans mon workbook :

              Public fournisseur

              dans la première userform :

              Private Sub valid_fournisseur_Click()
              fournisseur = List_fournisseur.Text
              If List_fournisseur = "***" Then recherche_fournisseur2.Show
              End Sub

              dans la deuxieme :

              Private Sub UserForm_initialize()
              MsgBox (fournisseur)
              fourchoisi.Text = fournisseur
              fourchoisi.Enabled = False
              End Sub

              Ne te moques pas stp s c une grosse boulette ^^
              1. Dans ton workbook?
                normalement ca s'appel module1 si je ne m'abuse ^^
                et ca devrais avoir cette forme:

                Public fournisseur

                Sub Macro1()
                UserForm1.Show
                End Sub
            3. ok je sors ^^

              merci pour ton aide !!!

              derniere petite requete :

              comment lui faire comprendre :

              If List_fournisseur = "***" Then recherche_fournisseur2.Show ET Unload me
              1. If List_fournisseur = "***" Then
                recherche_fournisseur2.Show
                Unload me
                End If

                normalement ca devrais marcher ^^
                Et si ca marche pas remplace le "me" par le nom de l'userform ^^
            4. t un chef ! merci pour ton aide
              comment faire pour te recontacter ^^
              je vais evidemment avoir d'autres soucis qui vont surgir ^^
              1. Un petit message privée et tu aura surement mon msn ^^