Supprimer les données d'une Flexgrid

Résolu
Dbratt Messages postés 29 Date d'inscription samedi 22 octobre 2011 Statut Membre Dernière intervention 10 novembre 2011 - 9 nov. 2011 à 22:15
Dbratt Messages postés 29 Date d'inscription samedi 22 octobre 2011 Statut Membre Dernière intervention 10 novembre 2011 - 10 nov. 2011 à 23:05
Bonsoir,

Etant débutant en VB6, j'aimerai savoir comment supprimer les données contenues dans une flexgrid ( 30 lignes et 8 colonnes) tout en gardant la première ligne.

pour le faire j'ai écris le code ci-dessous:

Private Sub Cmdclear_Click()

Dim k as integer

    For k = 1 To 30
        frmRecapAvantOrdo.RemoveItem k
    Next k
    
End Sub


Quand je l'exécute, j'ai une erreur du type " La grille ne contient pas cette ligne " et la 2ieme ligne ( après celle indiquant les titres des colonnes) ne s'efface pas. et a ce moment la k a pour valeur 16

je vous remercie

Cordialement

14 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 nov. 2011 à 22:46
désactives le .Redraw pour voir.

Sinon ,et pour réponds à ta question de départ.

With Me.frmRecapAvantOrdo
For i= 1 To .Rows-1
For j= 0 To .Cols-1
.TextMatrix(i,j)=""
Next
Next
End With

Ceci efface le contenu des lignes à compter de la première non fixe.

(sans trop se prendre la tête ).






[] Ce qui va sans dire. va mieux en le disant.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 22:46
Bonjour,

1) comment a été alimentée cette flexgrid (c'est important) ?
2) quand on efface, on commence par le bas et on remonte (sinon : crocher-pieds avec les n°s de ligne) ===>>
For k = 30 To 1 step -1

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Dbratt Messages postés 29 Date d'inscription samedi 22 octobre 2011 Statut Membre Dernière intervention 10 novembre 2011
10 nov. 2011 à 00:12
Bonsoir,

Tout d'abord merci pour votre réponse

je saisis directement dans la flexgrid. Donc a la fin de la saisie, l'utilisateur aura le choix entre enregistrer la saisie ou l'effacer.
pour l'enregistrement j'ai pas de problème mais effacer j'ai des difficultés.

j'ai re-ecris ceci :

Private Sub Cmdclear_Click()

    For k = 30 To 1 Step -1 
        frmRecapAvantOrdo.RemoveItem k
    Next k
    
End Sub


Mais il efface bien toutes les lignes sauf la dernier et je un message d'erreur "impossible de supprimer la derniere ligne non-fixe "
Aussi s'il vous plait j'aimerai savoir s'il est possible d'effacer juste le contenu des ligne (juste le texte). Genre après avoir effacé, les lignes restent présentes mais pas les textes quelles comportaient.

j'ai essaye le code ci-dessous il efface bien que le contenu des lignes mais il efface aussi le contenu de la ligne fixe( titre des colonnes) et c'est ça qui me dérange

Private Sub Cmdclear_Click()

    For k = 1 to 30
        frmRecapAvantOrdo.Clear
    Next k
    
End Sub


cordialement
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 nov. 2011 à 01:03
Bé !
frmRecapAvantOrdo.Clear

efface/supprime tout ! Et tu le fais 30 fois !
Je ne me sers plus depuis trop longtemps de flexgrid pour te renseigner avec ptécision.
Mais on va essayer :
1) tu n'as pas répondu à ma question : "comment as-tu rempli ta flexgrid (le code) ?)
2) quelles sont ses propriétés (les valeurs) fixedcols et fixedrows ?
3) combien de rangs contient-elle en tout (celui d'en haut compris) ?
3) que contient la ligne d'index 1 ?

Pour juste effacer, ma foi, il suffit d'y mettre "" à chaque article ! mais ce n'est- pas une "bonne" solution du tout !

Maintenant : si tu as 30 lignes en tout, tu devrais normalement avoir :
la propriété .rows = 30
la propriété .fixedRows = 1 (si tu n'as qu'une ligne d'entête)

Si la propriété .fixedRows a été mise malencontreusement à 2, il est clair qu'il n'est pas possible de supprimer l'item d'index 1 !
Vois tout cela et renseigne-nous avec ces précisions indispensables

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 nov. 2011 à 01:09
Mais attends ! On va lui "forcer la main", à ta flextgrid, ainsi :
Private Sub Cmdclear_Click()
    frmRecapAvantOrdo.FixedRows = 1 '<<<===  on force ici la main, pour le cas où tu l'aurais mis à 2 !
    For k = 30 To 1 Step -1 
        frmRecapAvantOrdo.RemoveItem k
    Next k
End Sub

Que se passe-t-il, de cette manière ? (ta réponse nous éclairera sans doute).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 nov. 2011 à 01:37
Et prends l'habitude d'apporter le plus grand soin à ce que tu fais, ce que tu affirmes, etc...
Exemple de légèreté pour le moins fâcheuse :
voilà ce que tu as rapporté, comme erreur :
"impossible de supprimer la derniere ligne non-fixe "
Or, le message d'erreur que tu as reçu ne risquait pas d'être celui-ci ! Il disait même le contraire !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Dbratt Messages postés 29 Date d'inscription samedi 22 octobre 2011 Statut Membre Dernière intervention 10 novembre 2011
10 nov. 2011 à 13:06
Bonjour,

Je repondrai aux question que vous m'avez posees par ordre:

1) tu n'as pas répondu à ma question : "comment as-tu rempli ta flexgrid (le code) ?)

'Saisie des produits de leur duree ainsi que leur delai dans le formulaire RECAP

Private Sub frmRecapAvantOrdo_KeyDown(KeyCode As Integer, Shift As Integer)
If frmRecapAvantOrdo.Text <> "" Then
Select Case KeyCode
Case 8 'backspace
frmRecapAvantOrdo.Text = Left(frmRecapAvantOrdo.Text, (Len(frmRecapAvantOrdo.Text) - 1))
Case 46 'suppr
frmRecapAvantOrdo.Text = ""
End Select
End If
End Sub

'Saisie des produits de leur duree ainsi que leur delai dans le formulaire RECAP

Private Sub frmRecapAvantOrdo_KeyPress(KeyAscii As Integer)

If KeyAscii > 28 Then  'av cette condition on peut restreindre les entrées utilisateurs en
'autorisant seulement les chiffres par ex. la on interdit juste les caracteres non gérés par windows
frmRecapAvantOrdo.Text = frmRecapAvantOrdo.Text & Chr(KeyAscii)
End If

End Sub


2) quelles sont ses propriétés (les valeurs) fixedcols et fixedrows ?

fixedcols=0
fixedrows=1

3) combien de rangs contient-elle en tout (celui d'en haut compris) ?

si le rang c'est le nombre de lignes alors il y a 30 rangs celles du haut compris

3) que contient la ligne d'index 1 ?

'remplissage des titres de colonnes recap avant ordonnancement

Me.frmRecapAvantOrdo.Row = 0 'tous les champs sont a la ligne zero
Me.frmRecapAvantOrdo.Col = 0
Me.frmRecapAvantOrdo.Text = "Code Produits"
Me.frmRecapAvantOrdo.Col = 1
Me.frmRecapAvantOrdo.Text = "Code Ressources"
Me.frmRecapAvantOrdo.Col = 2
Me.frmRecapAvantOrdo.Text = "Heure Debut"
Me.frmRecapAvantOrdo.Col = 3
Me.frmRecapAvantOrdo.Text = Format("Durees (H)", "gras")
Me.frmRecapAvantOrdo.Col = 4
Me.frmRecapAvantOrdo.Text = "Delais (H)"
Me.frmRecapAvantOrdo.Col = 5
Me.frmRecapAvantOrdo.Text = "Heure de Fin"
Me.frmRecapAvantOrdo.Col = 6
Me.frmRecapAvantOrdo.Text = "Marge (H)"


pour mon message d'erreur c'est exactement mot pour mot l'erreur qui m'est affichée j'ai une image de cela mais j'ai pas réussi a vous l'envoi le code erreur est : erreur d’exécution "30015" impossible de supprimer la derniere ligne non fixe

Esperant avoir repondu de facon clair a toutes vos questions je vous remercie.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 nov. 2011 à 18:08
Salut,

With Me.frmRecapAvantOrdo
.Clear
.FixedRows=1
.Rows=2
End With [] Ce qui va sans dire. va mieux en le disant.
0
Dbratt Messages postés 29 Date d'inscription samedi 22 octobre 2011 Statut Membre Dernière intervention 10 novembre 2011
10 nov. 2011 à 18:53
Bonsoir Libre_Max

Votre code marche bien mais il n'efface pas que le contenu de la flexgrid il supprime tout (lignes,colonnes et texte) et ne laisse que la ligne fixe et la première ligne non fixe.

J'aimerai bien que quand l’opérateur clic sur le bouton clear, la flexgrid reste intacte (ligne et colonne restent visibles) mais seul les écritures (texte) s'effacent.

pour être plus claire supposons que vous avez un format A4 sur lequel vous avez dressé un tableau (flexgrid) et vous le remplissez avec du texte c'est dont ce texte et rien que ce texte que je souhaiterai effacer si possible.

Merci beaucoup
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 nov. 2011 à 19:47
Ton code sera plus optimisé si tu metS le tout dans une procedure REECRIRE, que tu appelleras à chaque remplissage.

SUB REECRIRE()
With Me.frmRecapAvantOrdo
.Redraw=False
.Clear
.FixedRows=1
.Rows=2

.Row = 0 'tous les champs sont a la ligne zero
.Col = 0
.Text = "Code Produits"
.Col = 1
.Text = "Code Ressources"
.Col = 2
.Text = "Heure Debut"
.Col = 3
.Text = Format("Durees (H)", "gras")
.Col = 4
.Text = "Delais (H)"
.Col = 5
.Text = "Heure de Fin"
.Col = 6
.Text = "Marge (H)"

.Rows=30

'tu remplis ensuite une à une les lignes de ton flexgrid.

.Redraw=True

End With

End Sub



[] Ce qui va sans dire. va mieux en le disant.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 nov. 2011 à 19:51
Ah , j' au oublié !

With Me.frmRecapAvantOrdo
.Redraw=False
.Clear
.FixedRows=1
.Rows=2
[b].Cols=6
... /b [] Ce qui va sans dire. va mieux en le disant.
0
Dbratt Messages postés 29 Date d'inscription samedi 22 octobre 2011 Statut Membre Dernière intervention 10 novembre 2011
10 nov. 2011 à 20:22
Bonsoir,

Ce code n'a aucun effet ! j'ai l'impression que le " .Redraw=False " bloque l'execution de la suite car quand je le mets en commentaire il s'execute comme l'ancienne version du code.

Cordialement
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 nov. 2011 à 22:55
oublies le

"désactives le .Redraw pour voir. "

décidement j' ai pas toute ma tête en ce moment..
[] Ce qui va sans dire. va mieux en le disant.
0
Dbratt Messages postés 29 Date d'inscription samedi 22 octobre 2011 Statut Membre Dernière intervention 10 novembre 2011
10 nov. 2011 à 23:05
Bonsoir,

Super le denier code marche tres bien ...

Merci beaucoup et bonne soiree a vous
0
Rejoignez-nous