Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    Membre du Club
    Homme Profil pro Didier
    Enseignant
    Inscrit en
    juin 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2012
    Messages : 191
    Points : 45
    Points
    45

    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

  2. #2
    Expert Confirmé Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 446
    Points : 3 388
    Points
    3 388

    Par défaut

    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.

  3. #3
    Membre du Club
    Homme Profil pro Didier
    Enseignant
    Inscrit en
    juin 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2012
    Messages : 191
    Points : 45
    Points
    45

    Par défaut

    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 ?

  4. #4
    Expert Confirmé Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 446
    Points : 3 388
    Points
    3 388

    Par défaut

    Re,

    J'ai retrouvé ça. C'est vieux et il y a surement des adaptations à faire.
    Fichiers attachés Fichiers attachés
    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.

  5. #5
    Membre du Club
    Homme Profil pro Didier
    Enseignant
    Inscrit en
    juin 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2012
    Messages : 191
    Points : 45
    Points
    45

    Par défaut

    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

  6. #6
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 466
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 466
    Points : 5 758
    Points
    5 758

  7. #7
    Membre du Club
    Homme Profil pro Didier
    Enseignant
    Inscrit en
    juin 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2012
    Messages : 191
    Points : 45
    Points
    45

    Par défaut

    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

  8. #8
    Membre confirmé
    Inscrit en
    août 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 218
    Points : 252
    Points
    252

    Par défaut

    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

  9. #9
    Membre expérimenté
    Inscrit en
    décembre 2007
    Messages
    470
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 470
    Points : 516
    Points
    516

    Par défaut Rectification

    Bonjour,

    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.

  10. #10
    Membre du Club
    Homme Profil pro Didier
    Enseignant
    Inscrit en
    juin 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2012
    Messages : 191
    Points : 45
    Points
    45

    Par défaut

    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...

  11. #11
    Membre expérimenté
    Inscrit en
    décembre 2007
    Messages
    470
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 470
    Points : 516
    Points
    516

    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.

  12. #12
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 017
    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 : 2 017
    Points : 2 561
    Points
    2 561

    Par défaut

    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 »

  13. #13
    Membre du Club
    Homme Profil pro Didier
    Enseignant
    Inscrit en
    juin 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2012
    Messages : 191
    Points : 45
    Points
    45

    Par défaut

    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...

  14. #14
    Expert Confirmé Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 446
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 446
    Points : 3 388
    Points
    3 388

    Par défaut

    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 Fichiers attachés
    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.

  15. #15
    Membre du Club
    Homme Profil pro Didier
    Enseignant
    Inscrit en
    juin 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2012
    Messages : 191
    Points : 45
    Points
    45

    Par défaut

    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 Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •