Controls [Résolu]

Messages postés
317
Date d'inscription
lundi 29 septembre 2008
Dernière intervention
29 janvier 2019
- - Dernière réponse : Galactus13
Messages postés
317
Date d'inscription
lundi 29 septembre 2008
Dernière intervention
29 janvier 2019
- 24 déc. 2011 à 00:54
Bonjour a tous,
Sa faisait un moment que je n'étais passé, IRL oblige !
Ma question est simple,mais je m'y perds !
Set ObjCombo = Me.Controls(I).Name
Comment en faire un objet ?
Ma fonction:

Function ChercheControls(Objets As String) As Integer

Dim I As Long
Dim J As Long
Dim ObjCombo As ComboBox
Dim Nom As String

For I = 0 To Me.Controls.Count - 1
If TypeOf Me.Controls(I) Is ComboBox Then GoSub Suite
Next I
Exit Function

Suite:
Nom = Me.Controls(I).Name ' est ce un combo voulu ?
If InStr(Nom, Objets) > 0 Then
Set ObjCombo = Me.Controls(I).Name
'Erreur ligne cidessus : objet obligatoire !
For J = 0 To 40
ObjCombo.AddItem Str(J)
Next J
End If
Return

j'ai plus de 300 Combo, galère !
Si quelqu'un peut m'aider sa serais cool !

seul celui qui reconnait ses fautes, Progress ..._bar
Galactus le Vrai !
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
3
Merci
Set implique un Objet

Name est un String, pas un objet

faire simplement :

Set ObjCombo = Me.Controls(I)

pour nettoyer ton code (merci de l'avoir colorié!!!)


que contient la chaine "Objets" transmise ?
il semble que tu souhaites pouvoir cibler plusieurs comboBox.
utilises-tu bien un séparateur entre le nom de chaque combo ciblé ?

pourquoi utiliser une Function (tu ne renvoie rien)

Gosub inutile ici...

Sub ChercheControls(ByRef vF As Form, ByRef vsNames As String)
Dim i As Long
Dim o As Object
Dim oCbo As ComboBox
    '# On parcoure chaque controle de la Form vF
    For Each o In vF.Controls
        '# Si l'itération courante porte sur un Combobox, on le traite...
        If TypeOf o Is ComboBox Then
            Set oCbo = o
            '# Si le nom du combobox correspond a notre demande...
            If InStr(1, oCbo.Name, vsNames, vbTextCompare) Then
                '# On effectue un traitement particulier sur ce contrôle
                For i = 0 To 40
                    oCbo.AddItem Str(i)
                Next i
            End If
        End If
    Next o
End Sub



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
264
0
Merci
Bonjour,

L'instruction Set affecte un Objet (de type object) à une variable
La propriété Name d'un objet n'est pas un objet, mais le nom (de type string) de l'objet
Set ObjCombo = Me.Controls(I).Name

est bien évidemment en contradiction avec cette règle fondamentale (exposée dans ton aide MSDN pour l'instruction Set)
Dans ta boucle, tu cherches apparemment à parcourir tous les objets contrôles présents sur un Form et quittes ta boucle si tu trouves une ComboBox.
Si tu en trouves une, elle est déjà en soi un objet : l'objet Controls(i) !

Maintenant :
1) ton code est suffisamment mal écrit pour que l'on ne puisse deviner avec certitude le but recherché et te guider, donc, en parfaite connaissance de cause
2) si tu veux une aide plus complète, expose en détail et avec précision de ce tu as sur ton Form et ce que tu cherches à obtenir exactement

PS : en ce qui concerne mon aide éventuelle : je pars en voyage demain matin et ne serai de retour que l'année prochaine. Le temps étant court, je te conseille d'être d'entrée de jeu suffisamment précis pour ne pas tout retarder par la nécessité de te poser au "coup par coup" des questions supplémentaires. Essaye donc d'être à la fois concis et très précis.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
264
0
Merci
Et peux-tu m'expliquer également ce que tu attends que fasse ton "Return" dans ta fonction ? (alors que je n'y vois aucun GoSub).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
0
Merci
Bonnes vacances, l'ami ucfoutu, ta vue baisse, ou la fatigue se fait sentir ^^

Et peux-tu m'expliquer également ce que tu attends que fasse ton "Return" dans ta fonction ? (alors que je n'y vois aucun GoSub).


on a bien :
If TypeOf Me.Controls(I) Is ComboBox Then GoSub Suite


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
264
0
Merci
Bonjour, Renfield

Ouais, tu as meilleure vue que moi. A ma décharge : un code non indenté et le fait que je n'avais pas encore bu mon café


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
264
0
Merci
ceci étant dit et en lisant ce qu'il écrit là :
j'ai plus de 300 Combo, galère !

et :
- sans préjudice de l'estimation de son appli (300 comboboxes !)
- constatant qu'il veut apparemment remplir toutes ses comboboxes d'une série de chiffre allant de 0 à 40
- et en constatant qu'il développe sous VB6 ===>>
il devrait sans plus attendre s'intéresser à ce que sont les groupes de contrôles indexés, ce qui le conduirait à réduire son code à ceci (avec un groupe de comboboxes "combototo" indexées de 0 à x (299, donc)
For i = 0 To combototo.Count - 1
   For j = 0 To 40
     combototo(i).AddItem j
   Next
 Next

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
0
Merci
clair que c'est pas courant, ergonomie a revoir, ou du-moins a travailler

même plus court (et rapide)

For Each objCbo In combototo
   For j = 0 To 40
     objCbo.AddItem j
   Next
 Next


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
73
0
Merci
Salut

Consulte <cette documentation> et tu verras que multiplier les objets peut poser des problèmes.
Comme le dit Renfield, il faut revoir l'organisation de ton projet. Il n'est pas normal d'avoir autant d'objets : comment l'utilisateur va t-il s'y retrouver ?

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)
Commenter la réponse de cs_Jack
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
264
0
Merci
Bonjour, jack,
Je commence d'ailleurs à m'y perdre moi-même, avec un Père (Noël ou Jack ?) qui arrive avec 4 jours d'avance .


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
317
Date d'inscription
lundi 29 septembre 2008
Dernière intervention
29 janvier 2019
1
0
Merci
Bonjour,
Oups ! Pas encore but mon café moi !
Merci Renfield et Ucfoutu d'avoir répondu si vite et pardon pour ma présentation de cochon ...
J'en profite pour vous souhaitez de bonne fête de fin d'année !

Je souhaite en effet remplir 300 combos environ d'une série de chiffre allant de 0 à 40.
Avec une fonction, ou sub, peut importe en fait.
Tout les combos sont déjà des groupes de 11 !
Ayant pour nom exemple:
Groupe 1 : CboLevelD(1 à 11)
Groupe 2 : CBOLevelM(1 à 11)
etc ...
Mais vu le paquet, si, si ! Ils servent tous !
Je sais bien que: Me.Controls(I).Name ne peut
pas être transformé en objet !
Set ObjCombo = Me.Controls(I).Name 

est en contradiction, mais c'était l'idée.
Je teste le code de Renfield ...
Et revient dire si sa fonctionne ou pas !
ET surtout après avoir bu mon café ! héhé !
Commenter la réponse de Galactus13
Messages postés
317
Date d'inscription
lundi 29 septembre 2008
Dernière intervention
29 janvier 2019
1
0
Merci
Me revoiloux !
Merci renfield !
C'était pile poil se que je voulais faire !
Et je viens de comprendre mon erreur, me fallait créer un Objet ! un vrai quoi !
La fatigue et mon age, sans doute, et une grosse épine enlevé !
Je me voyais mal tout remplacer par des textbox même si après une nuit de réflexion, je pense que se serait plus sage !
Pourquoi faire simple quand on peut faire compliqué !

seul celui qui reconnait ses fautes, Progress ..._bar
Galactus le Vrai !
Commenter la réponse de Galactus13
Messages postés
317
Date d'inscription
lundi 29 septembre 2008
Dernière intervention
29 janvier 2019
1
0
Merci
Oups ! J'ai tout relu et Oublié Jack ! re Oups !
Désoler !
Bonne fête aussi !
Du coup, j'ai tout remplacer par des textbox, plus rapide, mais j'ai gardé le sub pour le remplissage de chacun d'eux via une sauvegarde:
Voici l'image du modèle d'origine ...


seul celui qui reconnait ses fautes, Progress ..._bar
Galactus le Vrai !
Commenter la réponse de Galactus13
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
0
Merci
possible de passer par des FlexGrid (ou autre)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
317
Date d'inscription
lundi 29 septembre 2008
Dernière intervention
29 janvier 2019
1
0
Merci
FlexGrid , je ne maitrise pas du tout !

J'avais pensé au listView
C'est mon bébé !
Mais ne me parait pas adapté dans le contexte.
Sauf pour l'affichage final; j'y resiste jamais !




seul celui qui reconnait ses fautes, Progress ..._bar
Galactus le Vrai !
Commenter la réponse de Galactus13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.