Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2011, 14h16   #1
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Par défaut Setfocus sur un frame

Bonjour,

Dans un Usf j'ai entre autre un Multipage composé de 4 pages. Je veux après la saisie d'un Txt bien précis situé hors du multipage envoyer le focus sur un txt présent dans un frame (tabindex =0) de la page 1. Le code ci-dessous génère l'erreur :
"Appel inattendu à un accès méthode ou propriété". Une idée ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CbxFtFini_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    If CbxFtFini.Text = "" Then
        MsgBox "veuillez saisir le format fini"
        Cancel = True
    Else
        MlpDétail.Visible = True
        LabInfo.Visible = False
        MlpDétail.Value = 1
        FrmLiArticle.SetFocus
    End If
 
End Sub
Merci
Cordialement
Daniel
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 14h32   #2
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Bonjour,

Ton Txt et ton Multipage appartiennent-ils au même userform?

Essaie en tout cas de désigner plus explicitement des objets (genre Thisworkbook.Usf.Frame...), ça ne coûte pas grand chose et ça permet d'éviter les ambigüités.
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 09h38   #3
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Par défaut Structure

Bonjour,

un seul usf ouvert composé de :
n Textbox je demande à l'exit du dernier de rendre visible le multipage

multipage de 4 pages dont page 1 composée de
1frame contenant
textbox sur lequel je devrais arriver (tabindex=0)
Je prends bonne note de ton conseil quant à être plus explicite dans à la désignation des objets, merci.

Cordialement
Daniel
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 11h08   #4
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Bonjour,

Je n'ai encore jamais utilisé de multipage (donc je ne connais pas les propriétés et méthodes) mais si tu veux donner le focus au frame situé sur la page 1 de ton multipage, ne faudrait-il pas le désigner par quelque chose dans ce goût-là:

Code :
MlpDétail.Item(1).FrmLiArticle.SetFocus
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 11h50   #5
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 682
Points : 4 682
Bonjour,

Le souci est que la méthode employée fait "bégayer" les évènements, il boucle sur ton exit et se perd dans la focalisation. Pour valider l'Exit, tu envoies le focus à un autre contrôle forcément.. qui ne peut être le frame invisible mais déclenche la chaîne native des passage de focus etc....

le plus simple est de procéder basiquement :
  • Tu mets dans l'ordre de tabulation de l'onglet voulu (Affichage / ordre de tabulation) ton frame en haut de la pile.
  • Dans l'ordre de tabulation de ton frame tu mets le contrôle visé (qui lui appartient) en haut de la pile.

Du coup, le fait rendre ton multipage visible et de rendre actif la page cible qui ne doit pas être celle par défaut placera le focus sur le contrôle choisi du frame.


sinon, je rejoins Sclarckone sur ta syntaxe, préfixer des noms c'est bien, mais tu nous parle de textBox avec un objet nommé : CbxFtFini qui ferait plus penser à un combobox
cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 22h47   #6
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Bonjour Didier,

Merci pour cette claire explication.
J'avais commencé par gérer les tabulations effectivement comme tu l'expliques très bien, mais comme ça ne fonctionnait pas j'ai essayé de forcer le destin. Je viens de refaire un essai en vérifiant que dans mon Usf, cbxftfini et Mlpdétail étaient bien les derniers de la pile dans tabindex (par menu affichage, puis par code Tabindex n'apparaissant pas dans la feuille propriétés du Mlp)

J'ai conservé l'exit du dernier combo en le corrigeant comme suit
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CbxFtFini_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    If vPourDevis = False Then Exit Sub 'évite le contrôle de saisie quand Quitter a été activé où vpourdevis =False
 
    If CbxFtFini.Text = "" Then
        MsgBox "veuillez saisir le format fini"
        Cancel = True
    Else
        MlpDétail.Visible = True
        LabInfo.Visible = False
    End If
 
End Sub
puis pour aller sur ma page :
Code :
1
2
3
4
5
Private Sub MlpDétail_Enter()
 
MlpDétail.Value = 1
 
End Sub
La tabulation dans cette page commence par mon frame
et dans ce frame elle commence par le textbox souhaité.

Cette correction ne change rien à mon pb le focus vient se replacer sur le tabindex 0 de mon Usf.

En fait ça ne fonctionne qu'en laissant Mlpdétail visible tout le temps ce qui me contrarie fortement au plan de l'ergonomie.
Donc si je comprends bien, la propriété visible ne s'exécute qu'après être sorti du exit et après l'incrémentation du tabindex de l'Usf.
Cordialement
Daniel
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 23h28   #7
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 682
Points : 4 682
Bonsoir,

Vois en PJ un fichier (en xls mais testé sous 2010) exemple qui n'apporte rien de plus que mon autre post, mais permet de concrétiser.

Par défaut le USF s'initialise avec le multipage invisible en page 2 (d'index 1 donc) et le frame est en page 1.

le code est concis, vois les tabulations dans le menu cité.

Code :
1
2
3
4
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MlpDétail.Visible = True
MlpDétail.Value = 0
End Sub
Si OK chez toi aussi, ça ne veut pas dire que tu ne rencontres pas de problème, chaque fichier est différent, mais essaies de reconstruire une maquette à ta sauce sur ce principe..

cordialement,

Didier
Fichiers attachés
Type de fichier : xls FocusFrame.xls (42,5 Ko, 3 affichages)
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 23h47   #8
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Par défaut Trop fort !

Bonsoir,

C'est tout à fait ça qu'il me faudrait, mais dans mon appli je n'arrive pas à "quitter" l'Usf sans la souris alors que dans ton exemple le seul fait de rendre visible le mlp saute le txt2 qui suit txt1 dans le tabindex !

La nuit apportera peut-être d'autres lumières...

Cordialement
Daniel
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h00.


 
 
 
 
Partenaires

Hébergement Web