Copier coller une cellule d'un Datagridview [Résolu]

Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
- - Dernière réponse : Moundir76
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
- 10 janv. 2014 à 11:36
Bonjour, et meilleurs voeux à tous.

J'ai un datagridview comme ci après :

------------------------|
TYPE.......|COULEUR..|
------------------------|
AAA........|B5998......|
-----------|------------|
BBB........|...............|
-----------|------------|
CCC........|...............|
-----------|------------|


Ici j''aimerais éviter que l'utilisateur ai a remplir la couleur pour BBB et CCC sachant que celà peut être la même couleur que AAA.

Est il possible de sélectionner la cellule, faire un copier, puis sélectionner en même temps BBB et CCC et faire coller, afin que ces deux cellules se remplissent ?

voici le résultat final qui serait obtenu en un clic :

------------------------|
TYPE.......|COULEUR..|
------------------------|
AAA........|B5998......|
-----------|------------|
BBB........|B5998......|
-----------|-----------|
CCC........|B5998......|
-----------|------------|



Merci d'avance pour votre aide,

Cordialement
Afficher la suite 

Votre réponse

6 réponses

Messages postés
3241
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 novembre 2018
0
Merci
Bonjour et bonne année

Je ne pense pas que cela est possible j'ai fait un petit test avec un DGV et deux colonnes comme ton ex
on peut selectionner le contenu d'une cellule le copier dans le clipboard et le coller dans une autre cellule
tu peux peut etre ainsi
remplir seulement la cellule avec couleur différente et coder une boucle qui remplit les cellules du dessus
ex je remplis la valeur couleur pour AAA avec toto
je vais à la rangée ou je dois écrire une nouvelle couleur
ex pour FFF titi la boucle remplit la cellule couleur pour BBB à EEE
avec toto

Private lastrow As Integer = 0
Private Sub InitDGW()
DataGridView1.BorderStyle = BorderStyle.Fixed3D
DataGridView1.Font = New Font("arial", 12, FontStyle.Bold)

DataGridView1.EnableHeadersVisualStyles = False
DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.PowderBlue
DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
DataGridView1.Columns.Add("TYPE", "THE TYPE")
DataGridView1.Columns.Add("COLOR", "THE COLOR")

End Sub
Private Sub FillDGW()
Dim n As Integer
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "AAA"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "BBB"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "CCC"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "DDD"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "EEE"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "FFF"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "GGG"
n = DataGridView1.Rows.Add()
DataGridView1.Rows.Item(n).Cells("TYPE").Value = "HHH"
DataGridView1.AutoSize = True
DataGridView1.AutoResizeColumns()
End Sub

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

If e.RowIndex = 0 Then
Exit Sub
End If
For iter As Integer = lastrow + 1 To e.RowIndex - 1
DataGridView1.Rows(iter).Cells(e.ColumnIndex).Value = DataGridView1.Rows(lastrow).Cells(e.ColumnIndex).Value
Next
lastrow = e.RowIndex
End Sub
Commenter la réponse de cs_ShayW
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
0
Merci
Salut ShayW,

Merci pour ta solution, qui personnellement me convient, mais je ne pourrais pas la mettre en place car "trop compliquée pour les utilisateurs"...

Je vais continuer à chercher si je ne peux pas faire une "bidouille".

Merci !
Commenter la réponse de Moundir76
Messages postés
3241
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 novembre 2018
0
Merci
Ah bon trop compliqué
je ne pense pas car l'utilisateur écrit seulement les cellules où la valeur couleur change.Il n'y a pas besoin de selectionner copier
et coller.
Commenter la réponse de cs_ShayW
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
0
Merci
J'ai trouvé une solution.

EN utilisant une source trouvée sur le forum, j'ai juste ajouté une boucle et j'ai le résultat souhaité. Alors oui, ce n'est pas propre du tout mais ça fonctionne :

Private Sub paste()

Dim s As String = Clipboard.GetText()
Dim inter As Char() = s.ToCharArray()
s = ""
Dim i As Integer = 0
While i <> inter.Length

If inter(i) = ControlChars.Cr Then
Else
s = s + inter(i)
End If
i += 1
End While

Dim lines As String() = s.Split(ControlChars.Lf)

Dim row As Integer = DataGridView1.CurrentCell.RowIndex
Dim col As Integer = DataGridView1.CurrentCell.ColumnIndex
Dim a As Integer = 0
While a <> lines.Length

If row < DataGridView1.RowCount AndAlso lines(a).Length > 0 Then
Dim cells As String() = lines(a).Split(ControlChars.Tab)
For j As Integer = 0 To cells.GetLength(0) - 1
If col + j < Me.DataGridView1.ColumnCount Then
Dim roww As DataGridViewCell
For Each roww In DataGridView1.SelectedCells
DataGridView1(col + j, roww.RowIndex).Value = Convert.ChangeType(cells(j), DataGridView1(col + j, row).ValueType)
Next


Else
Exit For
End If
Next
row += 1
Else
Exit While
End If
a += 1
End While
End Sub
Commenter la réponse de Moundir76
Messages postés
3241
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 novembre 2018
0
Merci
Où vas tu appeller la sub paste ?
Commenter la réponse de cs_ShayW
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Dernière intervention
16 mai 2014
0
Merci
J'ai utilisé un ContextMenuStrip

 Dim mnu As New ContextMenuStrip()
Dim mnuCopy As New ToolStripMenuItem("Copier")
Dim mnuPaste As New ToolStripMenuItem("Coller")
AddHandler mnuCopy.Click, New EventHandler(AddressOf mnuCopy_Click)
AddHandler mnuPaste.Click, New EventHandler(AddressOf mnuPaste_Click)
mnu.Items.AddRange(New ToolStripItem() {mnuCopy, mnuPaste})
DataGridView1.ContextMenuStrip = mnu

J'ai utilisé cette fonctionnalité car tous les utilisateurs n'utilisent ou ne connaissent pas le raccourci CTRL+C CTRL+V.

En cherchant un peu 3 solutions semblaient possibles :

- Utiliser l'évenement KeyPressed et regarder les touches enfoncées
- Utiliser un hook (je n'ai jamais utilisé cette notion) pour catcher le Copier Coller directement depuis l'OS
-Utiliser un ContextMenuStrip
Commenter la réponse de Moundir76

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.