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)

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


Nos sponsors

Sondage...

CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.