Code plus "correcte"

Résolu/Fermé
ImiS - 25 nov. 2008 à 09:23
 ImiS - 25 nov. 2008 à 11:14
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
A voir également:

8 réponses

tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
25 nov. 2008 à 09:36
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.
0
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 :(
0
othanga > ImiS
25 nov. 2008 à 09:43
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
0
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
0
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 nov. 2008 à 09:53
Excuses moi, Imis d'avoir voulu t'aider; mais c'est promis, cela ne se renouvellera plus.
0
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.
0
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.
0

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

Posez votre question
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
0
Cool.
On sacrifiera un poulet pour que ça se reproduise plus :)
0
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.
0
othanga > ImiS
25 nov. 2008 à 10:11
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 !
0
ImiS > othanga
25 nov. 2008 à 10:18
Merci, j'espère que vous avez raison, car sans l'aident de ces personnes notres projet aurait été un fiasco.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
25 nov. 2008 à 10:55
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+
0
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
0