IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

ouvrir et enregistrer un MsFlexgrid


Sujet :

VB 6 et antérieur

  1. #21
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Points : 101
    Points
    101
    Par défaut
    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

  2. #22
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    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 : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #23
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 172
    Points
    17 172
    Par défaut
    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
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  4. #24
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    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 : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    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

  5. #25
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Points : 101
    Points
    101
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  6. #26
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Points : 101
    Points
    101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #27
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 172
    Points
    17 172
    Par défaut
    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 ...
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  8. #28
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Command3.Move 120, 420, 2115, 315: Command2.Caption = "Enregistrer"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Command3.Move 120, 420, 2115, 315: Command3.Caption = "Vider le FlexGrid"
    Et chez moi ça fonctionne tip-top ton code !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à 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

  9. #29
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Points : 101
    Points
    101
    Par défaut
    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 +

  10. #30
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 172
    Points
    17 172
    Par défaut
    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.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  11. #31
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    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 : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SeparateuR = vbTab '<---------- caractère quelconque, celui que tu veux
    qui aurait du être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #32
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Points : 101
    Points
    101
    Par défaut
    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 Fichiers attachés

  13. #33
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Points : 101
    Points
    101
    Par défaut
    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 +

  14. #34
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 172
    Points
    17 172
    Par défaut
    Salut

    dmoluc ,ta pièce jointe est inexploitable, la suite du message pourra toutes fois é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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 conclusion (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 ouvrir en méthode .Clip mais sauvegarder en méthode .TextMatrix
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  15. #35
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Points : 101
    Points
    101
    Par défaut
    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 Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Ouvrir avec enregistrements verrouillés
    Par mapmip dans le forum Access
    Réponses: 6
    Dernier message: 14/05/2007, 19h09
  2. Réponses: 2
    Dernier message: 24/04/2007, 08h03
  3. Ouvrir, écrire, enregistrer, modifier, créer un fichier .txt
    Par Omion dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 11/12/2006, 07h50
  4. Réponses: 6
    Dernier message: 21/09/2006, 16h08
  5. Ouvrire ou Enregistrer un Fichier Excel
    Par jo281 dans le forum ASP
    Réponses: 1
    Dernier message: 13/12/2005, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo