1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut Difficultés sur: multipage activeX sur feuille + setfocus sur textbox avec touche enter

    Bonjour,
    Dans le cadre du développement d'un outil de création de nomenclature au sein de mon entreprise, j'aurais besoin de votre aide concernant un "tableau de bord" que j'ai créé via un controle ActiveX multipage.
    Ce tableau de bord est constitué de 3 pages sur lesquels se trouvent un ensemble de textbox et doit rester visible sur la feuille qui lui ai dédiée (j'affiche la nomenclature mise en page sur la feuille pour que l'utilisateur puisse voir l'avancement de son travail en temps réel).

    Le premier problème auxquel j'ai fait face fut la perte de focus lorsque je cliquai sur les textboxs de mon multipage (1er clic=focus OK, puis un genre "d'autorepaint" s'execute sans que je sache comment et le textbox perd le focus... il me fallait alors le recliquer pour retrouver le focus)
    Pour résoudre ce soucis j'ai inséré des frames pour "contenir" chacun de mes textbox.
    Est-ce la seule solution?

    Le second problème est qu'il me faudrait pouvoir "naviguer" de textbox en textbox via la touche enter. J'ai donc utilisé la fonction SetFocus, sur le keydown de mon premier textbox pour se rendre directement sur mon second textbox, mais malheureusement elle ne fonctionne qu'en pas à pas.
    Lorsque je l'utilise en automatique je n'ai visiblement pas le focus sur le textbox desiré... sauf que lorsque je sors du classeur (exemple clic sur le bureau ou sur la fenetre developpeur) puis réactive mon classeur alors le focus apparait correctement.
    Auriez-vous une idée d'ou vient ce "bug"?
    y-aurait-il un lien entre "l'autorepaint" de mon premier problème et le second? (si je peux mettre tous mes textbox directement sur la page de mon multipage je pourrai utiliser le tabindex...)


    afin de pouvoir illustrer mes soucies j'avais préparé un petit multipage avec 2 frame et 2 textbox mais les règles du forum m'interdisent de le joindre directement à ma première requête.
    Je vous mets donc le code en suivant:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Public WithEvents TB1 As MSForms.TextBox
    Public WithEvents TB2 As MSForms.TextBox
     
    Public WithEvents FR1 As MSForms.Frame
    Public WithEvents FR2 As MSForms.Frame
     
    Private Sub MP1_GotFocus()
    Set TB1 = MP1.Pages(0).Controls("TB1")
    Set TB2 = MP1.Pages(0).Controls("TB2")
     
    Set FR1 = MP1.Pages(0).Controls("FR1")
    Set FR2 = MP1.Pages(0).Controls("FR2")
     
    End Sub
     
    Private Sub TB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        TB2.Value = "toto"
        TB2.SelStart = 0
        TB2.SelLength = Len(TB2.Text)
        TB2.SetFocus
    End If
    MsgBox MP1.SelectedItem.ActiveControl.Name
    End Sub
    J'ai donc créé un multipage "MP1", inséré 2 frames "FR1" + "FR2" sur la première page, inséré un textbox par frame "TB1" dans "FR1" et "TB2" dans "FR2".

    Pour récupérer les évènements de chaque controls je passe par une déclaration "Public withevents...".

    Pour simplifier le code je charge des variables à chaque prise de focus du multipage.

    sur l'évènement keydown de TB1 je marque "toto" dans TB2 (mets en évidence que seul le setfocus déraille) puis je selectionne la totalité du texte de TB2 (permet un repère visuel pour l'utilisateur et une rapidité d'execution intéressante pour mon outil)

    Pour exposer le problème j'ai rajouté un msgbox qui montre bien que TB2 n'a pas le focus a la fin de l'execution (temps que l'on est pas sortie du classeur puis rerentré)

    PS: pour exposer le premier problème il suffit de faire glisser TB1 et TB2 en dehors des frames, directement sur la page et vous verrez alors ces soucis de focus et "autorepaint".

  2. #2
    Expert éminent sénior
    Avatar de patricktoulon
    Profil pro
    Inscrit en
    avril 2009
    Messages
    10 528
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : avril 2009
    Messages : 10 528
    Points : 16 713
    Points
    16 713
    Billets dans le blog
    1

    Par défaut re

    bonjour
    une solution plus simple aurais été de mettre tes controls dans un userform la gestion des évènement et focus en est beaucoup plus souple
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : résolu: ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    Effectivement le userform aurait pu être une solution cependant lors de la dernière mise à jour vers Excel2016 certains outils développés au sein de l'entreprise ont souffert d'instabilités sur les userform. (je précise que je n'était pas le programmeur de ces outils )
    il m'a donc été donné comme directive d'utiliser le minimum d'userform d'où l'emploi du controle ActiveX sur la feuille. (j'utilise une userform pour la suppression d'accessoires via une combobox mais ca ne représente que 8 lignes de codes donc on me l'a accepté)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    personne n'a d'idée?
    dans l'absolu je pense que trouver la solution à mon premier problème (qui produit une réaction stroboscopique à mon tableau de bord) serait suffisante pour me permettre de trouver par moi-même la solution au 2nd problème. Tout ca m'a l'air lié
    [EDIT] je viens de tester en ne posant qu'un seul multipage sur une feuille et en cliquant alternativement sur la feuille puis sur le multipage, ce dernier n'a pas cette réaction de clignotement (comme s'il était rechargé)... mais si on en pose 2 alors on aura le phénomène de clignotement. est ce que cela veut dire que je n'ai aucun recours? [EDIT]

  5. #5
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,
    pourquoi un multipage ???
    chaque onglet est une page d'un multipage nommé workbook
    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    Alors pour illustrer la justification d'un multipage voici un imprim_ecran du tableau de bord que j'ai codé: (j'ai masqué les donnés sensibles)

    Nom : illustration forum.jpg
Affichages : 56
Taille : 426,5 Ko

    On peut donc y voir 3 onglets: cartouche/creation/revision (=onglets de mon multipage)
    A coté il y a la nomenclature créée en lecture uniquement (permet un apperçu dynamique pour l'utilisateur), l'utilisateur doit passer par le tableau de bord pour toute modification ou ajout d'élément.
    Ce tableau de bord se déplace dans la feuille en suivant les positions des scrollbars pour que l'utilisateur l'ait toujours "sous la main" et puisse se positionner à la hauteur des lignes qu'il modifie ou créé.
    L'ensemble est déjà codé à 95% et fonctionne bien sauf que nous aimerions qu'avec ENTER l'utilisateur puisse se déplacer de textbox en textbox (Rep -> Nb -> rech...).
    Je rappel que le setfocus ne fonctionne pas (Cf: explications du premier message).

    L'utilisation d'un userform affiché sur la feuille n'est pas désiré par le chef de projet.
    Je n'ai donc pas le choix d'utiliser ce multipage en control.activeX et, si j'ai bien compris la réponse de mjpmjp, l'utilisation d'un workbook exterieur pour simuler un multipage m'obligerai à gérer plusieurs classeurs en même temps... ce qui me parait assez "lourd" comme "organisation".
    L'idée est plus de charger les données d'entrées d'un fichier défini, à l'ouverture, dans l'outil puis de les compléter et/ou modifier, puis de les "restocker" dans le fichier défini.

  7. #7
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,

    voila le debut de ta multi page

    Nom : Capture12.PNG
Affichages : 47
Taille : 55,7 Ko

    l'avantage c'est d'etre directement dans la page et de pouvoir user de "consolidation" entre autres choses

    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  8. #8
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,

    j'ai voulu mettre un multipage dans la feuille, afin d'essayer de répondre,
    dans le "ruban, insérer" pas de Control multipage !!!
    je clique sur le "tournevis et la clé" et dans la liste, je sélectionne "Microsoft Forms 2.0 MultiPage"
    je le dessine, et là les ennuis commencent, le multipage "grossi" (zoom) ???
    en le déplaçant il reprend son apparence ???
    avec le même schéma, j’insère dans la page 2 une frame et des textbox,..
    et çà recommence le multipage se déforme, je le déplace et...la frame reste sur place,
    je déplace la frame et les textbox restent sur place ,... misère...

    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    En fait lorsque tu pose ton multipage, en création, tu dois le selectionner/clic_droit/edition/clic_droit/boite_à_outils et la tu peux insérer tes controles frames+textbox qui seront le contenu de ton multipage qui lui sera le contenant.
    Ca resemble à une sorte de hiérarichie à 2 niveaux... 1er la feuille excel, 2e le control multipage.

    si tu ressort tout est bien consolidé ensemble... (on est sur excel 2016 biensur)

    Pour pouvoir récuperer les évènements textbox.change tu dois le déclarer en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public withevents TB1 as msforms.textbox
    une fois fait la syntaxe d'appel de la valeur du textbox (par exemple) sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    multipage1.pages(0).controls("TB1").value
    ou alors (comme moi) lors du gotfocus du multipage tu charge une "variable":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set TB1=multipage1.pages(0).controls("textbox1")
    tout ca fonctionne correctement mis à part l'effet stropboscopique qui est peut etre du à l'emplacement de mes déclarations public withevents ou du chargement de mes variable sur le gotfocus?
    je reste convaincu que cette "réaction" stroboscopique est la clé de mon problème... il faudrait simuler un aller/retour entre le bureau (ou un autre classeur excel) et thisworkbook pour afficher le setfocus préprogrammé sur le textbox désiré...

    à la limite pour tester: est-il possible d'ouvrir un classeur, y importer un module .bas et lancer l'execution de ce module? via le code de thisworkbook... (j'avoue ne pas encore avoir fais de recherches sur ce point, c'est une idée qui me vient a l'instant)

    cela me permettrait à chaque appuis sur la touche ENTER d'ouvrir un nouveau classeur masqué, de me rendre actif dedans, d'executer un code quelconque exemple: range("A1").select, puis de revenir sur thisworkbook, fermer le classeur masqué... et peut etre que le setfocus voudra bien s'afficher?

  10. #10
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,
    merci pour ton "tuto"
    aprés pas mal de galère, je laisse tomber les control formulaires
    Nom : Capture13.PNG
Affichages : 44
Taille : 20,3 Ko

    j'ai testé à moitier les propriétés textbox
    auto index = true
    et tab index = 0..1..2...

    quand je validais il me semble que çà changeait de box...

    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    Merci quand même pour tes recherches... après avoir ouvert l'outil sur l'ordinateur portable du chef de projet qui tourne sur excel 2010 il semblerait que cet effet stroboscopique soit due à la version d'excel... en effet sur sa machine ca ne "clignote" pas.
    je vais tenter de faire tourner mon petit fichier test (voir code plus haut ou fichier joint sur ce message) pour voir si le setfocus s'affiche correctement.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,

    la solution...?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub TB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
            TB2.Value = "toto"
        End If
    End Sub
    Private Sub TB2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        TB2.Text = TB2.Text & Chr(KeyAscii)
    End Sub
    note : à chaque erreur, il faut sauvegarder et recharger le book !!

    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    C'est parfait!!! en y ajoutant une modification du backcolor sur les textbox et des setfocus bien placés on obtient un résultat vraiment très intéressant. (bon je vais voir pour mettre une couleur plus douce biensur)

    on a toujours l'effet stroboscopique malheureusement... mais je crois qu'il va falloir que je fasse avec...
    mon chef de projet tourne sur un 32bits sur son portable alors que sur les ordis du bureau on est en 64... ca pourrait venir de la?
    Fichiers attachés Fichiers attachés

  14. #14
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,

    Nom : Capture14.PNG
Affichages : 39
Taille : 7,5 Ko

    la solution au problème de déformation (zoom) , a été de : enregistrer et recharger le "fichier.xlsm" , çà c'est OK !!!

    pour la suite :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Public WithEvents Txb1 As MSForms.TextBox
    Public WithEvents Txb2 As MSForms.TextBox
    Public WithEvents Txb3 As MSForms.TextBox
    Private Sub CommandButton1_Click()
        ActiveSheet.OLEObjects.Add(ClassType:="Forms.MultiPage.1", Link:=False, DisplayAsIcon:=False, Left:=[b2].Left, Top:=[b2].Top, Width:=[b2:k2].Width, Height:=[b2:b10].Height).Name = "MP1"
    End Sub
    Private Sub CommandButton2_Click()
        MP1.Height = [b2:b7].Height
    End Sub
    Private Sub MP1_Change()
        If MP1.Value = 1 Then
            Txb1.Value = ""
            Txb2.Value = ""
            Txb3.Value = ""
            '----- select
            Txb1.SetFocus
            Txb1.Value = ""
        End If
    End Sub
    Private Sub MP1_GotFocus()
            Set Txb1 = MP1.Pages(1).Controls("Txb1")
            Set Txb2 = MP1.Pages(1).Controls("Txb2")
            Set Txb3 = MP1.Pages(1).Controls("Txb3")
    End Sub
    Private Sub Txb1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
            Txb2.Value = ""
        End If
    End Sub
    Private Sub Txb2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
            Txb3.Value = ""
        End If
    End Sub
    Private Sub Txb1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Txb1.Text = Txb1.Text & Chr(KeyAscii)
    End Sub
    Private Sub Txb2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Txb2.Text = Txb2.Text & Chr(KeyAscii)
    End Sub
    Private Sub Txb3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Txb3.Text = Txb3.Text & Chr(KeyAscii)
    End Sub
    le boutton 1 crée le Control , ce qui est sympa c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Left:=[b2].Left, Top:=[b2].Top
    qui positionne le Control sur la cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Width:=[b2:k2].Width, Height:=[b2:b10].Height
    qui dimensionne le Control en fonction des cellules !!! çà c'est OK !!

    pour la sélection de la première box :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            '----- select
            Txb1.SetFocus
            Txb1.Value = ""
    le "SetFocus" ICI , met le focus sur la frame !!! (voir msdn)
    et "Txb1.Value = .." met le focus sur la box 1 !! çà c'est OK !!

    pour le changement de page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub MP1_Change()
        If MP1.Value = 1 Then
            Txb1.Value = ""
            Txb2.Value = ""
            Txb3.Value = ""
            '----- select
            Txb1.SetFocus
            Txb1.Value = ""
        End If
    End Sub
    ICI on teste si la deuxième page --> Page(1) est activée !! çà c'est OK !!

    et enfin (l'astuce)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Txb1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Txb1.Text = Txb1.Text & Chr(KeyAscii)
    End Sub
    pour écrire dans la box 1 !! çà c'est OK !!



    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  15. #15
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,
    on a toujours l'effet stroboscopique malheureusement...
    je suis avec excel 2016 en 64,...

    çà vient peut être de plusieurs focus sur le même Control ?

    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    et lorsque tu ouvre mon "test_TB2.xlsm" et que tu clic manuellement d'une textbox à l'autre tu n'as pas de clignotement qui s'opère?
    j'ai codé le reste sur le projet et ca marche très bien!!! merci

  17. #17
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,
    oui moi aussi
    j'ai essayé de bloquer l'affichage, les calculs,...
    çà ne le fait pas tout le temps
    çà le fait également quand on clique sur le multipage

    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    J'ai relevé une "petite" curiosité sur le code que tu m'as filé pour se déplacer de textbox en textbox via la touche ENTER.
    Quand tu clic manuellement sur le textbox et que tu rentre un caractère il te le rentre 2 fois... j'ai essayé de regarder en pas à pas d'où cela peut venir et là curieusement ca marche correctement...
    Donc ce "bug" n'existe qu'en execution automatique... et parcontre en passant par le ENTER aucun soucie il affiche bien qu'un seul caractère

    [EDIT] Du coup pour corriger je fais une vérification sur le keyup de la longueur de la saisie et je dégage le caractère en trop:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public toto
     
    Private Sub TB1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    toto = Len(TB1.Value)
    TB1.Text = TB1.Text & Chr(KeyAscii)
    End Sub
     
    Private Sub TB1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If Len(TB1.Value) > toto + 1 Then
        TB1.Value = Left(TB1.Value, Len(TB1.Value) - 1)
    End If
    End Sub
    on voit à l'utilisation le double caractère pendant une fraction de seconde mais bon à défaut de trouver mieux ca fais le job [/EDIT]

  19. #19
    Membre éprouvé Avatar de mjpmjp
    Homme Profil pro
    Chôme Dur des Ambulances
    Inscrit en
    avril 2012
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chôme Dur des Ambulances
    Secteur : Santé

    Informations forums :
    Inscription : avril 2012
    Messages : 663
    Points : 1 067
    Points
    1 067

    Par défaut

    bonjour,
    j'ai ajouté une variable TxtAuto = True / False
    quand tu cliques elle passe à False:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    Public WithEvents Txb1 As MSForms.TextBox
    Public WithEvents Txb2 As MSForms.TextBox
    Public WithEvents Txb3 As MSForms.TextBox
    Public TxtAuto As Boolean
     
    Private Sub CommandButton1_Click()
        ActiveSheet.OLEObjects.Add(ClassType:="Forms.MultiPage.1", Link:=False, DisplayAsIcon:=False, Left:=[b2].Left, Top:=[b2].Top, Width:=[b2:k2].Width, Height:=[b2:b10].Height).Name = "MP1"
    End Sub
     
    Private Sub CommandButton2_Click()
        MP1.Left = [b2].Left
        MP1.Top = [b2].Top
        MP1.Height = [b2:b7].Height
        MP1.Width = [b2:f2].Width
    End Sub
     
    Private Sub CommandButton3_Click()
    USF1.Show
        USF1.Left = ActiveWorkbook.Sheets("Feuil1").[b2].Left
        USF1.Top = ActiveWorkbook.Sheets("Feuil1").[b2].Top
        USF1.Height = ActiveWorkbook.Sheets("Feuil1").[b2:b7].Height
        USF1.Width = ActiveWorkbook.Sheets("Feuil1").[b2:f2].Width
    End Sub
     
    Private Sub MP1_Change()
        If MP1.Value = 1 Then
            TxtAuto = True
            Txb1.Value = ""
            Txb2.Value = ""
            Txb3.Value = ""
            '----- select
            Txb1.SetFocus
            Txb1.Value = ""
        End If
    End Sub
     
    Private Sub MP1_GotFocus()
            Set Txb1 = MP1.Pages(1).Controls("Txb1")
            Set Txb2 = MP1.Pages(1).Controls("Txb2")
            Set Txb3 = MP1.Pages(1).Controls("Txb3")
    End Sub
     
    Private Sub Txb1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
            TxtAuto = True
            Txb2.Value = ""
        End If
    End Sub
    Private Sub Txb2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
            TxtAuto = True
            Txb3.Value = ""
        End If
    End Sub
     
    Private Sub Txb1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        TxtAuto = False
    End Sub
    Private Sub Txb2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        TxtAuto = False
    End Sub
    Private Sub Txb3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        TxtAuto = False
    End Sub
     
    Private Sub Txb1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If TxtAuto Then Txb1.Text = Txb1.Text & Chr(KeyAscii)
    End Sub
    Private Sub Txb2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If TxtAuto Then Txb2.Text = Txb2.Text & Chr(KeyAscii)
    End Sub
    Private Sub Txb3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If TxtAuto Then Txb3.Text = Txb3.Text & Chr(KeyAscii)
    End Sub
    @+JP
    Mes contributions
    Form GRAPHIQUE, Gestion des boutons
    Form GRAPHIQUE, Liste Onglet dynamique
    Form GRAPHIQUE, Liste Multi-Colonne et ScrollBar Externe

    Les Gens "Instruit" ont passé leur temps à apprendre ce que les Gens "Intelligent" ont passé leur temps à trouver...(JP)

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : juin 2017
    Messages : 17
    Points : 5
    Points
    5

    Par défaut

    nickel mjpmjp!!! effectivement j'aurais due y penser
    encore une fois merci beaucoup!!

    pour l'effet stroboscopique il s'agit bien d'un "bug" Excel 2016... j'ai testé de positionner un frame sur ma worksheet dans l'idée d'en faire un "contenant" à mon multipage mais malheureusement lui aussi a cet effet stroboscope meme en étant totalement vide. (en faisant des allé retour avec la roulette souris ca suffit à montrer cet effet de clignotement)
    Est-il possible de leurer Excel en enregistrant le classeur en .xlsm sous excel2010 puis l'ouuvrir sans qu'il "l'upload" en version 2016? (ca sent la question impossible ca )

Discussions similaires

  1. SetFocus sur la valuer d'un sous-formulaire ?
    Par Raphs dans le forum IHM
    Réponses: 2
    Dernier message: 05/12/2005, 19h51
  2. SetFOcus sur un contrôle d'une autre feuille d'un multipage
    Par MacGeol dans le forum VB 6 et antérieur
    Réponses: 29
    Dernier message: 07/09/2005, 10h37
  3. Executer une feuille XSLT sur du xml
    Par naiadeKaren dans le forum Général Python
    Réponses: 2
    Dernier message: 24/08/2005, 15h53
  4. [VB6] SetFocus sur une MSHFlexGrid
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/01/2005, 16h22
  5. [débutant] setfocus sur un TextField
    Par k-reen dans le forum Textuels
    Réponses: 2
    Dernier message: 29/06/2004, 17h21

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