Controls

Résolu
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 - 21 déc. 2011 à 04:56
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 - 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 !

14 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2011 à 08:00
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2011 à 07:44
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2011 à 07:54
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2011 à 08:02
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2011 à 08:06
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2011 à 10:12
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 déc. 2011 à 10:58
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
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
21 déc. 2011 à 12:39
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)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 déc. 2011 à 12:52
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
0
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
21 déc. 2011 à 12:55
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é !
0
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
21 déc. 2011 à 13:09
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 !
0
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
21 déc. 2011 à 17:16
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 !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 déc. 2011 à 06:52
possible de passer par des FlexGrid (ou autre)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
24 déc. 2011 à 00:54
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 !
0
Rejoignez-nous