[Catégorie modifiée VB6 --> VBA] Syntaxe d"appel de Combo dans Fonction

CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 3 août 2010 à 02:22
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 3 août 2010 à 20:47
Bonjour,

Je voudrais donner le focus sur un ComboBox appelée dans une Fonction

Voila le code :

Private Sub ChangeInputBox(sTest As String, iTest As Integer, iRange As Integer)
    Dim i As Integer
    If gblInit Then Exit Sub
    Application.ScreenUpdating = False
    Range(sTest & ".Test" & iTest & ".Inputs").Cells(3, iRange).Value = _
    Me.Controls("Test" & iTest & "Input" & iRange & "Box").Value
    For i = 1 To MaxPts
        myval = Range(sTest & ".Test" & iTest & ".Outputs").Cells(6, i).Value
        If myval = "Too Low" Then

            'Je veux obtenir : TestWRT.Test1Input3Box.SetFocus
                'sRest = WRT
                'iTest = 1
                'iRange= 3
                
            'Je fais ça, qui marche pas : Normal on a Z="TestWRT.Test1Input3Box" !
            Dim Z
            Z = "Test" & sTest & ".Test" & iTest & "Input" & iRange & "Box"
            Z.SetFocus
            
            '............... ????????
            
            MsgBox "Débit trop faible : Changer de Calibre", vbCritical
            Exit Sub
        End If
        Me.Controls("Test" & iTest & "Flow" & i & "Box").Caption IIf(myval "", "", Format(myval, IIf(myval > 1000, "0", IIf(myval > 100, "0.0", "0.00"))))
        myval = Range(sTest & ".Test" & iTest & ".Outputs").Cells(7, i).Value
        Me.Controls("Test" & iTest & "Error" & i & "Box").Caption IIf(myval "", "", Format(myval, "0.0%"))
    Next i
    Application.ScreenUpdating = True
End Sub


Ce qui serait encore mieux, ce serait de mettre la valeur 'erronée) de la combo en "surbrillance"..., mais je ne sais pas faire (à part changer la couleur, mais c'est trop contraignant).

Si une bonne âme voulais me guider pour trouver cette de syntaxe, on serait deux au paradis!

Merci d'avance

Cordialement,
Rataxes64

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 août 2010 à 08:36
Salut
Fais bien attention à la catégorie de ta question, surtout lorsque ça touche aux composants : les méthodes VB6 et VBA diffèrent énormément.

Essaye ça :
    Dim Z As Object
    Set Z = Me.Controls("Test" & sTest & ".Test" & iTest & _
            "Input" & iRange & "Box")
    Z.SetFocus

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
3 août 2010 à 15:16
Bonjour Jack

Désolé, d'avoir sélectionné le mauvais emplacement.

Merci pour la réponse (toujours fidèle au poste!), mais ça ne marche pas : Z me renvoie la VALEUR dans la box...

J'ai essayé un "Dim Z as TextBox" (car c'est une TextBox et pas une ComboBox), et j'ai aussi "bêtement" essayé :
Me.Controls("Test" & iTest & "Input" & iRange & "Box").SetFocus

Sans plus de succès...évidemment!

Rien à faire, la Box ne prend pas le Focus...

En revanche, aucun problème pour, par exemple changer BackColor :
Me.Controls("Test" & iTest & "Input" & iRange & "Box").BackColor = &HFF&


C'est incompréhensible

Codialement
Rataxes64
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 août 2010 à 20:47
Re
Chez moi, ça fonctionne très bien :
Une UserForm
Un CommandButton
Une TextBox

Mettre le TabIndex du CommandButton à Zéro pour qu'il prenne le focus au lancement
+ dans le code de ce bouton :
    Dim z As MSForms.TextBox
    Set z = Me.Controls("TextBox1")
    z.SetFocus
Et la TextBox prend bien le focus.

Méfie toi, les TextBox des UserForm ne sont pas des TextBox sous forme OCX mais appartenant à la librairie MSForms.

As-tu un affreux "On Error Resume Next" qui traine qqpart et qui masquerait le problème réel ?

Oups, j'avais pas fait attention que le composant auquel tu veux passer le focus semble se trouver sur une autre UserForm ?
Si non : enlève le nom du support de la syntaxe
Si oui : Il faut d'abord donner le focus à l'objet support de ce composant, mais pas sûr que cela puisse fonctionner
0
Rejoignez-nous