Précédent   Forum du club des développeurs et IT Pro > Autres langages > Général Visual Basic 6 et VBScript > VB 6 et antérieur
VB 6 et antérieur Visual basic 6 et versions antérieures. Avant de poster -> La FAQ VB6, Les tutoriels VB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/12/2012, 20h23   #21
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Merci ProgElecT

dire que mes collègues sont épatés par ce que je fais, mais il faut bien dire qu'ils sont vraiment nul en informatique mais là je suis subjugué ça c'est du travail de pro. Je ne serait jamais à ce niveau à moins que quelqu'un me paye une formation
Cet été mon rêve était de faire un tableau excel sans utiliser les formules à cause de mes collègues qui n'arrêtent pas de les effacer et qui ne savent pas les remettre, mais même comme ça il y en a encore qui arrivent à faire planter les tableaux. J'ai donc décider de me lancer en VB6 puisque ça ressemble un peu au vba et je suis vraiment devenu accro (même si comme aujourd'hui j'ai parfois eu envie de lancer l'ordinateur par la fenêtre )

Demain matin je vais vraiment étudier le code de prêt et l'appliqué à mon projet ; à la maison j'ai windows 7 et ça fait des trucs bizarre, du genre lancer l’installation d'autocad ou de ne pas vouloir rajouté les contrôles supplémentaire et en plus au boulot j'ai le temps en ce moment de plus demain c'est les vacances

merci pour ce code que j'étais incapable de trouver seul

Bonsoir et à plus
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 21h31   #22
DarkVader
Rédacteur
 
Avatar de DarkVader
 
Homme
Développeur informatique
Inscription : mai 2002
Messages : 1 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2002
Messages : 1 944
Points : 2 730
Points : 2 730
ProgElecT
Si je puis me permettre, la propriété TextMatrix est à utiliser pour des valeurs limitées en nombre ;
dès qu'il y a beaucoup de valeurs, le traitement avec Clip est me semble-t-il beaucoup plus optimisé

soit
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Private Sub Command4_Click()
    Dim s As String, a As Long, b As Long
 
    With MSFlexGrid1        
        .Row = 1
        .Col = 0
 
        'Ouvrir
        .Clear 'vider toutes les cellules du grid
        .Rows = 1: MSFlexGrid1.Cols = 1: T = 1
        CommonDialog1.ShowOpen
        MonFichier = CommonDialog1.FileName
        NumFich = FreeFile
        Open MonFichier For Input As #NumFich
 
        Do While Not EOF(NumFich)                   ' Effectue la boucle jusqu'à la fin du fichier.
            Line Input #NumFich, Chaine             ' récupération de la ligne
            TblCol = Split(Chaine, SeparateuR)      ' éclate la ligne en colonne
            If b < UBound(TblCol) + 1 Then 'dimensionne le nombre de colonne du grid (une seule fois)
                b = UBound(TblCol) + 1
            End If
            a = a + 1 'ajoute une ligne au grid
            s = s + IIf(s <> "", vbCrLf, "") + Chaine
        Loop
        Close NumFich
 
        .Rows = a + 1
        .Cols = b        
        .RowSel = a
        .ColSel = b - 1
        .Clip = s
    End With
End Sub
Private Sub Command5_Click()
    Dim s As String, a As Long, b As Long
 
    With MSFlexGrid1
        .Row = 1
        .Col = 0
        .RowSel = .Rows - 1
        .ColSel = .Cols - 1
        s = .Clip
 
        'Enregistrer
        CommonDialog1.ShowSave
        MonFichier = CommonDialog1.FileName
        NumFich = FreeFile
        Open MonFichier For Output As #NumFich
            Print #NumFich, s 'ecrit la ligne
        Close NumFich
    End With
End Sub
 
Private Sub Form_Load()
'positionne les éléments
Command1.Move 120, 60, 1035, 315: Command1.Caption = "Ouvrir"
Command2.Move 1200, 60, 1035, 315: Command2.Caption = "Enregistrer"
Command3.Move 120, 420, 2115, 315: Command3.Caption = "Clear"
 
Command4.Move 2500, 60, 1035, 315: Command4.Caption = "Clip Open"
Command5.Move 3700, 60, 1035, 315: Command5.Caption = "Clip Save"
 
MSFlexGrid1.Move 0, 780, 5175, 3075
Me.Height = 4425: Me.Width = 5415
MSFlexGrid1.Rows = 10
MSFlexGrid1.FixedRows = 1
MSFlexGrid1.Cols = 5
MSFlexGrid1.FixedCols = 0
 
'Histoire de remplir le grid
MSFlexGrid1.FormatString = "colonne 1|colonne 2|colonne 3 |colonne 4|colonne 5" 'titrage des colonnes
For T = 1 To MSFlexGrid1.Rows - 1
    For U = 0 To MSFlexGrid1.Cols - 1
        MSFlexGrid1.TextMatrix(T, U) = Chr(64 + T + U) 'remplis chaque cellule
    Next U
Next T
SeparateuR = vbTab '<---------- caractère quelconque, celui que tu veux
End Sub
C'est fait à l'emporte pièce juste pour démonstration

PS: Pour la mise en forme du fichier texte, c'est un autre sujet
__________________

Je fournis pelles et pioches mais jamais l'huile de coude.
________________________________________________

« Heureux soient les fêlés, car ils laisseront passer la lumière. »

Pensez aux liens
Rechercher - Google - Google Labs - AllApi
et avant de poster : « A lire » , « Tutoriel sur le déboguage »
DarkVader est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 21h50   #23
ProgElecT
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 3 198
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 57
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 3 198
Points : 5 110
Points : 5 110
Envoyer un message via MSN à ProgElecT
Ok

Merci DarkVader

Personnellement je ne connaissais (jamais fait attention) pas la propriété Clip, qui existe pour un MSHFlexGrid mais pas pour le MSFlexGrid que je n'utilise jamais.
Je n'ai jamais utilisé que MSHFlexGrid.
Je vais donc expérimenter cette nouvelle (pour moi) propriété car j'ai encor pas mal de programmes liés à des BDs qui grossissent de plus en plus chaque années, si la performance et meilleurs cela se justifiera de plus en plus de connaitre sa mise en œuvre.

Motif de l'édit:
J'ai raconté des c....... , MSFlexGrid supporte aussi Clip
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 22h51   #24
DarkVader
Rédacteur
 
Avatar de DarkVader
 
Homme
Développeur informatique
Inscription : mai 2002
Messages : 1 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2002
Messages : 1 944
Points : 2 730
Points : 2 730
Il est difficilement envisageable qu'un controle de ce type n'ait pas une méthode de capture ou d'affectation
par plage entière comme pour Excel.
Imagine affecter une grille de 10000 cellule (ou plus) cellule par cellule !

D'autre part, le format csv d'origine utilise les séparateurs TAB/CR justement pour permettre une affectation directe dans Excel.
Cela fonctionne aussi avec Access mais avec une matrice transposée
__________________

Je fournis pelles et pioches mais jamais l'huile de coude.
________________________________________________

« Heureux soient les fêlés, car ils laisseront passer la lumière. »

Pensez aux liens
Rechercher - Google - Google Labs - AllApi
et avant de poster : « A lire » , « Tutoriel sur le déboguage »
DarkVader est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 08h52   #25
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Bonjour ProgElecT, Bonjour DarkVader et aussi Bonjour à tous

Une longue journée s'annonce car impossible de faire fonctionner le code de ProgElect avec mon Flexgrid Si je l'applique tel quel je n'obtiens qu'une seule colonne remplie, mais avec toute la ligne dans chaque cellule.
En bricolant un peu le code ça fonctionne pour la première cellule avant d'avoir l'erreur "out of range" à "TblCol(U)"

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
Private Sub ouvrir_Click()
 
MSFlexGrid1.Clear 'vider toutes les cellules du grid
CommonDialog1.ShowOpen
MonFichier = CommonDialog1.FileName
NumFich = FreeFile
Open MonFichier For Input As #NumFich
Do While Not EOF(NumFich)    ' Effectue la boucle jusqu'à la fin du fichier.
    Line Input #NumFich, Chaine ' récupération de la ligne
 
    For U = 0 To MSFlexGrid1.Cols - 1
    TblCol = Split(Chaine, SeparateuR) 'éclate la ligne en colonne
 
        MSFlexGrid1.TextMatrix(T, U) = TblCol(U) 'rempli chaque colonne
 
    Next U
 
 
   Loop
Close NumFich
End Sub
Je suppose qu'il doit y avoir des problèmes de format d'enregistrement. Vous parlez de fichier .csv ! Cela fonctionnerai-t-il mieux sous ce format ? Je l'utilise pour transférer les semis de point dans autocad et dans excel et cela met bien les données dans les bonnes cases...
Le flexgrid que j'ai créer remplace un tableau excel, c'est à dire que suivant les entrées et les calculs, il n'y a pas des données dans toutes les cellules ! Cela pose-t-il problème ? De plus je ne souhaite pas recréer le tableau à l'ouverture d'un fichier mais bien réutiliser celui qui existe déjà, sinon ça va faire des trucs bizares
Quel est la Différence entre un MSHFlexgrid et un MSFlexgrid car j'ai choisi le MSFlexgrid au pif en voyant que je pouvais faire des tableaux avec ?

Je vais bosser toutes les infos que vous m'avez envoyées en espérant que ce ne sera pas pour rien

encore merci pour votre aide...
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 10h28   #26
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
Private Sub ouvrir_Click()
    Dim s As String, a As Long, b As Long
 SeparateuR = "|"
    With MSFlexGrid1
        .Row = 1
        .Col = 0
 
        'Ouvrir
        .Clear 'vider toutes les cellules du grid
        .Rows = 1: MSFlexGrid1.Cols = 1: T = 1
        CommonDialog1.ShowOpen
        MonFichier = CommonDialog1.FileName
        NumFich = FreeFile
        Open MonFichier For Input As #NumFich
 
        Do While Not EOF(NumFich)                   ' Effectue la boucle jusqu'à la fin du fichier.
            Line Input #NumFich, Chaine             ' récupération de la ligne
            TblCol = Split(Chaine, SeparateuR)      ' éclate la ligne en colonne
            If b < UBound(TblCol) + 1 Then 'dimensionne le nombre de colonne du grid (une seule fois)
                b = UBound(TblCol) + 1
            End If
            a = a + 1 'ajoute une ligne au grid
            s = s + IIf(s <> "", SeparateuR, "") + Chaine
        Loop
        Close NumFich
 
        .Rows = a + 1
        .Cols = b
        .RowSel = a
        .ColSel = b - 1
        .Clip = s
    End With
End Sub
en modifiant légèrement le code de Darkvader j'arrive maintenant à recréer le tableau avec toutes ces lignes et colonnes mais sans rien écrire dedans ; il y a encore quelque chose qui m'échape
Le fichier csv ne s'enregistre pas correctement, mais le fichier text se présente bien, alors pourquoi je n'arrive plus l'écrire, même dans une seule cellule ?
décidément ce n'est pas facile
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 13h10   #27
ProgElecT
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 3 198
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 57
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 3 198
Points : 5 110
Points : 5 110
Envoyer un message via MSN à ProgElecT
Salut
Pas d'internet ce matin, d’où la réponse tardive
Citation:
Envoyé par dmoluc
....
Une longue journée s'annonce car impossible de faire fonctionner le code de ProgElect avec mon Flexgrid
.....
Là oui c'est inquiétant, car hier j'ai attendu d'être chez moi pour écrire le bout de code, que j'ai bien sûr fait fonctionner sans problème.
De plus tu as fait l'essai avec la syntaxe Clip.

Le programme que je t'ai proposé et fonctionnel, le fait qu'il ne fonctionne pas chez toi laisse penser que tu as un vrai problème VB6, as tu d'autres programmes VB6 qui te semble dysfonctionner, si oui, une réinstalle/récupération de VB6 serait peut être la solution.
De mon coté, je ne voie pas d'autres proposition à te faire.

Bon courage ...
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 13h48   #28
Jipété
Membre Expert
 
Inscription : juillet 2006
Messages : 1 935
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : juillet 2006
Messages : 1 935
Points : 2 184
Points : 2 184
Salut,

je m'incruste pour une microscopique correction
Citation:
Envoyé par ProgElecT Voir le message
(...) Puis effaces le contenu du FlexGrid (bouton Vider le FlexGrid)
Donc remplacer
Citation:
Envoyé par ProgElecT Voir le message
Code :
1
2
 
Command3.Move 120, 420, 2115, 315: Command2.Caption = "Enregistrer"
par
Code :
1
2
 
Command3.Move 120, 420, 2115, 315: Command3.Caption = "Vider le FlexGrid"
Et chez moi ça fonctionne tip-top ton code !
__________________
Après avoir posté, relisez-vous ! Et en cas d'erreur, de faute d'orthographe ou d'oubli, il existe un bouton « Éditer », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Jipété est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 20h09   #29
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Bonsoir à tous

Je ne bosse pas le vendredi après midi et j'étais partis en balade, d'ou mon abscence de réponse

le problème c'est que le code fonctionne impeccable si je l'utilise sous ça forme originelle, mais dés que je l'intègre à mon projet, plus rien ne fonctionne, le mieux que j'ai réussis à faire en bataillant, c'est recréer lle tableau mais impossible d'écrire dedans .
Le code intégré sans modification ne créer qu'une seule colonne et écrit toute la ligne du tableau dans chaque cellule.

Il est fort possible que j'ai un problème avec VB6, la version que j'ai est en Anglais, n'est sans doute pas complète car l'aide est absente (mais bon comme mon anglais est limité ) mais difficile de trouver moins cher
je vais fouillé un peu voir si je peux trouver VB6 en Français et complet. J'ai bien visual studio 2010 mais je ne comprend rien à VB.net

Peu être que je devrais reprendre le programme du début avant qu'il ne soit trop avancé car il y a des truc qui fonctionne mal ; par exemple impossible d'afficher les boutons agrandir et réduire la fenêtre et les propriétés de ceux-ci sont pourtant à true

enfin en attendant encore merci pour votre aide et votre patience

A +
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 22h33   #30
ProgElecT
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 3 198
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 57
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 3 198
Points : 5 110
Points : 5 110
Envoyer un message via MSN à ProgElecT
Citation:
Envoyé par dmoluc Voir le message
Bonsoir à tous
......
le problème c'est que le code fonctionne impeccable si je l'utilise sous ça forme originelle, mais dés que je l'intègre à mon projet, plus rien ne fonctionne
.......
A +
Donc c'est ton projet qui doit poser problème, non pas VB6.
Pour l'aide Visual Basic 6 et VBScript - MSDN
Si ton projet n'est pas trop confidentiel, fais un .ZIP et mets nous le en pièce jointe (trombone, 5éme bouton ligne du haut de l'éditeur de message), car si un projet lambda comme je te l'ai proposé fonctionne, c'est bien un dysfonctionnement dans ton code qui te crée ces problèmes.
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 11h11   #31
DarkVader
Rédacteur
 
Avatar de DarkVader
 
Homme
Développeur informatique
Inscription : mai 2002
Messages : 1 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2002
Messages : 1 944
Points : 2 730
Points : 2 730
dmoluc ne suit pas la classe mais aussi, à sa décharge, en me relisant
j'ai remarqué avoir recopié bêtement ton code ProgElecT
et notamment la ligne
Code :
SeparateuR = vbTab '<---------- caractère quelconque, celui que tu veux
qui aurait du être
Code :
SeparateuR = vbTab '<---------- ne fonctionne qu'avec ce caractère
ce qu'il aurait du relever s'il avait lu et compris mes précédents posts concernant le format csv
__________________

Je fournis pelles et pioches mais jamais l'huile de coude.
________________________________________________

« Heureux soient les fêlés, car ils laisseront passer la lumière. »

Pensez aux liens
Rechercher - Google - Google Labs - AllApi
et avant de poster : « A lire » , « Tutoriel sur le déboguage »
DarkVader est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 12h29   #32
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
Bonjour à tous,

j'ai installé une nouvelle version de vb en Français (du coup je suis un peu perdu dans les appellations de menu )
j'ai refais le projet et pas pour rien, car maintenant ça fonctionne pour les colonnes, mais plus pour les lignes (avant il n'y avait que les lignes qui fonctionnées)
je joint le projet qui n'est absolument pas confidentiel ; c'est juste un diagramme de gant qui est très loin d'être achevé

encore merci pour votre aide

cordialement
Fichiers attachés
Type de fichier : zip Projet.zip (34,2 Ko, 2 affichages)
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 16h01   #33
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
a force de bidouillage j'y suis enfin parvenu ; j'avais mélanger le nouveau projet et l'ancien, sinon le code à ProgElect fonctionne parfaitement
Encore un grand merci à ProgElect et à Darkvader, vous m'avez tirer une belle épine du pied

A +
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 18h40   #34
ProgElecT
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Homme Francis MILLET
Inscription : décembre 2004
Messages : 3 198
Détails du profil
Informations personnelles :
Nom : Homme Francis MILLET
Âge : 57
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2004
Messages : 3 198
Points : 5 110
Points : 5 110
Envoyer un message via MSN à ProgElecT
Salut

dmoluc ,ta pièce jointe est inexploitable, la suite du message pourra éventuellement t’intéresser.

Après de multiples essais, par passion mais aussi pour améliorer mes propres programmes.

Je propose ce code modifié, avec la prise en compte des remarques avisées de DarkVader
3 CommandButtons, 1 FlexGrid , 1 CommonDialog, 2 OptionButtons (indexé 0 et 1) et 2 Labels
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
Option Explicit
Dim T As Long, U As Long, NumFich As Integer
Dim MonFichier As String, Chaine As String, TblCol() As String, SeparateuR As String
Dim DebuTmp As Single, FinTmp As Single
 
Private Sub Form_Load()
'positionne les élements
Command1.Move 120, 60, 1035, 315: Command1.Caption = "Ouvrir"
Command2.Move 1200, 60, 1035, 315: Command2.Caption = "Enregistrer"
Command3.Move 120, 420, 2115, 315: Command3.Caption = "Vider le FlexGrid"
MSFlexGrid1.Move 0, 1140, 5175, 3075
MSFlexGrid1.Rows = 10
MSFlexGrid1.FixedRows = 1
MSFlexGrid1.Cols = 5
MSFlexGrid1.FixedCols = 0
Me.Height = 4800: Me.Width = 5415
 
Option1(0).Move 2400, 60, 1455, 255: Option1(0).Caption = ".TextMatrix(L,C)": Option1(0).ToolTipText = "Ouverture ou enregistrement"
Option1(1).Move 3960, 60, 795, 255: Option1(1).Caption = ".Clip": Option1(1).ToolTipText = "Ouverture ou enregistrement"
Label1.Move 2460, 480
Label1.Caption = "": Label1.AutoSize = True
Label2.Move 60, 900
Label2.Caption = "": Label2.AutoSize = True
 
'Histoire de remplir le grid
MSFlexGrid1.FormatString = "colonne 1|colonne 2|colonne 3 |colonne 4|colonne 5" 'titrage des colonnes
For T = 1 To MSFlexGrid1.Rows - 1
    For U = 0 To MSFlexGrid1.Cols - 1
        MSFlexGrid1.TextMatrix(T, U) = Chr(64 + T + U) 'remplis chaque celulle
    Next U
Next T
SeparateuR = vbTab
End Sub
Private Sub Command1_Click()
'Ouvrir
If Option1(0).Value = True Then
    CommonDialog1.DialogTitle = "Ouvrir un fichier méthode .TextMatrix"
    Else
    CommonDialog1.DialogTitle = "Ouvrir un fichier méthode .Clip"
End If
CommonDialog1.CancelError = True
On Error Resume Next
CommonDialog1.ShowOpen
If Err = cdlCancel Then Exit Sub
Err.Clear
MonFichier = CommonDialog1.FileName
NumFich = FreeFile
Open MonFichier For Input As #NumFich
Label1.Caption = "en cours"
DebuTmp = Timer
If Option1(0).Value = True Then
    '------------------ par méthode .TextMatrix(numéro Ligne,numéro Colonne) -----------------------------------
    MSFlexGrid1.Clear 'vider toutes les celulles du grid
    MSFlexGrid1.Rows = 1: MSFlexGrid1.Cols = 1: T = 1
    Do While Not EOF(NumFich) ' Effectue la boucle jusqu'à la fin du fichier.
        Line Input #NumFich, Chaine ' recuperation de la ligne
        TblCol = Split(Chaine, SeparateuR) 'eclate la ligne en colonne
        If T = 1 Then MSFlexGrid1.Cols = UBound(TblCol) + 1 'dimensionne le nombre de colonne du grid (une seule fois)
        MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 'ajoute une ligne au grid
        For U = 0 To MSFlexGrid1.Cols - 1 'pour rempli chaque colonne
            MSFlexGrid1.TextMatrix(T, U) = TblCol(U)
        Next U
        T = T + 1 'préparation pour la suite
    Loop
    Close NumFich
    Me.Refresh 'pour les gros fichiers
    Else
    '------------------ par méthode .Clip -----------------------------------
    Chaine = Input(FileLen(MonFichier), NumFich) 'récupération de l’entièreté du fichier
    Close #NumFich
    If Chaine = "" Then
        MsgBox "le fichier est vide", vbCritical
        Exit Sub
    End If
 
    If Right(Chaine, 2) = vbNewLine Then Chaine = Left(Chaine, Len(Chaine) - 2)
    'pour Debuguer
    'For T = 1 To 16
    '    Debug.Print Mid(Chaine, T, 1) & " ascii = " & Asc(Mid(Chaine, T, 1))
    'Next T
    'Chaine = Replace(Chaine, Chr(13), vbCr)
    With MSFlexGrid1
        .Clear
        .Rows = (UBound(Split(Chaine, vbNewLine))) + 2 'vbNewLine = separateur de ligne
        .Cols = (UBound(Split(Split(Chaine, vbNewLine)(0), vbTab))) + 1 'vbTab = separateur de colonne
        .RowSel = .Rows - 1
        .ColSel = .Cols - 1
        .Clip = Chaine
        .Row = 1 'pour dé-sélectionner les cellules
    End With
End If
FinTmp = Timer
Label1.Caption = FinTmp - DebuTmp
Label2.Caption = MonFichier
End Sub
Private Sub Command2_Click()
'Enregistrer
If Option1(0).Value = True Then
    CommonDialog1.DialogTitle = "Enregistrer le FlexGrid méthode .TextMatrix"
    Else
    CommonDialog1.DialogTitle = "Enregistrer le FlexGrid méthode .Clip"
End If
CommonDialog1.CancelError = True
On Error Resume Next
CommonDialog1.ShowSave
If Err = cdlCancel Then Exit Sub
Err.Clear
MonFichier = CommonDialog1.FileName
NumFich = FreeFile
Open MonFichier For Output As #NumFich
Label1.Caption = "en cours"
DebuTmp = Timer
If Option1(0).Value = True Then
    '------------------ par méthode .TextMatrix(numéro Ligne,numéro Colonne) -----------------------------------
    For T = 1 To MSFlexGrid1.Rows - 1
        Chaine = ""
        For U = 0 To MSFlexGrid1.Cols - 1
            Chaine = Chaine & MSFlexGrid1.TextMatrix(T, U)
            'pour ne pas ajouter un separateur à la derniére colonne
            If U <> MSFlexGrid1.Cols - 1 Then Chaine = Chaine & SeparateuR
        Next U
        Print #NumFich, Chaine 'écrit la ligne
    Next T
    Else
    '------------------ par méthode .Clip -----------------------------------
    With MSFlexGrid1
        .Row = 1
        .Col = 0
        .RowSel = .Rows - 1
        .ColSel = .Cols - 1
        Chaine = .Clip
        Print #NumFich, Chaine 'écrit la ligne
        .Row = 1 'pour dé-sélectionner les cellules
    End With
End If
Close NumFich
FinTmp = Timer
Label1.Caption = FinTmp - DebuTmp
Label2.Caption = MonFichier
Me.SetFocus: Me.Refresh 'pour les gros fichiers
End Sub
Private Sub Command3_Click()
'Vider le FlexGrid
MSFlexGrid1.Clear
End Sub
Avec un fichier de 108K (10.000 ligne de 5 colonnes)

par méthode .TextMatrix(numéro Ligne,numéro Colonne)
ouverture 3,28 à 4,43 Sc
enregistrement 1,87 Sc

par méthode .Clip
ouverture 0,047 Sc
enregistrement 5,41 à 6,50 Sc

Les temps indiqués non pas grand interet, par contre la comparaison d'une méthode à l'autre est parlante.

A l'enregistrement par la méthode TextMatrix(numéro Ligne,numéro Colonne)fait que pour chaque enregistrement de ligne du FlexGrid,
un saut de ligne (vbCrLf) et ajouté par l'écriture dût au Print #NumFich, Chaine.
A l'enregistrement par méthode .Clip, le séparateur de ligne est un vbCr

Ma conclution (sauf votre démentit suivant vos essais)
l'ouverture du fichier est plus rapide avec la méthode .Clip (il n'y a pas photo)
l'enregistrement est plus rapide avec la méthode .TextMatrix(numéro Ligne,numéro Colonne)
Donc ouvrire en méthode .Clip mais sauvegarder en méthode .TextMatrix
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 20h45   #35
dmoluc
Nouveau Membre du Club
 
Homme Didier
Enseignant
Inscription : juin 2012
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Didier
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : juin 2012
Messages : 153
Points : 33
Points : 33
merci pour cette étude intéressante, je vais l'étudiée avec intérêt
je me suis mélanger en zipant mon projet, des morceaux du premier avec des bout du second
je l'ai remis et cette fois j'ai vérifier que c'était le bon et en plus il marche. Je n'ai plus qu'à trouver un moyen pour recréer les couleur du tableau, sauter les weekend et jour férié dans mon coloriage et le reste sera du gâteau
J'ai déjà fais ce programme sous excel en bien plus compliquer, mais comme avec ton exemple je bute sur la longueur d'exécution des macros.
Sur des user form, je calcul le rendement des machines , la durée de la tâche, le personnel, le matériel, les fourniture, je choisi la date de début et hop tout s'écrit automatiquement sur le tableau. Le hic c'est qu'il faut au moins 3 bonnes minutes, voir plus. Du travail d'amateur
Avec VB6 j'ai choisi de faire plus simple. Le logiciel de calcul de rendement est terminé et pas intégré au planning et pour renseigner le personnel, matériel, etc... je vais créer une forme pour chaque action.

Pour le moment je n'ai pas encore remarquer de problème de lenteur d'exécution, mais mon PC perso est une bête de course, avec le portable du boulot il faudra que je vérifie .

Je mets aussi l'usine à gaz que j'ai créer sous excel mais c'est pas super

http://cjoint.com/?BLpuRF92vJZ

A plus et encore merci pour tout ton travail de passionné, moi aussi je m'acharne mais je n'ai pas les connaissances

A+
Fichiers attachés
Type de fichier : zip Projet.zip (36,8 Ko, 1 affichages)
Type de fichier : zip Planingbeta.zip (1,11 Mo, 0 affichages)
dmoluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h54.


 
 
 
 
Partenaires

Hébergement Web