Réorganiser les lignes d'un msflexgrid par couper-coller

Soyez le premier à donner votre avis sur cette source.

Vue 5 568 fois - Téléchargée 1 070 fois

Description

Voici une méthode pour couper une ligne de votre MSFlexgrid et la coller à un autre endroit de votre grille.

La méthode ne s'occupe pour l'instant que des lignes du MSFlexgrid et une seule à la fois.

Elle aurait besoin d'être complétée
- pour pouvoir déplacer plusieurs lignes à la fois ;
- pour en faire autant avec les colonnes ;
- pour faire du COPIER-COLLER.

Source / Exemple :


Dim TexteLigne  As String
Dim IndexLigneSource As Integer
Dim IndexLigneDestination As Integer

Dim Couper As Boolean

Private Sub mnuCouper_Click()
    'On a cliqué sur le menu Couper
    Dim C As Integer
    TexteLigne = ""
    'On passe en revue les colonnes du flexgrid pour former une chaîne
    'dont les valeurs des cellules seront séparées par une tabulation
    For C = 0 To Me.MSFlexGrid1.Cols - 1
        TexteLigne = TexteLigne & vbTab & Me.MSFlexGrid1.TextMatrix(IndexLigneSource, C)
    Next
    'On supprime la première tabulation inutile
    TexteLigne = Mid(TexteLigne, InStr(1, TexteLigne, vbTab) + 1)
    'On signale qu'on a "coupé" la ligne
    Couper = True
    'On modifie les menus
    Me.mnuCouper.Enabled = False
    Me.mnuColler.Enabled = True
End Sub

Private Sub mnuColler_Click()
    'On a cliqué sur le menu Coller
    'Si on est en mode "Couper"         (Faudra que je pense à faire du "Copier" également)
    If Couper Then
        'J'ajoute ma ligne découpée à l'endroit souhaité
        Me.MSFlexGrid1.AddItem TexteLigne, IndexLigneDestination
        'Je supprime la ligne initiale en fonction de sa position
        'par rapport à la ligne coupée
        If IndexLigneSource > IndexLigneDestination Then
            Me.MSFlexGrid1.RemoveItem IndexLigneSource + 1
        Else
            Me.MSFlexGrid1.RemoveItem IndexLigneSource
        End If
        'Je rétablie les menus pour un nouveau "Couper"
        Me.mnuCouper.Enabled = True
        Me.mnuColler.Enabled = False
        Couper = False
    End If
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    'Si on a cliqué sur la première colonne avec le bouton de droite...
    If Button = 2 And Me.MSFlexGrid1.MouseCol = 0 Then
        'et si une ligne a été coupée...
        If Couper Then
            'je récupère l'index de la ligne où se fera l'insertion de la ligne coupée
            IndexLigneDestination = Me.MSFlexGrid1.MouseRow
        Else
            'sinon je récupère l'index de la ligne que l'on va couper
            IndexLigneSource = Me.MSFlexGrid1.MouseRow
        End If
        'J'affiche le menu contextuel
        Me.PopupMenu mnuEdition
    End If
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

xpert12
Messages postés
114
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
10 septembre 2010
-
Salut,
Félicitations. As-tu fait évoluer ton code comme tu sembles le dire ? Sais-tu gérer les colonnes et les sélections multiples ? Je suis preneur.
cs_PROGRAMMIX
Messages postés
1134
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
24 juillet 2011
-
Malheureusement non... Je n'ai pas retravaillé sur ce code (malgré mes intentions à l'époque).

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.