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

Signaler
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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