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