Autres [resolu]probleme recup donnée par function dans userform différée

patricktoulon

XLDnaute Barbatruc
bonjour a tous
j'essais plusieurs formules de lancement userform qui doit me retourner une valeur lorsque je le hide
problème qui me prend la tete depuis un moment

1er lancement bouton 1 retourne rien
2eme lancement bouton1 retourne bien 10
3 eme lancelement bouton 2 retourne ce que me retourne le bouton 1
4 eme lancement bouton2 retourne 100

j'ai tenter avec property get aussi mais c'est pareil


pour lancer le userform il suffit de cliquer droit dans le sheet
quelqu'un aurait une solution si tant est qu'il y en ai une ?
 

Pièces jointes

  • test recup variable différé .xlsm
    18.3 KB · Affichages: 9
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Il faut affecter valeur à ShowX après le Me.Show.

En passant If Me.Visible = False Then c'est idiot. C'est If Not Me.Visible Then qui est correct pour moi. Inutile de transformer en Boolean par un opérateur de comparaison arithmétique une expression qui est déjà Boolean. Surtout qu'en plus les opérateurs de comparaisons entre Boolean leurs sont spécifiques: And, Or, Xor, Eqv, Imp. Mais Eqv False derrière un Boolean c'est comme Not devant. D'une façon générale on peut toujours se passer des constantes False et True dans les expressions Boolean.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
j'avait trouvé danreb le not ou false oui bon

j'ai donc repris mon cal avec cette méthode
et maintenant on est vraiment dans le contexte d'un dialog

pour info voila comment j’appelle mon cal
Calendar.ShowX(CIBLE, Coté de la cible, top de la cible, région souhaitée)

VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim region As Variant
    Cancel = True

    If Target.Row = 1 Then Exit Sub

    With Calendar
        Select Case Target.Column
        
        Case 1: Target = Calendar.ShowX(Target(1), 2, 0, 0): ' region = 0 ou "US" Etats Unis

        Case 2: Target = Calendar.ShowX(Target(1), 2, 0, 1):   ' region = 1 ou "FR" France

        Case 3: Target = Calendar.ShowX(Target(1), 2, 0, 2): ' region = 2  ou "CA" Canada

        Case Else: .ShowX Target(1), 0, 2  'automatique region

        End Select
        
    End With
'Unload Calendar'pour ceux qui souhaitent décharger  la mémoire utilisée par le userform en position hide 
End Sub
le showX devient le return ;) en CALLBACK
et voila pas besoins de variable du genre .value ou .result
pour le coup la je suis d'accords

j'ai même supprimé le test visible de l'userform il ne m'est plus nécessaire
regarde mon compteur

demo3.gif


sujet résolu pour ca ;)
 

ChTi160

XLDnaute Barbatruc
Bonjour Patrick
le Fil(Bernard),le Forum
Questions d un autodidacte lol
a quoi sert le
With calendar dans la procedure ci dessus
car on retrouve trois calendar ensuite(est ce important?))
ensuite peut etre une question bete lol
je ne comprends ce qu est le ShowX()
dans calendar.ShowX()
merci par avance
jean marie
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour ChTi160
tu a raison ca ne sert a rien un oubli de ma part et vestige de la oldversion ;)

qu'est ce ShowX
et bien c'est tout simplement une fonction dans le userform"Calendar"

je l'apelle comme ci dessus

dans cette fonction je me sert des argument injectés blablabla
ensuite je fait un show( le vrai show) DANS !!! cette fonction
que ce passe t il alors a ce moment très précis donc après ce show
et bien la fonction est en attente du hide pour continuer jusqu' au end function elle est donc stoppée ou en standbye comme tu veux
après le show je fait showX=valeur

cette variable "valeur" je la modifie avec d'autre controls dans le userform
et l'ors de cette modif je fait un hide
donc la fonction showX reprend sa route
resultat calendar.showX = la variable valeur quand le userform est hide

démonstration de ce principe avec un autre de mes boites de dialogues perso
un double input date
la on attend 2 valeurs

j'ai pousser le vis :p, j'ai changé le nom de la fonction et lui ai carrément donné le nom"Value"
je n'ai pas encore fait le contrôle de validité des dates dans les textboxs mais le principe ici fonctionne
on a bien en sortie les deux valeurs inscrite dans les textbox

au final on a un comportement de la fonction en CALLBACK

ci joint la version beta

en gros on a le même comportement que l'inputbox original c'est pareil pour mon calendrier et je vais mettre a jour toutes mes pseudo boites de dialog perso comme ça

en somme on pourrait dire que le userform devient une variable modifiable dynamiquement
x=userform1.fonction(...Argument ........)
tout ça grâce au mode modal qui stoppe et met en stand bye la fonction tout simplement car cette fonction est exécutée AVANT!! le show
 

Pièces jointes

  • double inputbox perso .xlsm
    19.2 KB · Affichages: 12
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
moi aussi j'utilise mon portable quand pas de box lol
mais pour les balises , c'est pas top !
Visite technicien , demain entre 8 h et 13 h
"ligne instable"
et comme par hasard des que j'appelle l'assistance , ça Fonctionne à nouveau ??????
bonne journée
j'attends la suite de tes recherches
merci
jean marie
 

patricktoulon

XLDnaute Barbatruc
j'attends la suite de tes recherches
hoh je crois que j'ai tout
  1. je sais comment transformer un userform en boite de dialogue avec un apel lineaire du genre comme le msgbox
  2. je sais conserver la donnée
  3. mon userform se ferme tout seul (unload) sans perdre la donnée
demonstration avec mon calendrier

VB:
Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True

    If Target(1).Row = 1 Then Exit Sub

         Select Case Target.Column
        
        Case 1: Target = Calendar.ShowX(Target(1), 2, 0, 0): ' region = 0 ou "US" Etats Unis

        Case 2: Target = Calendar.ShowX(Target(1), 2, 0, 1):   ' region = 1 ou "FR" France

        Case 3: Target = Calendar.ShowX(Target(1), 2, 0, 2): ' region = 2  ou "CA" Canada

        Case Else:  Target = Calendar.ShowX(Target(1), 0, 2):   'automatique region

        End Select
        
   'Unload Calendar'plus besoins 
End Sub

on sheets
demo3.gif


on userform
demo2.gif
 

patricktoulon

XLDnaute Barbatruc
pareil que pour les cells c'est le 4 eme argument "Region"

VB:
'evenement unique pour 42 boutons
Private Sub bout_Click(): putDate Bout: End Sub
Public Sub putDate(ByVal q As Object)
    Dim Forme
    Forme = Switch(Calendar.region = 0, "mm/dd/yyyy", Calendar.region = 1, "dd/mm/yyyy", Calendar.region = 2, "yyyy-mm-dd")
    If TypeName(Obj) = "Range" Then
        Calendar.valeur = Format(CDate(DateSerial(Calendar.Cbyear.Value, Calendar.Cbmonth.ListIndex + 1, q.Caption)), Forme)' je pourrais tout aussi bien envoyer dateserial ici car mes colonnes sont formatées
    Else
        Calendar.valeur = Format(DateSerial(Calendar.Cbyear.Value, Calendar.Cbmonth.ListIndex + 1, q.Caption), Forme)
    End If
    Calendar.Hide 'le unload se fait ailleurs
End Sub
donc je crée la date avec cbyear, cbmonth, caption du bouton cliqué que je formate avec forme en fonction de region

je veux pas le donner tout de suite j'ai pas envie qu'une de mes app traînes avec des bugs éventuels
et il me manque aussi des formule de calcul de jours fériés canadien non fixes et thansgiving pour l'US aussi qui n'est pas fixe

en gros de toute tacon VBA travaille ses dates au format français dd/mm/yyyy que ce soit en france ou ailleurs

dateserial(2019,1,1) donnera ce string(01/01/2019)partout dans le monde
pour les cells c'est soit toi qui formate soit l'option régionale paramétrée dans ton app office

pour le connaitre
msgbox application.international(xldateorder)
0=us
1=français et les autres pays utilisant ce format
2=canada(une partie)et d'autre pays utilisant ce format

j'oubliais
l’appel des textboxs c'est exactement le même que les cells
TextBox1 = Calendar.ShowX(TextBox1, 2, 0, 0)
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof