XL pour MAC UserForm : pb de SetFocus en sortie cancel true de textbox (Office 365 Mac)

RyuAutodidacte

XLDnaute Junior
Bonjour,
État des lieux : Sur Mac on ne peut pas créer de Userform (disparu après Excel 2011 :mad: Merci MS), et on a pas accès au proriétés d'un Userform
par contre on peut créer un UserForm (non active X) sur Excel PC et le coder sur Mac ce que j'ai fait …

Mon problème est qu'en exit d'un textbox en cancel = true + un msgbox (après moult essais) le focus à l'air d'être resté sur le textbox,
sauf que le curseur n'apparait plus dans le textbox en question :( => donc on ne peut plus écrire dedans sauf si on le sélectionne à la souris

Le code à l'air ok vu les essais et reprises de codes validés en test …
Alors avez vous une idée de contournement svp ??
 
Solution
B
au pire tente ça pour redonner le focus a la fenêtre userform
a la place de
me.repaint
tu met
Me.Hide: Me.Show
Hahaha :) tjs au top Patrick, c'est brutal comme solution mais le Me.Hide: Me.Show résout en effet le pb.
Merci bcp ;) 👍👍👍
As tu des conseil de chose à éviter de faire avec le Me.Hide: Me.Show ??

Solution de @patrick, afin de retrouver le curseur du textbox dans un : "Private Sub TextBox1_Exit …" que l'on Cancel :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Msg = "Be careful: No modification requested on the folios" & vbCrLf & _
          "Put the desired change or cancel the action"
    If IsNumeric(TextBox1) And TextBox1 Like "*[!-]" Then...

RyuAutodidacte

XLDnaute Junior
Bonjour,
Solution : joindre le fichier et attendre qu'un possesseur de MAC intervienne.
Bonjour job75,
le code est le même que sur PC… un utilisateur PC peut y répondre aussi, comme je l'ai déjà expérimenté avec @patricktoulon sur un autre forum et d'autres (par contre éviter les codes en rapport avec ActiveX).
En plus les utilisateurs MAC faisant du vba sont bcp moins nombreux

le code :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Msg = "Be careful: No modification requested on the folios" & vbCrLf & _
                    "Put the desired change or cancel the action"

     If TextBox1 > "" And IsNumeric(TextBox1) And Not TextBox1 Like "*-" Then
        'CommandButton2.Enabled = True
    Else
        Cancel = True
        MsgBox Msg
        'TextBox1.SetFocus
        TextBox1 = ""
Exit Sub
    End If

End Sub

J'ai juste besoin d'une astuce qui pourrait être utilisé aussi sur PC permettant que mon curseur soit activé dans la Textbox svp
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour Ryu
a tu essayé le selstart tout simplement ;)
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Msg = "Be careful: No modification requested on the folios" & vbCrLf & _
          "Put the desired change or cancel the action"
    'If TextBox1 > "" And IsNumeric(TextBox1) And Not TextBox1 Like "*-" Then
    If IsNumeric(TextBox1) And TextBox1 Like "*[!-]" Then
        CommandButton2.Enabled = True
    Else
        Cancel = True
        MsgBox Msg
        TextBox1.SelStart = 0
        TextBox1 = ""
        CommandButton2.Enabled = False
    End If
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
une autre forme d’écriture on sais jamais avec like et MAC j'utilise instr
par contre il faut au moins un autre control enabled pour que le exit fonctionne alors peut être que si tu n'a que le bouton au lieu de le disabled met le invisible par exemple si tu a d'autre controls c'est bon

VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim Msg$, x As Boolean
    Msg = "Be careful: No modification requested on the folios" & vbCrLf & _
          "Put the desired change or cancel the action"
    With TextBox1
        x = IsNumeric(.Value) And InStr(1, .Value, "-") = 0
        If x Then
            CommandButton2.Enabled = True
        Else
            Cancel = True
            .Value = ""
            .SelStart = 0
            MsgBox Msg
            CommandButton2.Enabled = False
        End If
    End With
End Sub
 

RyuAutodidacte

XLDnaute Junior
Bonjour Ryu
a tu essayé le selstart tout simplement ;)
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Msg = "Be careful: No modification requested on the folios" & vbCrLf & _
          "Put the desired change or cancel the action"
    'If TextBox1 > "" And IsNumeric(TextBox1) And Not TextBox1 Like "*-" Then
    If IsNumeric(TextBox1) And TextBox1 Like "*[!-]" Then
        CommandButton2.Enabled = True
    Else
        Cancel = True
        MsgBox Msg
        TextBox1.SelStart = 0
        TextBox1 = ""
        CommandButton2.Enabled = False
    End If
End Sub
Hi Patrick ;)

Malheureusement, j'ai bien le focus qui reste après le cancel mais tjs pas le curseur qui apparaît et je ne peux donc pas écrire directement.
par contre ce que j'ai remarqué, c'est que le setFocus est ok (avec le curseur) en passant d'un control à un autre, et cela marche aussi si j'enlève le msgbox dans le code dans le Exit du Textbox
on dirait que la fenêtre du msgbox ne fait plus afficher le curseur après validation de celui-ci

Edit : on se croise :) je vais tester le 2è code
Edit 2 : même résultat pour le 2è code
Edit 3 : je confirme c'est bien le msgbox qui pose pbm, y a t il un moyen de le gérer autrement
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
essaie un repaint peut être avec toute les actions sur textbox apres le message
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim Msg$, x As Boolean
    Msg = "Be careful: No modification requested on the folios" & vbCrLf & _
          "Put the desired change or cancel the action"
    With TextBox1
        x = IsNumeric(.Value) And InStr(1, .Value, "-") = 0
        If x Then
            CommandButton2.Enabled = True
        Else
             MsgBox Msg
            Cancel = True
            .Value = ""
           Me.Repaint
           .SelStart = 0
           CommandButton2.Enabled = False
        End If
    End With
End Sub
 

RyuAutodidacte

XLDnaute Junior
B
au pire tente ça pour redonner le focus a la fenêtre userform
a la place de
me.repaint
tu met
Me.Hide: Me.Show
Hahaha :) tjs au top Patrick, c'est brutal comme solution mais le Me.Hide: Me.Show résout en effet le pb.
Merci bcp ;) 👍👍👍
As tu des conseil de chose à éviter de faire avec le Me.Hide: Me.Show ??

Solution de @patrick, afin de retrouver le curseur du textbox dans un : "Private Sub TextBox1_Exit …" que l'on Cancel :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Msg = "Be careful: No modification requested on the folios" & vbCrLf & _
          "Put the desired change or cancel the action"
    If IsNumeric(TextBox1) And TextBox1 Like "*[!-]" Then
        CommandButton2.Enabled = True
    Else
        Cancel = True
        MsgBox Msg
        Me.Hide: Me.Show
        TextBox1.SelStart = 0
        TextBox1 = ""
        CommandButton2.Enabled = False
    End If
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re non pas vraiment c'est sans risque me semble t il
peut être une latence sur des vieux PCs un peu lents (on verrait alors disparaître et revenir le userform)
peut être aussi prendre en compte le mode du show initial si modal comme ça sinon ajouter 0 après mon show a fin de le ré afficher comme il était
le remettre au coordonnées ou il était aussi( ce qui voudrait dire qu'il faut mémoriser sa position)
ça c'est juste des questions ergonomiques
fonctionnellement aucune incidence
 

RyuAutodidacte

XLDnaute Junior
une erreur pour AppActivate Application.Caption chez moi
1637335131452.png
 

Discussions similaires