MsFlexGrid->Remplir grille via un bouton [Résolu]

Morvonez 6 Messages postés mercredi 27 décembre 2000Date d'inscription 4 décembre 2008 Dernière intervention - 29 nov. 2008 à 23:00 - Dernière réponse : Morvonez 6 Messages postés mercredi 27 décembre 2000Date d'inscription 4 décembre 2008 Dernière intervention
- 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.

A bientôt.

Morvonez
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 30 nov. 2008 à 15:37
3
Merci
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.

GRENIER Alain

Merci cs_Galain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de cs_Galain
Meilleure réponse
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 1 déc. 2008 à 18:44
3
Merci
C'est un très bon début
en passant avec Textmatrix cela est plu rapide : tu n'as pas besoin de spécifier Mshflexgrid.col et Mshflexgrid.row

Colle ce code dans ta form

Private ligne as long  ' N° de ligne courante de la grille

Private Sub Form_Load()
 'chargement de la liste des pièces pour calcul
    lstPieces.AddItem "Gaine droite"
    lstPieces.AddItem "Coude"
    lstPieces.AddItem "Cône"
    lstPieces.AddItem "Déviation"
    lstPieces.AddItem "Rond-carré"
    lstPieces.AddItem "Té"
    lstPieces.AddItem "Manchette téléscopique"
    lstPieces.AddItem "Fond"
    CboMatier.AddItem "Galvanisé"
    CboMatier.AddItem "Alu"
    CboMatier.AddItem "Inox"
    CboMatier.AddItem "Cuivre"
    Cmbisol.AddItem "Sans isolation"
    Cmbisol.AddItem "Normal 19mm"
    Cmbisol.AddItem "Normal 25mm"
    Cmbisol.AddItem "Normal 35mm"
    CmbReseau.AddItem "Air neuf"
    CmbReseau.AddItem "Air pulsé"
    CmbReseau.AddItem "Air repri"
    CmbReseau.AddItem "Air évacué"
    MSFlexGrid1.Cols = 12
    MSFlexgrid1.Rows = 1
   MSFlexGrid1.FixedCols = 0
   MSFlexGrid1.ColWidth(0) = 500
   MSFlexGrid1.ColWidth(1) = 1800
   MSFlexGrid1.ColWidth(2) = 500
   MSFlexGrid1.ColWidth(3) = 1000
   MSFlexGrid1.ColWidth(4) = 1000
   MSFlexGrid1.ColWidth(5) = 1000
   MSFlexGrid1.ColWidth(6) = 800
   MSFlexGrid1.ColWidth(7) = 1500
   MSFlexGrid1.ColWidth(8) = 1500
   MSFlexGrid1.ColWidth(9) = 1200
   MSFlexGrid1.ColWidth(10) = 1500
   MSFlexGrid1.ColWidth(11) = 800
   MSFlexGrid1.Textmatrix(0,0) ="N°"
   MSFlexGrid1.Textmatrix(0,1) = "Type"
   MSFlexGrid1.Textmatrix(0,2) ="Nbre pièces"
   MSFlexGrid1.Textmatrix(0,3) = "Largeur"
   MSFlexGrid1.Textmatrix(0,4) = "Hauteur"
   MSFlexGrid1.Textmatrix(0,5) = "Longueur"
   MSFlexGrid1.Textmatrix(0,6) = "Angle"
   MSFlexGrid1.Textmatrix(0,7) = "Matière"
   MSFlexGrid1.Textmatrix(0,8) ="Isolation"
   MSFlexGrid1.Textmatrix(0,9) = "Poids"
   MSFlexGrid1.Textmatrix(0,10) = "m2 Isolation"
   MSFlexGrid1.Textmatrix(0,11) ="Réseau"
   Ligne& = 0     ' ligne courante

End sub

Private Sub CmdAjouterP_Click()

   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.

GRENIER Alain

Merci cs_Galain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de cs_Galain
Meilleure réponse
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 1 déc. 2008 à 21:12
3
Merci
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.

GRENIER Alain

Merci cs_Galain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de cs_Galain
Meilleure réponse
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 3 déc. 2008 à 23:46
3
Merci
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

Merci cs_Galain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de cs_Galain
Meilleure réponse
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 3 déc. 2008 à 23:58
3
Merci
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.

GRENIER Alain

Merci cs_Galain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de cs_Galain
Morvonez 6 Messages postés mercredi 27 décembre 2000Date d'inscription 4 décembre 2008 Dernière intervention - 30 nov. 2008 à 22:28
0
Merci
Merci GRENIER Alain, je vais essayé de me documenter comme il faut pour bien comprendre le principe d'utilisation de cette MsFlexgrid.

Sur l'image précédemment postée, voilà la partie  Private Sub Form_Load():

Private Sub Form_Load()
 'chargement de la liste des pièces pour calcul
    lstPieces.AddItem "Gaine droite"
    lstPieces.AddItem "Coude"
    lstPieces.AddItem "Cône"
    lstPieces.AddItem "Déviation"
    lstPieces.AddItem "Rond-carré"
    lstPieces.AddItem "Té"
    lstPieces.AddItem "Manchette téléscopique"
    lstPieces.AddItem "Fond"
    CboMatier.AddItem "Galvanisé"
    CboMatier.AddItem "Alu"
    CboMatier.AddItem "Inox"
    CboMatier.AddItem "Cuivre"
    Cmbisol.AddItem "Sans isolation"
    Cmbisol.AddItem "Normal 19mm"
    Cmbisol.AddItem "Normal 25mm"
    Cmbisol.AddItem "Normal 35mm"
    CmbReseau.AddItem "Air neuf"
    CmbReseau.AddItem "Air pulsé"
    CmbReseau.AddItem "Air repri"
    CmbReseau.AddItem "Air évacué"
    
MSFlexGrid1.Cols = 12
MSFlexGrid1.FixedCols = 0
MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 1800
MSFlexGrid1.ColWidth(2) = 500
MSFlexGrid1.ColWidth(3) = 1000
MSFlexGrid1.ColWidth(4) = 1000
MSFlexGrid1.ColWidth(5) = 1000
MSFlexGrid1.ColWidth(6) = 800
MSFlexGrid1.ColWidth(7) = 1500
MSFlexGrid1.ColWidth(8) = 1500
MSFlexGrid1.ColWidth(9) = 1200
MSFlexGrid1.ColWidth(10) = 1500
MSFlexGrid1.ColWidth(11) = 800
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "N°"
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Type"
MSFlexGrid1.Col = 2
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Nbre de pièce"
MSFlexGrid1.Col = 3
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Largeur"
MSFlexGrid1.Col = 4
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Hauteur"
MSFlexGrid1.Col = 5
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Longueur"
MSFlexGrid1.Col = 6
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Angle"
MSFlexGrid1.Col = 7
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Matière"
MSFlexGrid1.Col = 8
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Isolation"
MSFlexGrid1.Col = 9
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Poid"
MSFlexGrid1.Col = 10
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "m2 Isolation"
MSFlexGrid1.Col = 11
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Réseau"

End Sub

Suite à votre post, j'ai ajouté ce bout de code dans la fonction de mon bouton ajouter:

Private Sub CmdAjouterP_Click()

MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1

MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "1"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "Type"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "Nombre de pièce"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = "Largeur"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = "Hauteur"
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = "Longueur"
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = "Angle"
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = "Matière"
MSFlexGrid1.Col = 8
MSFlexGrid1.Text = "Isolation"
MSFlexGrid1.Col = 9
MSFlexGrid1.Text = "Poid"
MSFlexGrid1.Col = 10
MSFlexGrid1.Text = "m2 Isolation"
MSFlexGrid1.Col = 11
MSFlexGrid1.Text = "Réseau"

End Sub

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.

Merci d'avance pour vos réponses.

Morvonez
Commenter la réponse de Morvonez
Morvonez 6 Messages postés mercredi 27 décembre 2000Date d'inscription 4 décembre 2008 Dernière intervention - 1 déc. 2008 à 19:39
0
Merci
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.

Encore merci pour ton aide.
 
Commenter la réponse de Morvonez
Morvonez 6 Messages postés mercredi 27 décembre 2000Date d'inscription 4 décembre 2008 Dernière intervention - 3 déc. 2008 à 23:00
0
Merci
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.

 
Commenter la réponse de Morvonez
Morvonez 6 Messages postés mercredi 27 décembre 2000Date d'inscription 4 décembre 2008 Dernière intervention - 4 déc. 2008 à 20:24
0
Merci
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!

Morvonez
Commenter la réponse de Morvonez

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.