Télécharger le zip
Form1.frm manquant
deolser voila le dossier complet
salut,j'ai été un peu sec sur ton autre source, on va essayer d'être plus constructif sur celle-ci :*il faut prendre le réflexe de déclarer/nommer/typer correctement ses variables. pour être certain de ne pas oublier, toujours écrire en toute première ligne "option explicit".çà te permet d'avoir un message d'erreur en cas d'oubli de déclarationnb : cette ligne pour aussi s'écrire toute seule : outils > option > Editeur > déclaration des variables obligatoire*nomme bien tous tes contrôles. Command35 n'est pas clair !*ton code fait environ 1000 lignes, pour une procédure de 50 lignes, et le reste est plus ou moins le même code pour chacun de tes 109 boutons !en VB6 tu as la propriété INDEX, qui te permets de créer un groupe de contrôles.çà te permet ainsi de n'avoir qu'une seule procédure/évènement Command1_Click, avec l'argument INDEX en paramètrequ'est-ce que çà te ferait gagner ici?regardons le code des boutons :Private Sub Command99_Click() Symbole.Caption = "" + "Cm" Nom.Caption = "" + "Curium" Zatomique.Caption = "" + "96" Gmolatomique.Caption = "" + "247" CCE_uEnd Sub*Symbole.Caption = "" + "Cm"tous tes boutons contiennent déjà la bonne chaine (CM ici)donc tu gagnes déjà une ligne (* 108)de plus ici niveau syntaxe, pas besoin de commencer par ""et en VB on concatère 2 chaînes par "&", et non "+"=> on a donc alors "Symbole.Caption = Cmd_Periode(Index).Caption"*CCE_utu appeles toujours la même procédure, elle ne sera donc écrite qu'une seule fois ;)* Nom.Caption = "" + "Curium" Zatomique.Caption = "" + "96" Gmolatomique.Caption = "" + "247"ici c'est un peu différent. tu as des valeurs différentes à chaque bouton.plusieurs solution s'offrent alors à toi :soit par exemple un TABLEAU, indexé de 0 à 107, qui va contenir ces infossoit de nouveau dans ton évènement Click, tu vas appeler CCE_u mais en lui passant tes 3 paramètres...la première solution est la plus rapide à mettre en place, et la moins couteuse en nombre de lignes*If Zatomique.Caption = 1même si VB ne râle pas, 1 est un integer, Caption est un stringtu ne dois pas comparer chaine = numérique=> "If Zatomique.Caption = 1"*End IfIf Zatomique.Caption = 2pas besoin de quitter un IF et de vérifier ensuite si = 2 (ou = "2")si c'était TRUE avant (donc = "1"), tous les tests après sont inutilesdans ce cas tu peux utiliser le SELECT CASEet pour pouvoir considérer la chaine comme une valeur, on utilisera VAL()=> procédure CCE_u complète :Private Sub CCE_u() Dim ZVal As Long: ZVal = Val(Zatomique.Caption) Select Case ZVal Case 1, 2: CCE.Caption = "(K)" & CStr(ZVal) Case 3 To 10: CCE.Caption = "(K)2 (L)" & CStr(ZVal - 2) Case 11 To 18: CCE.Caption = "(K)2 (L)8 (M)" & CStr(ZVal - 10) Case 19 To 36: CCE.Caption = "(K)2 (L)8 (M)8 (N)" & CStr(ZVal - 18) Case 37 To 54: CCE.Caption = "(K)2 (L)8 (M)8 (N)18 (O)" & CStr(ZVal - 36) Case 55 To 86: CCE.Caption = "(K)2 (L)8 (M)8 (N)18 (O)18 (P)" & CStr(ZVal - 54) Case 87 To 112: CCE.Caption = "(K)2 (L)8 (M)8 (N)18 (O)18 (P)32 (Q)" & CStr(ZVal - 86) End Select Select Case ZVal Case 58 To 71: Label15.Caption = "Lanthanides" Case 90 To 103: Label15.Caption = "Actinides" Case 3, 11, 19, 37, 55, 87: Label15.Caption = "Alcalins" Case 4, 12, 20, 38, 56, 88: Label15.Caption = "Alcalino-terreux" Case 9, 17, 35, 53, 85: Label15.Caption = "Halogènes" Case 2, 10, 18, 36, 54, 86: Label15.Caption = "Gaz nobles (ou Gaz rares)" Case Else: Label15.Caption = "Autres éléments" End SelectEnd Subc'est pas un peu plus lisible? ;)bon couragePCPT [AFCK]
merci jai du mal a comprendre mais sa va venir.sinon je voudrai faire un tableau oudans la case 1 je met "hydrogene","h","1","1.0"dans la 2 "helium","he","2","4.0" ...et que les variabel nom , num par exeple puisse reagiravec la case 1 (par exemple) et me donne nom = "hydrogene"en gros merci de maider je ne trouve pa la solution
désolé je ne comprends pas ce que tu demandes....CASE tu parles bien du SELECT CASEsi 1 (donc Zatomique.Caption="1"), tu peux éventuellement passer par une 2e procéduredu genre... (je n'ai plus ton code sous les yeux)Sub SetLabels(ByVal sVal1$, ByVal sVal2$, ByVal sVal3$, ByVal sVal4$) Label1.Caption = sVal1 Label35.Caption = sVal2 Lbl_Nomme.Caption = sVal3 Me.Caption = "Dernière valeur = " & sVal4End Subet comme çà tu as tes : Select Case ZVal case 1 : SetLabels "hydrogene","h","1","1.0" case 2 : SetLabels "helium","he","2","4.0"...
merci je vais essayer sa
merci c exactement sa que je voulai
alors combien /10 ma source maintenant
tu ne t'y retrouves pas mieux?passer de 1000 lignes à moins de 150, que demande le peuple :)quelques bricoles encore...manque "option explicit""Private Sub CCE_u(ByVal Nomination, ByVal Massmolaire)"Nomination et Massmolaire ne sont pas typées (as string)Zatomique.Caption = Index, index = interger, caption = string...Labels non nommés, idem pour d'autres contrôles mais tu as tenu compte de presque toutes mes remarques, bienbon courage pour la suite
merci je continue donc de le modifier pour quil soit convenable pour quelqun de ton niv sinon pe tu menvoyer des liens de vbfrance ou je pourai apprendre des truc de mon niv pour progresser. pe etre qun jour je serai o meme niv que toi.merci pour tous
voila derniere modif jespere pour ce progau faite jai mis option explicit mais a par a dir si des variable ne sont pa declarer a quoi sa serre. merci
c bon jai lu sur budget merci
salut je suis en train de progresser doucement mais surementje sais mettre une fenetre tjr o premier plan par un code trouver sur ce magnifique site mais je ne comprend pas tousdans la declaration avec le user32.dllmais sa viendrasinon a tu un conseil a me donner merci pcpt
Bonjour, On pourrait aussi faire encore autrement et plus direct en utilisant la fonction Choose, qui ici est bien adaptée... Voici le listing que cela donne : = Option Explicit Private Sub Elements_Click(Index As Integer) Zatomique.Caption = Str(Index) Symbole.Caption = Elements(Index).Caption Nom.Caption = Choose(Index, "Hydrogène", "Helium", "Lithium", "Béryllium", _ "Bore", "Carbone", "Azote", "Oxygène", "Fluor", _ "Néon", "Sodium", "Magnésium", "Aluminium", "Silicium", _ "Phosphore", "Soufre", "Chlore", "Argon", "Potassium", _ "Calcium", "Scandium", "Titane", "Vanadium", "Chrome", _ "Manganèse", "Fer", "Cobalt", "Nickel", "Cuivre", "Zinc", _ "Gallium", "Germanium", "Arsenic", "Sélénium", "Brome", _ "Krypton", "Rubidium", "Strontium", "Yttrium", "Zirconium", _ "Niobium", "Molybdène", "Technétium", "Ruthénium", "Rhodium", _ "Palladium", "Argent", "Cadmium", "Indium", "Étain", _ "Antimoine", "Tellure", "Iode", "Xénon", "Césium", "Baryum", _ "Lanthane", "Cérium", "Praséodyme", "Néodyme", "Prométhium", _ "Samarium", "Europium", "Gadolinium", "Terbium", "Dysprosium", _ "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutétium", _ "Hafnium", "Tantale", "Tungstène", "Rhénium", "Osmium", _ "Iridium", "Platine", "Or", "Mercure", "Thallium", "Plomb", _ "Bismuth", "Polonium", "Astate", "Radon", "Francium", "Radium", _ "Actinium", "Thorium", "Protactinium", "Uranium", "Neptunium", _ "Plutonium", "Américium", "Curium", "Berkélium", "Californium", _ "Einsteinium", "Fermium", "Mendélévium", "Nobélium", "Lawrencium", _ "Rutherfordium", "Dubnium", "Seaborgium", "Bohrium", "Hassium", _ "Meintnerium", "Ununnilium", "Unununium", "Ununbium") Gmolatomique.Caption = Choose(Index, 1#, 4#, 6.9, 9#, 10.8, 12#, 14#, 16#, 19#, 20.2, 23#, 24.3, _ 27#, 28.1, 31#, 32.1, 35.5, 39.9, 39.1, 40.1, 45#, 47.9, 50.9, _ 52#, 54.9, 55.8, 58.9, 58.7, 63.5, 65.4, 69.7, 72.6, 74.9, 79#, _ 79.9, 83.8, 86.5, 87.6, 88.9, 91.2, 92.9, 95.9, 98, 101.1, 102.9, _ 106.4, 107.9, 112.4, 114.8, 118.7, 121.8, 127.6, 126.9, 131.3, _ 132.9, 137.3, 138.9, 140.1, 140.9, 144.2, 145, 150.4, 152#, 157.3, _ 158.9, 162.5, 164.9, 167.3, 168.9, 173#, 175#, 178.5, 180.9, 183.9, _ 186.2, 190.2, 192.2, 195.1, 197#, 200.6, 204.4, 207.2, 209#, 209, _ 210, 222, 223, 226, 227, 232.2, 231, 238#, 237, 244, 243, 247, 247, _ 251, 252, 257, 258, 259, 260, 261, 262, 263, 262, 265, 266, 269, _ "???", 277) Select Case Index Case 58 To 71: Familly.Caption = "lanthanides" Case 90 To 103: Familly.Caption = "actinides" Case 3, 11, 19, 37, 55, 87: Familly.Caption = "alcalins" Case 4, 12, 20, 38, 56, 88: Familly.Caption = "alcalino-terreux" Case 9, 17, 35, 53, 85: Familly.Caption = "halogènes" Case 2, 10, 18, 36, 54, 86: Familly.Caption = "gaz nobles (ou gaz rares)" Case Else: Familly.Caption = "(Autres éléments)" End Select Select Case Index Case 1, 2: CCE.Caption = "(K)" & CStr(Index) Case 3 To 10: CCE.Caption = "(K)2 (L)" & CStr(Index - 2) Case 11 To 18: CCE.Caption = "(K)2 (L)8 (M)" & CStr(Index - 10) Case 19 To 36: CCE.Caption = "(K)2 (L)8 (M)8 (N)" & CStr(Index - 18) Case 37 To 54: CCE.Caption = "(K)2 (L)8 (M)8 (N)18 (O)" & CStr(Index - 36) Case 55 To 86: CCE.Caption = "(K)2 (L)8 (M)8 (N)18 (O)18 (P)" & CStr(Index - 54) Case 87 To 112: CCE.Caption = "(K)2 (L)8 (M)8 (N)18 (O)18 (P)32 (Q)" & CStr(Index - 86) End Select End Sub Private Sub Form_Load() Elements_Click (1) End Sub = Il reste à complèter avec d'autres renseignements... voir ouvrir une fenêtre à chaque click pour avoir une fiche d'identité complète... La présentation est simple, mais propre... un p'tit 8/10 d'encouragement. Amicalement, Us.
ouh que c'est gourmand de créer un tableau de variants à chaque click...autant le créer une seule fois au load et utiliser juste '= tableau1v(index)'ce que je proposais au départ donc ;)"soit par exemple un TABLEAU, indexé de 0 à 107, qui va contenir ces infossoit de nouveau dans ton évènement Click, tu vas appeler CCE_u mais en lui passant tes 3 paramètres...la première solution est la plus rapide à mettre en place, et la moins couteuse en nombre de lignes"
Euh... non... je ne suis pas certain d'être d'accord... CHOOSE n'est pas tout à fait comme un ARRAY... non ? Il me semble pas que CHOOSE stock les données dans un tableau... même si les données sont bien en type Variant... En terme de nb de ligne... ben, ce que je propose est le plus court... c'est une évidence. C'est d'ailleurs une équivalence de ce que tu dis au sujet du tableau indicé de 0 à 107... puisque c'est faire un ARRAY à la place de CHOOSE... ... et donc le mettre dans un LOAD, est justifié si c'est un tableau, mais pas nécessaire avec CHOOSE, selon moi... Amicalement, Us.
un tableau de variant pardim a1 as variant '<- en partie 'déclaration'a1=array("Hydrogène", "Helium", "Lithium", "Béryllium", ...irait oui.par contre ici tu passes forcément par un tableau, qui est un moment donné "stoqué". il faut bien boucler dedans...tu pourrais aussi bien faire :Nom.Caption = split("Hydrogène||Helium||Lithium||Béryllium||...","||)(index)là on se rend bien plus facilement compte du travail 'inutile' (en ressources), c'est pourtant kifkif ;)
Dans le fond, nous sommes d'accord... Sur la forme, un peu moins... Je m'explique pour la fonction CHOOSE. Bien sur, il faut pouvoir boucler dedans... mais il y a-t-il vraiment un stockage des données dans un tableau, où seulement un repérage de l'emplacement de la donnée ? En d'autres termes, est-ce que CHOOSE fonctionne avec les étapes suivantes : - Lecture et stockage de l'ensemble des données, - puis répérage le l'indice correspondant (Index dans le code), - enfin, Renvoi de la donnée. OU - Repérage des données (grâce à la virgule), - Si pas le bon indice => continu, - Arrivé au bon indice => renvoi de la donnée. Dans le 1er cas, c'est un schéma qui fonctionne comme un Array, dans le 2ième, c'est bien différent... Maintenant, seul l'étude du code compilé en assembleur pourrait le dire... enfin, voilà pourquoi je pense que Choose est plus adaptée, car je penche pour la seconde solution... je me trompe peut-être... Néanmoins, il reste que dans l'absolu, l'emploi de l'array est gourmand aussi, puisqu'on stoque toutes les données en permamence. L'emploi de Choose, dans le cas où elle fonctionne comme un Array, doit détruire le tableau après utilisation... Il est certain que pour 107 données, y'a pas de quoi s'affoler non plus... mais n'empêche dans une autre situation avec plus de données est-ce que Choose serait mieux qu'une Array... Amicalement, Us.
pas d'asm, je ne saurai te dire avec certitude.mais de logique :lors de la compilation, le type PARAMARRAY (qui n'existe pas en réalité) devient un tableau de variant à dimension fixe.1) çà me paraît "normal" mais je ne peux pas vérifier2) je ne vois absolument pas comment VB (compilé) pourrait lire entre les virgules, elles n'existent pas en réalité ;)
Euh... oui, tu as raison, au sujet de la virgule, je raisonnais comme un algorithme de recherche... Il reste qu'au niveau ressource, est-ce qu'un CHOOSE prend autant de ressource qu'un ARRAY ?... mystère, donc... Amicalement, Us.
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 873 496 membres 30 nouveaux aujourd'hui 16 151 membres club