Morvonez
Messages postés6Date d'inscriptionmercredi 27 décembre 2000StatutMembreDernière intervention 4 décembre 2008
-
29 nov. 2008 à 23:00
Morvonez
Messages postés6Date d'inscriptionmercredi 27 décembre 2000StatutMembreDernière intervention 4 décembre 2008
-
4 déc. 2008 à 20:24
Bonsoir,
Etant débutant en Visual Basic (VB6)
J'espère pouvoir trouver de l'aide pour mon problème.
J'aimerais comprendre comment ajouter grace à un bouton ici "Ajouter" (CmdAjouterP) les données entrées dans différents controles dans une MsFlexGrid.
Illustation de ma demande:
Ma question:
Quelle est la marche à suvrir ou fonction à utiliser pour pouvoir grâce au bouton "Ajouter", remplir la ligne de ma msflexgrid avec dans l'ordre:
<li>Le numéro de l'entrée (+1 à chaque fois que le bouton "Ajouter" est utilisé).</li><li>Le Type de pièce->défini par l'utilisateur dans la ListBox (lstPieces).</li><li>Le nombre de pièce->défini par l'utilisateur dans la Textbox (TxNbreP).</li><li>La largeur, hauteur, Longeur et l'angle sont semblables au nombre de pièce.</li><li>La matière->défini par l'utilisateur dans une ComboBox (CboMatier).</li><li>Isolation et Réseau sont aussi des données provenant de ComboBox.</li> Par la suite, j'aimerais pouvoir grace au bouton "Supprimer" après selection de la ligne cconcernée, supprimer toute la ligne ainsi que les donées dont elle est composée.
J'ai bien conscience que j'en demande beaucoup, mais un peu d'aide me permettra de comprendre le fonctionnement de cette fameuse MsFlexGrid.
Merci d'avance aux personnes pouvant m'aiguiller pour résoudre mon problème.
Regarde la propriété Textmatrix(ligne, colonne) de la MsHFlexgrid
Elle te permet de mettre un texte dans une Mshflexgrid à la colonne et à la ligne spécifiées
De plus la propriété Rows de cette MsHFlexgrid te permet de rajouter une ligne vide en faisant MsHFlexgrid.rows = MsHFlexgrid.rows +1. A toi ensuite de remplir cette ligne avec des données
Il faut évidemment vérifier que toutes des données dans les Textbox et Combobox soient valides (remplies pour les Textbox et sélectionnées pour les Combobox)
De plus la création d'une structure peut simplifier le code pour les données à inscrire dans la grille ( voit mot clé Type)
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 ' on ajoute une ligne
Ligne& = ligne& + 1 ' on augmente la ligne courante
MSFlexGrid1.Textmatrix(ligne&,0) = str$(ligne&) ' on affiche le n° de ligne
' Nombre de pièces
' ici remplace Txtnbre par le nom de ta zone de texte qui reçoit le nombre de pièces ( ligne à effacer dans le code)
if Txtnbre.Text = "" then msgbox "Nombre de pièces non rempli": Exit Sub
MSFlexGrid1.Textmatrix(ligne&,2)= Txtnbre.Text ' on affiche le nombre de pièces dans la grille en colonne 2 , le numéro de ligne ne change pas
End sub
tu fais ensuite pareil pour la largeur, hauteur, longueur et angle : prends exemple sur le code qui sert pour le nombre de pièces en mettant le bon numéro de colonne
On verra ensuite pour les listes de choix ( type de pièces, etc....)
Bon courage et à ton service
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Pour les Listbox et Combobox c'est pas si difficile que ça
La listbox a une propriété Listindex qui te donne l'index de la ligne sélectionnée
Il faut d'abord tester si une ligne a été sélectionnée : si Listindex = -1 rien n'est sélectionné
La Combobox marche de la même façon
Regarde dans ton aide de Visual Basic sinon je t'aiderai
autre chose : modifie cette ligne
if Txtnbre.Text = "" then msgbox "Nombre de pièces non rempli":Effacelignecourante: Exit Sub
toutes les tests sur les zones de texte doivent être construites de la même façon
si on a rien frappé pour la zone on avertit par un message,on efface la ligne courante dans la grille et on sort directement
Rajoute ensuite ce sous-programme
Private Sub Effacelignecourante()
MSFlexGrid1.Rows = MSFlexGrid1.Rows - 1 ' on supprime une ligne
Ligne& = ligne& + 1 ' on diminue la ligne courante
MSFlexGrid1.Refresh ()
End Sub
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
1° Construis les tests sur les 4 autres zones de texte comme celle du nombre de pièces
if Txtnbre.Text = "" then msgbox "Nombre de pièces non rempli":Effacelignecourante: Exit Sub
2° Rajoute ensuite ce sous-programme ( ce n'est pas le code de suppression d'une ligne) : cela supprime la LIGNE COURANTE si un paramètre n'a pas été rentré ou sélectionné
Rajoute ce bout de code juste au dessus de Private Sub Form_Load()
Private Sub Effacelignecourante()
MSFlexGrid1.Rows = MSFlexGrid1.Rows - 1 ' on supprime une ligne
Ligne& = ligne& + 1 ' on diminue la ligne courante
MSFlexGrid1.Refresh
()
End Sub
Pour l'instant tu ne mets rien dans la MSHFlexgrid
3° Pour les Listbox et Combobox c'est pas si difficile que ça
La listbox a une propriété Listindex qui te donne l'index de la ligne sélectionnée
Il faut d'abord tester si une ligne a été sélectionnée : si Listindex = -1 rien n'est sélectionné
La Combobox marche de la même façon
Pour ce test il faut faire ( List1 est la listbox des types de pièces dans ce cas)
If List1.Listindex = -1 then Msgbox "Sélectionnez un type de pièces":Effacelignecourante:Exit Sub
Fait ainsi pour les Listbox et Combobox pour les sélections
4° C'est seulement ici après avoir fait la vérification que tous les paramètres ont été entrés ou sélectionnés que l'on va remplir la grille
Mais pour cela tu as du travail sur la planche d'abord
Pour l'erreur que tu rencontres
Salut, j'ai parcouru l'aide VB6 sur l'utilisation des comboBox et
listeBox mais ça ne m'aide pas vraiment.
C'est
plutôt un descriptif des différents contrôles. J'ai tenté plusieurs
variantes et ce qui me parait le plus logique serait celui-ci :
' Type de pièce
If lstPieces.Text = "" Then MsgBox "Aucun type de pièce séléctionné": Exit Sub
If lstPieces.Text = "Gaine droite" Then
MSFlexGrid1.TextMatrix(ligne&, 1) = Gaine droite
End If
Apparemment je suis loin de comprendre comment ça fonctionne vue qu'avec ce code, j'obtiens une erreur de syntaxe à la ligne :
MSFlexGrid1.TextMatrix(ligne&, 1) = Gaine droite
MSFlexGrid1.TextMatrix(ligne&, 1) = "Gaine droite" ' un texte brut se met entre guillemets
Si tu rencontres vraiment trop de difficultés envoi-moi un message privé avec ton adresse émail. Je te fournirai mon adresse émail et tu m'enverras le projet.Je te le mettrais au point
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
GRENIER Alain
Vous n’avez pas trouvé la réponse que vous recherchez ?
Salut, j'ai parcouru l'aide VB6 sur l'utilisation des comboBox et listeBox mais ça ne m'aide pas vraiment.
C'est
plutôt un descriptif des différents contrôles. J'ai tenté plusieurs
variantes et ce qui me parait le plus logique serait celui-ci :
' Type de pièce
If lstPieces.Text = "" Then MsgBox "Aucun type de pièce séléctionné": Exit Sub
If lstPieces.Text = "Gaine droite" Then
MSFlexGrid1.TextMatrix(ligne&, 1) = Gaine droite
End If
Apparemment je suis loin de comprendre comment ça fonctionne vue qu'avec ce code, j'obtiens une erreur de syntaxe
De plus lstPièces est une listbox et non une zone de texte et es-tu sur de prendre le texte sélectionné ?
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Résultat: En cliquant sur la touche Ajouter, cela a pour effet d'ajouter les "titres" des colonnes dans une 2 ème ligne (c'est déjà un bon début). Si je clique une seconde fois, une 3 ème ligne vierge s'ajoute.
Je vais essayé de comprendre maintenant comment reporter les différentes valeurs entrées dans les contrôles.
C'est pas vraiment simple mais je trouve assez motivant d'apprendre comment utiliser VB6 tout en ayant un projet "concret" en tête. Cela me permet de me familiariser avec visual basic en vue de reproduire un "logiciel" sous forme de classeur excel en executable.
Je ne sais pas si la syntaxe des bouts de codes citées plus haut est correct ? ou si je me complique la tâche. Étant débutant j'aimerais apprendre en ne prenant pas de mauvaise habitude.
Morvonez
Messages postés6Date d'inscriptionmercredi 27 décembre 2000StatutMembreDernière intervention 4 décembre 2008 1 déc. 2008 à 19:39
Bonjour Alain,
Merci beaucoup de prendre le temps de répondre à mes questions.
J'ai donc remplacer mon code pas celui que tu me proposes ça fonction parfaitement. Je vais reprendre la commande que tu m'as appris pour le bouton "Ajouter" pour que tous les contrôles de type "TextBox" fonctionnent.
Pour les contrôles de type "ListBox" et "ComboBox" ça me semble déjà plus complexe à mettre en œuvre. Il faut que le logiciel "comprenne" quelle a été l'option selectionnée par l'utilisateur.
Morvonez
Messages postés6Date d'inscriptionmercredi 27 décembre 2000StatutMembreDernière intervention 4 décembre 2008 3 déc. 2008 à 23:00
Salut, j'ai parcouru l'aide VB6 sur l'utilisation des comboBox et listeBox mais ça ne m'aide pas vraiment.
C'est plutôt un descriptif des différents contrôles. J'ai tenté plusieurs variantes et ce qui me parait le plus logique serait celui-ci :
' Type de pièce
If lstPieces.Text = ""Then MsgBox "Aucun type de pièce séléctionné": Exit Sub
If lstPieces.Text = "Gaine droite" Then
MSFlexGrid1.TextMatrix(ligne&, 1) = Gaine droite
End If
Apparemment je suis loin de comprendre comment ça fonctionne vue qu'avec ce code, j'obtiens une erreur de syntaxe à la ligne :
MSFlexGrid1.TextMatrix(ligne&, 1) = Gaine droite
Mise à par ça, je n'ai pas bien saisi ou placer le code que tu m'as conseillé de mettre soit:
Rajoute ensuite ce sous-programme
Private Sub Effacelignecourante()
MSFlexGrid1.Rows = MSFlexGrid1.Rows - 1 ' on supprime une ligne
Ligne& = ligne& + 1 ' on diminue la ligne courante
MSFlexGrid1.Refresh
()
End Sub
Je dois mettre ça dans mon bouton Supprimer (CmdSupPiece) ?
J'ai "adapté"un peu ton bout de code pour le mettre sur ce dernier bouton comme cela:
Private Sub CmdSupPiece_Click()
MSFlexGrid1.Rows = MSFlexGrid1.Rows - 1 ' on supprime une ligne
ligne& = ligne& + 1 ' on diminue la ligne courante
End Sub
Cela me permet de supprimer une ligne en partant du bas, mais sans aucune limite. En cliquant plusieurs fois sur le bouton "Supprimer", je peux carrément supprimer la ligne me servant de titre et le programme fini par planter.
La vie est dure en VB6, mais je suis toujours motivé dans mon apprentissage, merci beaucoup pour ton aide.
Morvonez
Messages postés6Date d'inscriptionmercredi 27 décembre 2000StatutMembreDernière intervention 4 décembre 2008 4 déc. 2008 à 20:24
Salut Alain,
Merci beaucoup pour tes explications. suite à ton avant dernier message, j'ai réussi à faire fonctionner les contrôles comboBox et listeBox.
Je suis content d'avoir réussi grâce à ton aide à faire une petite partie de mon projet.
Je suis maintenant beaucoup plus au clair avec l'utilisation des MsFlexGrid. Il me reste encore beaucoup à comprendre mais je commence à "maitriser" les bases.
Je te contact par MP pour t'envoyer l'avancement des travaux, si tu as le temps d'y jeter un œil pour voir si je ne fait pas fausse route, ça me serait grandement bénéfique.
Encore merci pour le temps que tu me consacre, ça fait vraiment plaisir!