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

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

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.