Résolu Passage de variable de "forms" vers "vba" sous excel

  • Auteur de la discussion harpon38
  • Date de début

harpon38

Nouveau membre
Sous excel :
comment recuperer une variable créer dans un formulaire - ex : public cancel_creation - dans un module vba - ex : if cancel_creation = false then ... ??

J'ai créé un formulaire avec un bouton cancel
J'associe au bouton cancel une variable cancel_creation

Code:
Private Sub CommandButton2_Click()
    '
    ' cancel the execution : close the sheet
    '
    Unload TicketCreation
    cancel_creation = True
End Sub
Ensuite, je veux tester dans un script "general" cette valeur, mais elle n'est pas initialisée.

Code:
Private Sub Workbook_Open()
    '
    ' open the window command
    '
    TicketCreation.Show
    '
    If cancel_creation = False Then
        '
        ' create ticket
        '
        create_ticket
        '
    End If
    '
End Sub
le test se plante car cancel_creation est vide, alors qu'il est bien initialisé par le formulaire.


Comment passer cette variable sans aller l'écrire dans une cellule d'un coté pour la relire de l'autre ?

Merci
 

zeb

Modérateur
Bonjour,

Les lignes de ton programme doivent être présentées entre balises
Code:
.
 

harpon38

Nouveau membre
merci pour l'info mais bien sur ça ne fonctionne pas pour moi car je n'ai qu'un seul projet ...

Tu dis dans le topic
Mais certainement pas en mémoire, sauf si je n'ai pas compris ton histoire de "projet
et je pense que c'est cela qui m'intéresse justement.

J'ai mis le résultat de mon clic "cancel_creation" dans une cellule que je peux récupérer dans la suite du script. J'aurais juste aimé pouvoir me passer de cette écriture / lecture pour une variable qui se trouve dans le même projet mais pas au même endroit ( initialisée dans la partie "Forms" et utilisée dans la partie "Microsoft Excel Objects" )

Si tu as une autre idée je suis preneur bien sur, sinon tant pis je continuerais de passer par une cellule.
 

harpon38

Nouveau membre
Bonne nouvelle j'ai trouvé. Il faut que je cache mon formulaire, que j'utilise les variables qui sont toujours intialisées puis que je décharge le formulaire.

Merci de ton aide zeb, tes topics m'ont fait un brainstorming et voila !


code corrigé

si appuis sur cancel on cache le formulaire
Code:
private Sub cancelcreation_Click()
    '
    ' cancel the execution : hide the sheet
    '
    TicketCreation.Hide
    cancel_creation = "yes"
End Sub

on récupère la variable car le contexte du formulaire existe toujours, il est juste caché
Code:
Private Sub Workbook_Open()
    '
    ' open the window command
    '
    TicketCreation.Show
    '
    If cancel_creation = yes Then
        '
        ' unload the form
        '
        Unload TicketCreation
        '
        ' create the ticket
        '
        create_ticket
        '
    End If
    '
End Sub
 

zeb

Modérateur
Meilleure réponse
Euh, tu as trouvé une solution palliative et tu veux faire mieux ?
Ben c'est bien ça. Alors sûr qu'on a des idées et qu'on va t'en proposer.
A toi de faire le tri.

Alors moi, je te propose de créer une variable public dans ton module d'où tu appelles ton "form", donc je suppose dans la partie "Microsoft Excel Objects" et dans ton form, tu renseignes cette variable :

Code:
' // Dans Microsoft Excel Objects, dans la feuille 1
Public cancelle As Boolean

' // Dans Form
Feuil1.cancelle = True
 

harpon38

Nouveau membre
merci ça c'est exactement ce que je cherchais.
Chapeau pour la réactivité.
 

zeb

Modérateur
Ben t'es plein de bonne volonté : quand on te demande de respecter le forum, parce que tu n'aurais pas observé une obscure clause de publication, tu t'exécutes sans me raconter que je suis un immonde salopard d'oser sous-entendre les pires choses à ton endroits. Tes explications sont claires, tu ne fais que peu de fautes de français (si, si, il y en a :D ), tu dis bonjour, s'il vous plaît, merci. Quand on te donne un lien, tu le lis, tu fais l'effort de comprendre. Si ça ne te convient pas, tu le dis en expliquant pourquoi, et tu redonnes des informations supplémentaires pour que ton problème soit encore mieux cerné.

Bref, tu fais tout pour que ce soit agréable de te rendre service. Du coup, tu obtiens rapidement et précisément ce dont tu avais besoin. T'as tout compris aux forums, toi ! :D
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 135
Messages
6 718 109
Membres
1 586 397
Dernier membre
Chachabidou
Partager cette page
Haut