Précédent   Forum du club des développeurs et IT Pro > Autres langages > Général Visual Basic 6 et VBScript > VB 6 et antérieur
VB 6 et antérieur Visual basic 6 et versions antérieures. Avant de poster -> La FAQ VB6, Les tutoriels VB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/11/2012, 14h56   #1
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Par défaut écrire dans une flexgrid

Bonjour à tous,

Depuis ce matin je recherche une solution pour écrire dans un MSHFlexGrid1 de la même manière que dans un tableaux excel. Je sais qu'il existe la solution de mettre des textbox sur les cellules mais cela ne me convient pas. J'ai vu des exemples ou le control MSHFlexGrid n'est pas désespérément vérouillé et ou l'on peu écrire dans les cellules, hélas je n'ai pas réussis à trouver l'astuce
j'ai essayé quantité de fonctions pêcher ici et là sans aucun succès, j'espère donc que quelqu'un pourra m'aider...

Cordialement et encore merci par avance
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 15h09   #2
pc75
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 3 092
Détails du profil
Informations personnelles :
Âge : 57
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 3 092
Points : 3 284
Points : 3 284
Bonjour,

Code :
1
2
3
4
 
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 1
MSFlexGrid1.Text = "Mon texte"
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
Pas de questions techniques en MP.
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 15h18   #3
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Ce que je recherche, c'est de cliquer dans une cellule et taper mon texte tout simplement. Apparament il faut gérer l'évènement Keypress mais je ne sais pas comment ?
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 15h33   #4
pc75
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 3 092
Détails du profil
Informations personnelles :
Âge : 57
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 3 092
Points : 3 284
Points : 3 284
Re,

J'ai retrouvé ça. C'est vieux et il y a surement des adaptations à faire.
Fichiers attachés
Type de fichier : zip SaisieGrid.zip (5,2 Ko, 49 affichages)
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
Pas de questions techniques en MP.
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 16h02   #5
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Pas facile à bricoler, les fonctions utilisent des contrôles que je n'ai pas sur ma form je vais chercher encore un peu plus car j'ai vu que c'était possible donc je dois bien pouvoir y arriver, sinon je contourne le problème avec des imputbox mais ça ne sera pas très jolie
merci à toi pour ton aide en réfléchissant un peu j'arriverais peu être à exploiter le fichier et à traduire l'espagnol
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 16h19   #6
ProgElecT
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 3 199
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 57
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 3 199
Points : 5 109
Points : 5 109
Envoyer un message via MSN à ProgElecT
Salut

En complément de pc75
FAQ Comment permettre à l'utilisateur de taper du texte dans une flexgrid ?
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 17h21   #7
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
j'ai pas mal bidouiller mais en compilant plusieurs code ça fonctionne impeccable et vu le peu d'info sur le sujet je mets la procédure

il faut insérer un FlexHook dans le projet avec ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Option Explicit
 
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
                (ByVal lpPrevWndFunc As Long, _
                 ByVal Hwnd As Long, _
                 ByVal Msg As Long, _
                 ByVal wParam As Long, _
                 ByVal lParam As Long) As Long
 
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
                (ByVal Hwnd As Long, _
                 ByVal nIndex As Long, _
                 ByVal dwNewLong As Long) As Long
 
Private Const GWL_WNDPROC = -4
Private Const WM_SIZE = &H5
Private Const WM_PAINT = &HF
 
Private LngPrevWndProc  As Long
Private IsHooked        As Boolean
Private HookedHWND      As Long
 
 
Public Sub Hook(Hwnd As Long)
    'Mise en place du hook s'il n'est pas déjà actif
    If IsHooked = False Then
        HookedHWND = Hwnd
        LngPrevWndProc = SetWindowLong(HookedHWND, GWL_WNDPROC, AddressOf WindowProc)
        IsHooked = True
    End If
End Sub
 
Public Sub Unhook()
    'Suppression du hook s'il est actif
    Dim LngTemp As Long
    If IsHooked = True Then
        LngTemp = SetWindowLong(HookedHWND, GWL_WNDPROC, LngPrevWndProc)
        IsHooked = False
    End If
End Sub
 
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    WindowProc = CallWindowProc(LngPrevWndProc, hw, uMsg, wParam, lParam)
    If uMsg = WM_SIZE Or uMsg = WM_PAINT Then
      'Si les evenements Size ou paint arrive
        If frmMain.TextSaisie.Visible = True Then
          'Si la textbox est visible donc en mode édition...
            If (frmMain.TextSaisie.Left <> frmMain.MSFlexGrid1.CellLeft + frmMain.MSFlexGrid1.Left) Or _
                (frmMain.TextSaisie.Top <> frmMain.MSFlexGrid1.CellTop + frmMain.MSFlexGrid1.Top) Then
                'Si la cellule active c'est déplacée par rapport au texte à éditer
                'Remise en place
                frmMain.CheckTexte
            End If
            frmMain.TextSaisie.Width = frmMain.MSFlexGrid1.CellWidth
        End If
    End If
End Function
ensuite le code de la form que j'ai nommée FrmMain

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
Option Explicit
 
Private Sub CmdQuitter_Click()
    'Fin du programme ..
    Unload Me
End Sub
 
Private Sub Form_Load()
    Label1 = "- DoubleClick sur une cellule => Mode Edition" & vbCrLf & _
             "- Appui sur clavier si grille à la focus => Mode Edition" & vbCrLf
 
    ' Chargement du programme mise en place du Hook
    Hook MSFlexGrid1.Hwnd
 
    'nombre de colonnes
MSFlexGrid1.Cols = 7
 
'départ de la numérotation colonne
MSFlexGrid1.FixedCols = 0
 
'nombre de ligne du tableau
MSFlexGrid1.Rows = 50
 
'départ de la numérotation des lignes
MSFlexGrid1.FixedRows = 0
 
'redimensionnement de la largeur colonne 0 et 6
MSFlexGrid1.ColWidth(0) = 600
MSFlexGrid1.ColWidth(6) = 2500
 
'remplissage des items des colonnes
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "N°"
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Lecture AR"
MSFlexGrid1.Col = 2
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Lecture AV"
MSFlexGrid1.Col = 3
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Différence -"
MSFlexGrid1.Col = 4
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Différence +"
MSFlexGrid1.Col = 5
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Z Piquet"
MSFlexGrid1.Col = 6
MSFlexGrid1.Row = 0
MSFlexGrid1.Text = "Observations"
 
'format de cellule, remplissage vert
MSFlexGrid1.Col = 2
MSFlexGrid1.Row = 1
MSFlexGrid1.CellBackColor = vbBlack
MSFlexGrid1.Col = 3
MSFlexGrid1.Row = 1
MSFlexGrid1.CellBackColor = vbBlack
MSFlexGrid1.Col = 4
MSFlexGrid1.Row = 1
MSFlexGrid1.CellBackColor = vbBlack
 
'flexAlignCenter 4 CentréCentré
MSFlexGrid1.ColAlignment(0) = 4
MSFlexGrid1.ColAlignment(1) = 4
MSFlexGrid1.ColAlignment(2) = 4
MSFlexGrid1.ColAlignment(3) = 4
MSFlexGrid1.ColAlignment(4) = 4
MSFlexGrid1.ColAlignment(5) = 4
MSFlexGrid1.ColAlignment(6) = 4
 
 
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    ' Fin du programme arrêt du Hook
    Unhook
End Sub
 
Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
    ' Si l'utilisateur appui sur une touche on passe en mode édition
    GridEdit KeyAscii
End Sub
 
Private Sub MSFlexGrid1_DblClick()
    'Si l'utilisateur doubleClick sur une case on passe en mode édition
    GridEdit Asc(" ")
End Sub
 
Private Sub MSFlexGrid1_GotFocus()
    'Valider la zone de saisie sur le textbox d'édition est visible
    CheckTexte
End Sub
 
Private Sub MSFlexGrid1_LeaveCell()
    'Valider la zone de saisie sur le textbox d'édition est visible
    CheckTexte
End Sub
 
Private Sub TextSaisie_KeyDown(KeyCode As Integer, Shift As Integer)
    'Gestion des Touche sur le textbox de saisie
    On Error Resume Next
    Select Case KeyCode
        Case vbKeyEscape
          'Touche escape on pert la modification en cours et on laisse lancienne valeur
            TextSaisie.Visible = False
            MSFlexGrid1.CellBackColor = MSFlexGrid1.BackColor
            MSFlexGrid1.SetFocus
 
        Case vbKeyReturn
          'Touche entré on valide le texte
            MSFlexGrid1.SetFocus
 
        Case vbKeyDown
          'Touche Fléche vers le bas on valide puis on force le déplacement
            MSFlexGrid1.SetFocus
            DoEvents
            MSFlexGrid1.Row = MSFlexGrid1.Row + 1
 
        Case vbKeyUp
          'Touche Fléche vers le Haut on valide puis on force le déplacement
            MSFlexGrid1.SetFocus
            DoEvents
            MSFlexGrid1.Row = MSFlexGrid1.Row - 1
 
        Case vbKeyLeft
          'Touche Fléche vers la gauche si on est au début de la textbox
          'on valide puis on force le déplacement
            If TextSaisie.SelStart = 0 Then
                MSFlexGrid1.SetFocus
                DoEvents
                MSFlexGrid1.Col = MSFlexGrid1.Col - 1
            End If
        Case vbKeyRight
          'Touche Fléche vers la droite si on est à la fin de la textbox
          'on valide puis on force le déplacement
            If TextSaisie.SelStart = Len(TextSaisie.Text) Then
                MSFlexGrid1.SetFocus
                DoEvents
                MSFlexGrid1.Col = MSFlexGrid1.Col + 1
            End If
    End Select
End Sub
 
Private Sub GridEdit(KeyAscii As Integer)
  'Mise en place de la zone d'édition
  'Positionnement et dimentionnement de la textbox
    TextSaisie.Move MSFlexGrid1.CellLeft + MSFlexGrid1.Left, _
                    MSFlexGrid1.CellTop + MSFlexGrid1.Top, _
                    MSFlexGrid1.CellWidth, _
                    MSFlexGrid1.CellHeight
  'Remplissage avec le texte de la grille
    TextSaisie.Text = MSFlexGrid1.Text
  'Rendre visible
    TextSaisie.Visible = True
  'Donner le focus
    TextSaisie.SetFocus
  'Mettre la couleur de fond de la cellule = à la couleur de la textbox
  'pour éviter les désagréments visuels
    MSFlexGrid1.CellBackColor = TextSaisie.BackColor
  'Action suivant le texte passé
   Select Case KeyAscii
      Case 0 To Asc(" ")
        'Pas de texte donc afficher le texte d'origine
         TextSaisie.Text = MSFlexGrid1.Text
         TextSaisie.SelStart = Len(TextSaisie.Text)
      Case Else
        'Remplir par la touche saisie au clavier
         TextSaisie.Text = Chr$(KeyAscii)
         TextSaisie.SelStart = 2
   End Select
 
End Sub
 
Public Sub CheckTexte()
  'Remise en place de la grille si la textbox visible
    If TextSaisie.Visible Then
        MSFlexGrid1.Text = TextSaisie
        TextSaisie = ""
        MSFlexGrid1.CellBackColor = MSFlexGrid1.BackColor
        TextSaisie.Visible = False
        MSFlexGrid1.SetFocus
    End If
End Sub
merci encore pour votre aide et a une prochaine fois
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2012, 10h39   #8
250rgv
Membre actif
 
Inscription : août 2006
Messages : 179
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 179
Points : 176
Points : 176
J'arrive après la bataille mais tu as la SGrid 2 qui est gratuite.
Pour ce qui est de la saisie, elle impose aussi de passer par un contrôle externe (cf cet exemple pour la saisie dans un textbox ou une combox avec validation).
Je ne l'ai jamais utilisée mais elle a l'air pas mal et bien puissante.

Et pis le source est disponible pour le même prix
250rgv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2012, 10h45   #9
iclic
Membre éprouvé
 
Inscription : décembre 2007
Messages : 454
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 454
Points : 497
Points : 497
Par défaut Rectification

Bonjour,

Citation:
De dmoluc

Je sais qu'il existe la solution de mettre des textbox sur les cellules...
Ce n'est pas tout à fait exact.

Il existe effectivement la solution de mettre un textbox sur la cellule concernée, et ce textbox prend la dimension de la cellule et se déplace dans les cellules suivant le clic de la souris.
Ce procédé fonctionne très bien et est totalement transparent à l'utilisateur.

Donc petite mise au point.
iclic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2012, 14h25   #10
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
oui dans pour le code que j'ai mis plus haut et adapté à mon cas, c'est bien à l'aide d'un textbox que l'on rentre les valeurs sur la grille et ça fonctionne super bien ; on se croirait presque dans excel
par contre combien de lignes et de colonnes peu prendre un flexgrid ?
J'ai un projet en tête avec 200 colonnes et à peu prêt autant de lignes. Je l'ai déjà réaliser sous excel mais j'aimerais bien le rendre autonome si c'est possible...
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 00h05   #11
iclic
Membre éprouvé
 
Inscription : décembre 2007
Messages : 454
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 454
Points : 497
Points : 497
Par défaut Pour information à dmoluc

Bonsoir,

J'ai un soft qui affiche un stock dans une flexgrid avec 8 colonnes et
environ 5000 lignes sans aucun problème.
iclic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 11h28   #12
DarkVader
Rédacteur
 
Avatar de DarkVader
 
Homme
Développeur informatique
Inscription : mai 2002
Messages : 1 945
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2002
Messages : 1 945
Points : 2 731
Points : 2 731
Outre la limitation liée à la mémoire du système, le nombre de cellules disponibles pour un flexgrid est de 350 000 cellules
soit pour 200 colonnes => 1750 lignes.
__________________

Je fournis pelles et pioches mais jamais l'huile de coude.
________________________________________________

« Heureux soient les fêlés, car ils laisseront passer la lumière. »

Pensez aux liens
Rechercher - Google - Google Labs - AllApi
et avant de poster : « A lire » , « Tutoriel sur le déboguage »
DarkVader est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 11h50   #13
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Merci pour toutes ces infos, je vois qu'il y a de quoi faire et se sera plus mes connaissances qui vont me limiter, plutôt que la puissance de VB...
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 12h50   #14
pc75
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 3 092
Détails du profil
Informations personnelles :
Âge : 57
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 3 092
Points : 3 284
Points : 3 284
Re,

Un autre truc sympa ; Au fur et à mesure de la saisie au clavier, la recherche se fait dans la liste (y compris la touche backspace)
Fichiers attachés
Type de fichier : zip Projet1.zip (2,7 Ko, 12 affichages)
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
Pas de questions techniques en MP.
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 15h45   #15
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
oui sympa le petit exemple, merci
je joint mon petit exercice d'essais qui fonctionne au poil, j'ai même réussis à faire des trucs que je n'arrivais pas à faire avec excel
S'ils y en a parmis vous qui veulent faire du nivellement, c'est à dire mettre des altitudes sur des piquets et calculer des côtes, voilà le principe ; bien sur il faut avoir un niveau de chantier...
Première colonne = numéro des point levé
deuxième colonne = lecture arrière, c'est à dire la visée que l'on fait sur le point d'altitude connu
troisième lignes lecture avant ; la visée sur le point à niveller
quatrième lignes arrière - avant n= négatif
cinquième lignes arrière - avant positif
sixième lignes altitude piquet, indiquer l'altitude du repère de départ sinon le code met 100.000
septième ligne zprojet ; on indique manuellement tous les z projet au piquet correspondant, ou l'on indique le premier point et avec le bouton calcul projet , on calcul les suivant en indiquant une pente et une distance
l'avant dernière ligne est le résultat z projet - z piquet, c'est à dire la distance qui sépare la tête du piquet du projet finis
bon je ne vais pas faire un cour de topo mais cette petite feuille toute simple me donne espoir pour mes projets à venir
Encore merci pour votre aide précieuse

cordialement

didier
Fichiers attachés
Type de fichier : zip nivellement.zip (6,1 Ko, 4 affichages)
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h23.


 
 
 
 
Partenaires

Hébergement Web