Rechercher : dans
Par :

Code plus "correcte"

Dernière réponse le 25 nov 2008 à 11:14:12 ImiS, le 25 nov 2008 à 09:23:57 
 Signaler ce message aux modérateurs

Bonjour à toutes et à tous,

Je voudrais savoir s'il y a moyen de rendre se code plus correcte, il me sert à rentrer un liste dans une combobobox, je ne veux pas utiliser RowSource, j'utilise ça mais j'en ai beaucoup à faire (pour info 13):

Private Sub ComboBox1_Change()

If Me.ComboBox1.ListIndex = 1 Then
ComboBox2.Clear
ComboBox2.List = Array("Rénovation chaufferie", "Equipements annexes (cuve, conduits d'évacuation, ...)", "Réfection Réseaux de distribution", "Remplacement Emetteurs", "Remplacement D'une ou plusieurs CTA", "Remplacement de l'installation VMC")
End If
End Sub

If Me.ComboBox1.ListIndex = 2 Then
ComboBox2.Clear
ComboBox2.List = Array("Rénovation chaufferie", "Equipements annexes (cuve, conduits d'évacuation, ...)", "Réfection Réseaux de distribution", "Remplacement Emetteurs", "Remplacement D'une ou plusieurs CTA", "Remplacement de l'installation VMC")
End If
End Sub


Merci d'avance

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Code plus "correcte" » dans :
Windows ne s'arrête plus correctement VoirVotre système d'exploitation ne veut plus s'éteindre correctement ? Cela est probablement dû à un problème de gestion de l'alimentation (APM : Advanced Power Management). Pour résoudre ce problème, il faut avant tout s'assurer que l'APM est activé...
Les fichiers exécutables (.exe) ne s'ouvrent plus VoirMes programmes ne se lancent plus Il peut arriver que les fichiers exécutable ne s'ouvrent plus correctement : soit vous aurez la boite de dialogue "Ouvrir avec" soit il s'ouvre avec le bloc-note ou avec un autre programme. Ce problème est...
Windows - Problème de fond blanc dans les pages web VoirSi les pages web que vous visitez ne s'affichent plus correctement (il n'y a plus de couleur de fond, tout est blanc), comme sur cette image : Pour résoudre ce problème, suivre les étapes suivantes : Allez dans le "Panneau de...
Astuces de programmation VoirQuelques règles générales facilitent grandement la programmation et rendent le code plus lisible et aisément compréhensible. Si les éditeurs sont souvent dotés d’options bien utiles, les autres démarches ne relèvent que de vous. INDENTATIONS Comme...

1

tarek_dotzero, le 25 nov 2008 à 09:36:26

Je pense que:

If (Me.ComboBox1.ListIndex = 1) or (Me.ComboBox1.ListIndex = 2) Then 
ComboBox2.Clear 
ComboBox2.List = Array("Rénovation chaufferie", "Equipements annexes (cuve, conduits d'évacuation, ...)", "Réfection Réseaux de distribution", "Remplacement Emetteurs", "Remplacement D'une ou plusieurs CTA", "Remplacement de l'installation VMC") 
End If 
End Sub 


Est plus simple, si c'est le même Array.

Répondre à tarek_dotzero

2

ImiS, le 25 nov 2008 à 09:40:20

Bonjour tarek_dotzero,

Escusez moi mais c'est un copier-coller malheureux les 13 lists sont différentes, je cherche un moyen plus rapide que de tapper array("","","",etc) jusqu'a lors j'utilisais un code mais celui ci ne mache plus depuis aujourd'hui et je ne sais pas d'où provient la panne donc je veux un moyen sûre de créer des listes puis des sous menus car si à chaque fois le code me lâche c'est pas top :(

Répondre à ImiS

4

othanga, le 25 nov 2008 à 09:43:27

Ah !
si c'est la frappe des array qui te gène, t'as pas bcp de soluces.
éventuellement stocker tes constantes dans un fichier texte que tu charges en début d'exécution

Répondre à othanga

3

othanga, le 25 nov 2008 à 09:41:43

J'imagine que comme moi, tu t'oublies qqes fois sur le copier/coller et que donc le contenu de la combobox2 varie selon la sélection dans la combo1.

les axes pour écrire plus "propres" (mais y en a pas beaucoup)
1. utiliser un SELECT ... CASE au lieu des IF qui s'enchainent ou d'un IF avec de multiples ELSEIF
2. mettre tes array(liste de textes) en constantes en début de pgm (mais comme je suis pas très doué en basic, je sais pas si c'est possible).

Ça pourrait donner un truc du genre
const kListeA = Array("ChoixA1", "ChoixA2", "ChoixA3") (le k est mon petit memo pour CONSTANT)
const kListeB = Array("ChoixB1", "ChoixB2", "ChoixB3")
...
bcp plus loin
...
SELECT combobox1.ListIndex CASE
1: combobox2.Clear: combobox2.List = kListeA
2: combobox2.Clear: combobox2.List = kListeB


... ensuite, je te laisse explorer la possibilité de faire un tableau de tableaux (ça n'est pas choquant) pour avoir
const kListe = Array(Array("ChoixA1", "ChoixA2", "ChoixA3"),Array("ChoixB1", "ChoixB2", "ChoixB3"),...)
ensuite
ComboBox2.Clear: ComboBox2.Liste = kListe(combobox1.ListIndex)

C'est un peu tiré par les cheveux, mais ça serait plutot lisible

Répondre à othanga

5

ImiS, le 25 nov 2008 à 09:46:45

Bonjour othanga,

Effectivment vous avez tout à fait raison c'est un copier coler malheureux. De plus j'introduit mal mon problème, en fait j'utilisais un code le suivant:

Private Sub ComboBox1_Change()
Dim nbre As Byte, cptr As Byte, choix As Byte, col As Byte
Dim zone As String

Me.ComboBox1.Enabled = False
Me.ComboBox2.Enabled = True

choix = Me.ComboBox1.ListIndex + 1
zone = Choose(choix, "CVC", "plomberie", "courantft", "courantf", "SI", "levage", "PBA", "SO", "facade", "toiture", "VRD", "H", "D")
nbre = Application.CountA(Range(zone)) - 1
col = Choose(choix, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)

For cptr = 0 To nbre
Me.ComboBox2.AddItem Cells(cptr + 13, col)
Next

qui me permettait de créer des sous menus sans les tapper avec la fonction array car comme vous avez pu le remarquer mes liste sont long et les arguments aussi. Je souhaite donc eviter de saisir mais s'il n'y a pas d'autre moyen je m'y résoudrai.

Dans le code plus haut ce qui ne fonctionne plus c'est l'affichage dans la combobox 2 et aucune idée de la panne

Répondre à ImiS

6

michel_m, le 25 nov 2008 à 09:53:45

Excuses moi, Imis d'avoir voulu t'aider; mais c'est promis, cela ne se renouvellera plus. Cordialement,
Michel

Répondre à michel_m

8

ImiS, le 25 nov 2008 à 09:58:16

Bonjour michel_m,

Je crains de ne pas comprendre votyre phrase car si vous avez lu mais anciens post je vous remercie grandement du code mais je suis débutant et je n'y connais rien alors le temps de réhabilitation de ce code avec mon projet à été longue mais là il marche.

Je n'ai jamais dénigré ou pris votre aide à la légèrte et je tiens malgrè tou à vous remercier encore et SVp lisez le post à laquelle vous m'avez répondu et vous verrez.

Je vous souhaite une bonne journée.

Répondre à ImiS

7

ImiS, le 25 nov 2008 à 09:54:13

Bon finalement à force de bidouiller le code refonctionne mais pour combient de temps ^^, je vais essayer de tirer ça au clair.

Merci et bonne journée.

Répondre à ImiS

9

othanga, le 25 nov 2008 à 10:00:24

Bon, j'imagine que ça fonctionne dans Excel mais à la maison je n'ai que de l'OOo donc je peux pas tester tes fonctions avec lesquelles je suis pas à l'aise.
Et si c'est de l'Excel, on peut alors dire que la programmation est relativement propre car les constantes ne sont pas dans le programme (on rejoint un peu le désir de le mettre dans un fichier texte). Toujours si c'est de l'excel, les colonnes excel jouent parfaitement le rôle des Array utilisés initialement... Il n'y aurait donc pas énormément de "proprification" à apporter.
Par contre si c'est par de l'Excel, alors chuis vraiment largué :D

Répondre à othanga

10

othanga, le 25 nov 2008 à 10:01:14

Cool.
On sacrifiera un poulet pour que ça se reproduise plus :)

Répondre à othanga

11

ImiS, le 25 nov 2008 à 10:05:56

Lol merci pour le sacrifice, mais maintenant j'ai le regret d'avoir vexé une aide précieuse par mes phrases mal tournées effectivement le titre "code plus correct" n'était pas destiné à celui de michel_m. ET j'ai demandé cette aide car je n'ai plu de nouvelle de michel_m concernant son code mais maintenant il fonctionne. J'espère qui me comprendra et me viendra en aide comme il l'a fais car ImiS et Maxence lui doivent beaucoup.

Répondre à ImiS

12

othanga, le 25 nov 2008 à 10:11:16

Je pense que l'excuse venait à propos de la confusion sur l'erreur du copier/coller.
s'il avait été vexé initialement, il n'aurait pas répondu !

Répondre à othanga

13

ImiS, le 25 nov 2008 à 10:18:39

Merci, j'espère que vous avez raison, car sans l'aident de ces personnes notres projet aurait été un fiasco.

Répondre à ImiS

14

lermite222, le 25 nov 2008 à 10:55:12

Bonjour,
Peut-ont savoir quel est la condition qui te fait renoncer à RowSource ?
une autre façon d'abordrer ton problème...

Const NBListIx = 5 'nombre d'item dans combo1
Const NBitem = 6 'nombre maximum d'item dans combo2
Dim TB(NBListIx, NBitem)

Private Sub ComboBox1_Change()
Dim i As Byte, e As Byte
    If TB(0, 0) = "" Then '1ère initialisation
        GoSub InitTB
    End If
    ComboBox2.Clear
    For i = 0 To NBitem
        If TB(ComboBox1.ListIndex, i) <> "" Then
            ComboBox2.AddItem TB(ComboBox1.ListIndex, i)
        Else
            Exit For
        End If
    Next i
    ComboBox2.ListIndex = 0
Exit Sub
InitTB:
i = 0
    a = Array("Item 1:1", "Item 1:2", "Item 1:3", "Item 1:4", "Item 1:5", "Item 1:6")
    GoSub Entrer:    i = i + 1
    a = Array("Item 2:1", "Item 2:2", "Item 2:3", "Item 2:4", "Item 2:5", "Item 2:6")
    GoSub Entrer:    i = i + 1
    a = Array("Item 3:1", "Item 3:2", "Item 3:3", "Item 3:4", "Item 3:5", "Item 3:6")
    GoSub Entrer:    i = i + 1
    a = Array("Item 4:1", "Item 4:2", "Item 4:3", "Item 4:4", "Item 4:5", "Item 4:6")
    GoSub Entrer:    i = i + 1
    a = Array("Item 5:1", "Item 5:2", "Item 5:3", "Item 5:4", "Item 5:5", "Item 5:6")
    GoSub Entrer:    i = i + 1
    a = Array("Item 6:1", "Item 6:2", "Item 6:3", "Item 6:4", "Item 6:5", "Item 6:6")
    GoSub Entrer:
Return
Entrer:
    For e = 0 To UBound(a)
        TB(i, e) = a(e)
    Next e
    Return
End Sub

A+
L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

15

 ImiS, le 25 nov 2008 à 11:14:12

Bonjour Lermitte222,

Je vous remercie pour votre code mais celui de michel_m fonctione à merveille. Ce qui me fais renoncer au rowsource c'est que je souhaitais créer des sous menus de la manière suivante:
ComboBox1 = titre
ComboBox2= sous titre
et que je n'ai pas réussis en fonction des Rowsource, mais je le redit mon prblème est résolu grâce à michel_m, mais merci de votre solicitation.

Bonne journée

Répondre à ImiS
Collection CommentÇaMarche.net