Code plus "correcte"
Résolu/Fermé
A voir également:
- Code plus "correcte"
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
8 réponses
tarek_dotzero
Messages postés
817
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
12 avril 2022
121
25 nov. 2008 à 09:36
25 nov. 2008 à 09:36
Je pense que:
Est plus simple, si c'est le même Array.
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.
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
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
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
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
25 nov. 2008 à 09:53
25 nov. 2008 à 09:53
Excuses moi, Imis d'avoir voulu t'aider; mais c'est promis, cela ne se renouvellera plus.
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.
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.
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.
Merci et bonne journée.
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
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
Cool.
On sacrifiera un poulet pour que ça se reproduise plus :)
On sacrifiera un poulet pour que ça se reproduise plus :)
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.
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
25 nov. 2008 à 10:55
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...
A+
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+
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
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
25 nov. 2008 à 09:40
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 :(
25 nov. 2008 à 09:43
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