|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Sélection d'une colonne dans un flexgrid ? [ Divers / Débutants ] (Stephan)
Informations & options pour cette discussion
|
mardi 8 août 2006 à 02:07:10 |
Sélection d'une colonne dans un flexgrid ?

Stephan
|
Hello, Je cherche à selectionner en une fois toutes les données contenue dans un colonne d'un MSFlexgrid sous VB6 pour les insérer dans une variable.
L'idée est d'utiliser ensuite :
Clipboard.SetText = variable
Pour avoir ces données dans le presse papier.
J'arrive sans problème à selectionner une celulle avec TextMatrix(colonne, ligne), mais pas une colonne entière. Donc j'utilise pour le moment une boucle for / next qui tourne autant de fois qu'il n'y a de ligne pour une colonne donnée, mais c'est trés long comme ça.
Je n'ai rien trouvé dans les sources ou sur le forum, je me dit que ça n'est peut être pas prévu...
Avez vous un idée ?
Cordialement, Stéphan.
|
|
|
|
mardi 8 août 2006 à 02:26:19 |
Re : Sélection d'une colonne dans un flexgrid ?

chaibat05
|
Bonsoir, trés long... combien ?
Tu parcour ton Grid, cellule par cellule et tu concatène au fur et à mesure. Clipboard.SetText = Clipboard.SetText & " " & TextMatrix(colonne, ligneCourante), C ' est la seule façon. Enfin je crois.
|
|
|
|
mardi 8 août 2006 à 02:42:02 |
Re : Sélection d'une colonne dans un flexgrid ?

Stephan
|
Bonsoir, Merci de cette attention. En fait avec un flexgrid d'une centaine de lignes c'est rapide, mais je prévois des flexgrid de 50000 lignes, et c'est en essayant que j'ai constaté au moins une minute d'attente pour lire les deux colonnes (je pense que la perte de temp est bien dans la constitution de la boucle, car le collage est quasi-instatané).
Pour être plus clair, je met ma fonction ci-dessous :
Function ExportExcel() On Error Resume Next Dim Appli As New Excel.Application Dim Lignes As String Dim MaxCell As String Dim compt As Integer Dim ColA As String Dim ColB As String compt = 0 Lignes = Form1.MSFlexGrid1.Rows 'On rend visible EXCEL Appli.Visible = True
' On créé un nouveau classeur EXCEL Appli.Workbooks.Add.Activate ' on rempli ColA avec ColA et un CR autant de fois qu'il y a de lignes ' dans le flexgrid. ' on vide le presse papier et on y insère ColA. ' on selectionne les celulles de A1 à An. ' on indique un format texte pour éviter des modifications ' de contenu => 00 ne doit pas devenir 0 ' On colle les données dans les celulles selectionnées. MaxCompt = Form1.MSFlexGrid1.Rows - 1 For compt = 0 To MaxCompt ColA = ColA & Form1.MSFlexGrid1.TextMatrix(compt, 1) & vbCrLf Next compt Clipboard.Clear Clipboard.SetText ColA MaxCell = "A1:A" & Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range(MaxCell).Select Appli.ActiveWorkbook.Worksheets("Feuil1").Cells.NumberFormat = "@" Appli.ActiveWorkbook.Worksheets("Feuil1").Paste ' Pareil avec ColB For compt = 0 To Form1.MSFlexGrid1.Rows - 1 ColB = ColB & Form1.MSFlexGrid1.TextMatrix(compt, 2) & vbCrLf Next compt Clipboard.Clear Clipboard.SetText ColB MaxCell = "B1:B" & Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range(MaxCell).Select Appli.ActiveWorkbook.Worksheets("Feuil1").Cells.NumberFormat = "@" Appli.ActiveWorkbook.Worksheets("Feuil1").Paste End Function
|
|
|
|
mardi 8 août 2006 à 02:50:33 |
Re : Sélection d'une colonne dans un flexgrid ?

chaibat05
|
Et tu arrives à affecter autant de données à une variable de Type string ? Ce que je sais moi, c' est que les variables ont une capacité de stockage limité. Même les Memos, il arrive un moment ou il vous disent : Assez !
|
|
|
|
mardi 8 août 2006 à 02:54:05 |
Re : Sélection d'une colonne dans un flexgrid ?

chaibat05
|
La "perte de temps" est dans la création de l' objet Excel .
|
|
|
|
mardi 8 août 2006 à 04:18:07 |
Re : Sélection d'une colonne dans un flexgrid ?

chaibat05
|
Pourquoi tu n' utilise pas un Tableau ?
Function ExportExcel() Dim Appli As New Excel.Application Dim Lignes As String Dim MaxCell As String Dim compt As Integer Lignes = Form1.MSFlexGrid1.Rows **** Dim T() as String Redim T(Lignes,2) **** 'On rend visible EXCEL Appli.Visible = True
' MaxCompt = Form1.MSFlexGrid1.Rows - 1 For compt = 0 To MaxCompt T(compt,1) = Form1.MSFlexGrid1.TextMatrix(compt, 1) T(compt,2) = Form1.MSFlexGrid1.TextMatrix(compt, 2) Next compt On créé un nouveau classeur EXCEL Appli.Workbooks.Add.Activate
MaxCell = "A1:A" & Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range(MaxCell).Select Appli.ActiveWorkbook.Worksheets("Feuil1").Cells.NumberFormat = "@" For compt=0 To lignes-1 Appli.ActiveWorkbook.Worksheets("Feuil1").... _ =Appli.ActiveWorkbook.Worksheets("Feuil1").... _ & T(compt,1) Next MaxCell = "B1:B" & Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range(MaxCell).Select Appli.ActiveWorkbook.Worksheets("Feuil1").Cells.NumberFormat = "@" For compt=0 To lignes-1 Appli.ActiveWorkbook.Worksheets("Feuil1").")....... _ =Appli.ActiveWorkbook.Worksheets("Feuil1")......._ & T(compt,2) Next
>avec un peut d' imagination, tu peux faire une seule boucle. >et oubli Clipboard. >ça ira comme ça ?
|
|
|
|
mardi 8 août 2006 à 05:57:46 |
Re : Sélection d'une colonne dans un flexgrid ?

Stephan
|
Bonjour, Merci pour ces réponses...
Je reprend dans l'ordre, Effectivement j'arrive à faire rentrer 32767 lignes (pour ce que j'ai testé ce soir) dans un variable string. J'ai pas vérifié quel est la limite, mais il y a environs 18 caractères par ligne, ça fait dans les 590000 caractères par variables. C'est effectivement pas trés propre ;), mais si je tiens 65536 lignes avec le nombre de caractères que j'ai à placer, ça devrait suffir.
Par contre je ne suit pas certain que la perte de temp vienne de la création de l'objet Excel, pour un fichier de 60 lignes, c'est immédiat. J'ai donc mis des msgbox avant et après mes deux boucles : For compt = 0 To MaxCompt ColA = ColA & Form1.MSFlexGrid1.TextMatrix(compt, 1) & vbCrLf Next compt et la suivante avec ColB, et là je constate que la première dure environs 1 minute 10 pour 32767 lignes, alors que la deuxième ne dure que 7 secondes... J'en ai inversé l'ordre, l'assignation des colonnes, mais c'est toujours la boucle qui concerne les données ColA qui dure 1 minutes.
J'ai suivi ton conseil et ça donne ce qui suit. Mais là, il faut 10 minutes pour remplir la feuille Excel, j'avais commencé par des boucles de ce type, mais sans tableaux, je lisait et assignait directement le contenu des celulles du flexgrid.
Function ExportExcel() On Error Resume Next Dim Appli As New Excel.Application Dim Lignes As String Dim MaxCell As String Dim compt As Integer compt = 0 Lignes = Form1.MSFlexGrid1.Rows Dim T() As String ReDim T(Lignes, 2) 'Rendre visible EXCEL Appli.Visible = True MaxCompt = Form1.MSFlexGrid1.Rows For compt = 0 To MaxCompt T(compt, 1) = Form1.MSFlexGrid1.TextMatrix(compt, 1) T(compt, 2) = Form1.MSFlexGrid1.TextMatrix(compt, 2) Next compt ' On créé un nouveau classeur EXCEL Appli.Workbooks.Add.Activate MaxCell = "A1:A" & Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range(MaxCell).Select Appli.ActiveWorkbook.Worksheets("Feuil1").Cells.NumberFormat = "@" For compt = 0 To Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range("A" & compt).Value = T(compt, 1) Next compt MaxCell = "B1:B" & Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range(MaxCell).Select Appli.ActiveWorkbook.Worksheets("Feuil1").Cells.NumberFormat = "@" For compt = 0 To Lignes Appli.ActiveWorkbook.Worksheets("Feuil1").Range("B" & compt).Value = T(compt, 2) Next compt
End Function
|
|
|
|
mardi 8 août 2006 à 12:19:27 |
Re : Sélection d'une colonne dans un flexgrid ?

MPi
|
Salut, Essaie comme ceci Sélectionne les données de la grille que tu veux copier dans le presse-papier, puis appuie sur un bouton avec ce code
Private Sub Command1_Click() Clipboard.SetText Grid1.Clip End Sub
Il te reste ensuite à faire un coller dans Excel
MPi
|
|
|
|
mardi 8 août 2006 à 17:50:59 |
Re : Sélection d'une colonne dans un flexgrid ?

Stephan
|
Bonjour, C'est ce que je veux faire, mais je n'arrive pas a selectionner les celulles en question dans le flexgrid. Je peux les selectionner une par une dans une boucle pour les intégrer dans une variable, mais pas en une fois.
|
|
|
|
mercredi 9 août 2006 à 00:24:46 |
Re : Sélection d'une colonne dans un flexgrid ?

MPi
|
Salut,
Dans les propriétés de la FlexGrid, tu peux modifier SelectionMode 0 = libre 1 = par ligne 2 = par colonne
Dans ton cas j'opterais pour le 2 Donc, en cliquant sur une cellule et en glissant légèrement au besoin, la colonne entière se sélectionnera. Tu n'auras qu'à mettre le code que je t'ai donné pour copier tout d'un coup.
MPi
|
|
|
Cette discussion est classé dans : données, sélection, colonne, selectionner, flexgrid
Répondre à ce message
Sujets en rapport avec ce message
sélection de deux plages d'une même colonne dans Excel [ par J-F ]
Bonjour,Je dois créer une fonction pour calculer une autocorrélation à partir d'une colonne Excel. Pour ce faire, je dois sélectionner un range avec l
comment rendre une colonne contenant des données invisible dans une grid [ par Angelus ]
salutla question est dans le topic ;) je voudrais que l'user ne voit pas une de mes colonnes qui contient des info nécéssaire à des requêtes.J'ai tro
URGENT SVP - Lancer une sélection à partir d'uneListBox [ par Chnocleu ]
Bonjour,J'ai mis dans une colonne sous excel, une liste de noms de fichiers. J'ai déclaré cette colonne dans les propriétés rowsource de la ListBox. L
liste de données [ par LeCED ]
j'aimerai pouvoir faire apparaitre des données dans une liste mais malheuresement je n'arrive pas a reproduire en VB ce que je reussis en ACCESS.Le pr
Sélection de colonnes sous Excell [ par Arnoconection ]
Bonjour à tous!je souhaite coller un certain nombre de cellules dans une feuille, mais à la suite des données. Je récupère le numéro de la première co
PB: Clique sur entete de colonne flexgrid [ par cdkz ]
je desire effectue des actions lorsque que je clique sur une entete de colonne, mais apperement rien y fait, c'est une msflexgrid!Demande de l'aide!Es
liste déroulante dans flexgrid et datagrid [ par PROGRAMMIX ]
J'ai une application reliée à une base de données Access.J'affiche certaines informations dans un flexgrid et/ou un datagrid.Afin d'éviter des erreurs
DATA SMOOTHING; lissage de données! [ par thierrypp ]
Bonjour,je dispose d'une colonne de données en format *.txt; 1er rang caractère " mesures"autres rangs, valeurs numériques nombre total de rangs unic
base de données [ par IG ]
SalutDans une base de données j'ai une colonne "suppression" et je cherche un code pour supprimer tous les enregistrements qui ont un "1" dans cette c
recoupement de données sur deux feuilles [ par okin ]
Bonjour, je voudrais vous soumettre mon pb?Voila, je dispose de deux feuilles, dans chacune d'elles j'ai en colonne A un grand nombre de valeurs qui d
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|