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

Macros et VBA Excel Discussion :

Supprimer une ligne blanche lors de la fusion de fichiers .txt (VBA) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #41
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Points : 12
    Points
    12
    Par défaut Re
    Bonjour,
    Cela ne change rien, mon Line Input #x1, DataLine lit parfois une seulement valeur ou parfois toutes les valeurs d'un bloc (comme si elles étaient toutes sur la même ligne). C!est pour cela que mon compteur de cassettes affiche parfois le bon nombre de cassettes et parfois le nombre de fichiers à la place. Pourtant, si j'ouvre chacun des fichiers csv, les cassettes de mes 4 fichiers sont dans la même colonne et non sur une ligne...

    Merci de votre aide..

  2. #42
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    dans ce cas la c'est pas du a la macro mais au format du fichier text
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #43
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    Dites moi si je me trompe ou pas;

    Pourquoi ne pas procéder ainsi :

    - Création d'une variable texte/String Globale (Taille Variable) permettant de regrouper l'ensemble des fichiers

    - donc à chaque ouverture de fichiers on l'insère dans : MaVarTxtGlobale = MaVarTxtGlobale & LireFichierTexte(Chemin & Fichier) & vbCrLf

    - une fois tous les fichiers ajoutés, on passe cette variable par le Regex

    - Pour Récupérer CptK7 (A voir car je connais pas les fichiers) utilisation d'un Split sur la variable MaVarTxtGlobale

    - On injecte au final MaVarTxtGlobale dans le fichier final que l'on enregistre sous le nom voulu

    Procédure terminée :
    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
    Sub RegroupeFichiers()
    Dim Chemin$, Fichier$, MaVarTxtGlobale$
     
        Chemin = "C:\Users\NomUser\Documents\Fichiers Excel\Regroupe Fch TXT\TXT\"
        Fichier = Dir(Chemin & "*.txt")  ' ou "*.cvs"
        MaVarTxtGlobale = ""
     
        Do While Len(Fichier) > 0
     
            On Error Resume Next
            MaVarTxtGlobale = MaVarTxtGlobale & LireFichierTexte(Chemin & Fichier) & vbCrLf 'appelle la fonction "LireFichierTexte"
            If Err Then MsgBox "Le fichier n'a pas pu être lu...": Err.Clear
     
            Fichier = Dir()
        Loop
     
    Dim regex As Object, CptK7&
     
        Set regex = CreateObject("VBScript.RegExp")
        With regex
          .Pattern = "^\s*(\n|\r)$"
          .Global = True
          .MultiLine = True
        End With
        MaVarTxtGlobale = regex.Replace(MaVarTxtGlobale, "")
     
        'CptK7 = UBound(Split(MaVarTxtGlobale, Chr(10))) + 1 => selon ce l'on veut cibler (avec ou sans en-tête)
     
        MaVarTxtGlobale = Mid("SGA" & UCase(Format(Weekday(Now), "ddd")), 1, 6) & vbCrLf & MaVarTxtGlobale
        Debug.Print MaVarTxtGlobale
     
        CptK7 = UBound(Split(MaVarTxtGlobale, Chr(10))) + 1
     
        MsgBox "Nombre de lignes avec l'en-tête comprise :" & vbCrLf & CptK7
     
        'Mettre ici le code pour enregistrer le texte dans le fichier final via la variable MaVarTxtGlobale 
     
    End Sub
    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
    Public Function LireFichierTexte(ByVal MonFichier As String) As String
    'par: http://excel-malin.com
     
        On Error GoTo LireFichierTexteErreur
        Dim IndexFichier As Integer
        IndexFichier = FreeFile()
        Open MonFichier For Binary Access Read As #IndexFichier
        LireFichierTexte = Space$(LOF(IndexFichier))
        Get #IndexFichier, , LireFichierTexte
        Close #IndexFichier
     
        Exit Function
    LireFichierTexteErreur:
        Close #IndexFichier
        LireFichierTexte = ""
    End Function
    Alors ... ??

    Edit : À adapter bien sûr si cela convient …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #44
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour Ryu
    Pourquoi ne pas procéder ainsi :

    - Création d'une variable texte/String Globale (Taille Variable) permettant de regrouper l'ensemble des fichiers
    allons t' en a pas une une idée du pourquoi ?

    essaie de faire ca avec des fichier contenant des milier de lignes
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #45
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Salut Patrick,

    Si tu peux donner plus de détails se serait un plus

    Ce que je sais, avec le terminal de OS X (Mac), on peut supprimer des milliers de lignes assez facilement,
    via une commande grep, awk et même sed permettant de supprimer les lignes vides et de connaître le nombre de lignes …

    Ex : sur un fichier texte comprenant plus de 80000 lignes je fais une suppression de tous les chemins : ayant "._"
    sed -i '' '/\.\_/d' RESULTAT3.txt
    ça prends même pas 2 secondes
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  6. #46
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Detail??
    ma fois dans windows une variable string ne peut contenir que un peu plus de 32 000 caracteres forcement a un moment donné ca va planter
    c'est pour cela que j'ai proposer au demandeur de lire le fichier texte ligne par ligne plutot

    un fichier de 1000 ligne avec 33 cararcteres par lignes et c'est mort

    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #47
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Patrick,
    Ne confonds tu pas avec le nombre de caractères maxi que peux afficher une cellule Excel?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Demo()
    Dim s As String
       s = String(258244589, "A")
       Debug.Print Left(s, 10) & " ... " & Right(s, 10) & " Longueur : " & Len(s)
    End Sub
    EDIT : https://silkyroad.developpez.com/VBA...riables/#LII-I
    Cordialement,
    Franck

  8. #48
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Salut Franck,

    en plus je rejoins Franck pourquoi ne pas lire le fichier en une fois

    surtout que l'on ne connait pas + ou - le nb de caractères par lignes et le nb de lignes dans un fichier
    => si @paqmarc peut nous éclairer, il me semble pas avoir vu l'information (ou je l'ai zappé alors)


    • Patrick j'ai repris mon fichier avec les liens pour tester un variable texte/string
    Nombre de lignes 67801 avec + ou - 143 caractères/ligne => 9 695 543 caratères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub toto()
    Dim txt$, VA, VB
    VA = Range("A1").CurrentRegion.Value
    ReDim VB(1 To UBound(VA))
    For i = 1 To UBound(VA)
        VB(i) = VA(i, 1)
    Next
    txt = Join(VB, vbCrLf)
    Debug.Print txt
    End Sub
    ca passe très bien et rapidement
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  9. #49
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    j'ai des fichier ".txt" entre 4 et 8 mega ca te donne une idée du contenu et cela il ne passe pas
    c'est enterme d'octets qu'il faut compter
    bref je vous laisse decouvrir pourquoi bien que je l'ai deja mentionné dans le post pourquoi je ne stokais pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #50
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    J'ai testé un fichier de 8,7 méga sur Mac et celui-ci est passé,
    Je testerai sur PC pour voir comment cela réagit en passant 3-4 fichiers plus ou moins de la même taille.
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #51
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    j'ai des fichier ".txt" entre 4 et 8 mega ca te donne une idée du contenu et cela il ne passe pas
    c'est en terme d'octets qu'il faut compter

    A ton avis combien "pèse", en octets, un fichier txt de 200 000 000 de caractères?

    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
    Option Explicit
     
    Dim s As String, ff As Integer
     
    Sub t()
    s = String(200000000, "A")
    ff = FreeFile
    Open "C:\Users\" & Environ("username") & "\Desktop\output.txt" For Output As #ff
        Print #ff, s
    Close #ff
    End Sub
     
    Sub n()
    ff = FreeFile
    Open "C:\Users\" & Environ("username") & "\Desktop\output.txt" For Input As #ff
        s = Input(LOF(1), #ff)
    Close #ff
    Debug.Print Len(s)
    End Sub
    Cordialement,
    Franck

  12. #52
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    J'ai fait les tests sur PC avec du texte brut - 3 fichiers :
    Nom : Capture FchTxt.PNG
Affichages : 245
Taille : 5,9 Ko
    j'y ai mis qq lignes vide dans chaque fichiers pour jouer le jeu
    Nom : Vid1.gif
Affichages : 289
Taille : 498,2 Ko

    Je pense que cela marche parfaitement et quasi 194 000 lignes c'est déjà pas mal

    Edit : Au fait Patrick, je n'ai eu aucun plantage ... et c'est très rapide

    Edit 2 : j'ai continuer sur ma lancé - faut dire que j'en fais jamais du code avec la lecture/écriture de fichier texte,
    donc si vous voyez des lignes à arranger où pas exactement dans le bon ordre concernant les gestions d'erreurs ou autres ..., n'hésiter pas

    Le résultat :
    Nom : Capture FchTxtFinal.PNG
Affichages : 251
Taille : 7,9 Ko

    le code compléter :
    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
    Sub RegroupeFichiers()
    Dim Chemin$, Fichier$, MaVarTxtGlobale$
     
        Chemin = "C:\Users\NomUser\Documents\Fichiers Excel\Regroupe Fch TXT\TXT2\"
        Fichier = Dir(Chemin & "*.txt")  ' ou "*.cvs"
        MaVarTxtGlobale = ""
     
        On Error Resume Next
        Do While Len(Fichier) > 0
            MaVarTxtGlobale = MaVarTxtGlobale & LireFichierTexte(Chemin & Fichier) & vbCrLf 'appelle la fonction "LireFichierTexte"
            If Err Then MsgBox "Le fichier n'a pas pu être lu...": Err.Clear
     
            Fichier = Dir()
        Loop
        On Error GoTo 0
     
    Dim regex As Object, CptK7&
     
        Set regex = CreateObject("VBScript.RegExp")
        With regex
          .Pattern = "^\s*(\n|\r)$"
          .Global = True
          .MultiLine = True
        End With
     
        MaVarTxtGlobale = Mid("SGA" & UCase(Format(Weekday(Now), "ddd")), 1, 6) & vbCrLf & MaVarTxtGlobale
        MaVarTxtGlobale = regex.Replace(MaVarTxtGlobale, "")
     
        'CptK7 = UBound(Split(MaVarTxtGlobale, Chr(10))) + 1 => selon ce l'on veut cibler (avec ou sans en-tête)
     
        Debug.Print MaVarTxtGlobale
     
        CptK7 = UBound(Split(MaVarTxtGlobale, Chr(10))) + 1
     
        MsgBox "Nombre de lignes avec l'en-tête comprise :" & vbCrLf & CptK7
        VA = Split(MaVarTxtGlobale, Chr(10))                'Ligne à supprimer - sert pour les tests
        ReDim VB(0 To UBound(VA), 1 To 1)                'Ligne à supprimer - sert pour les tests
        For i = 0 To UBound(VA)                            'Ligne à supprimer - sert pour les tests
            VB(i, 1) = VA(i)                                'Ligne à supprimer - sert pour les tests
        Next                                              'Ligne à supprimer - sert pour les tests
        Cells(1, 3).Resize(UBound(VA) + 1, 1).Value = VB   'Ligne à supprimer - sert pour les tests
     
    Dim F As Integer, FichierFinal$
        On Error Resume Next
        If Not Err Then
            F = FreeFile
            FichierFinal = "C:\Users\NomUser\Documents\Fichiers Excel\Regroupe Fch TXT\TXT2\FchFinal.txt"
            Open FichierFinal For Output As #F
            Print #F, MaVarTxtGlobale
            Close #F
        Else
            MsgBox "Une erreur est survenue..."
        End If
     
        On Error GoTo 0
     
    End Sub
    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
    Public Function LireFichierTexte(ByVal MonFichier As String) As String
    'par: http://excel-malin.com
     
        On Error GoTo LireFichierTexteErreur
        Dim IndexFichier As Integer
        IndexFichier = FreeFile()
        Open MonFichier For Binary Access Read As #IndexFichier
        LireFichierTexte = Space$(LOF(IndexFichier))
        Get #IndexFichier, , LireFichierTexte
        Close #IndexFichier
     
        Exit Function
    LireFichierTexteErreur:
        Close #IndexFichier
        LireFichierTexte = ""
    End Function
    C'est passé comme une lettre à la poste ...
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #53
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    tu tourne sur quoi la ryu?
    désolé chez moi windows 7 excel2007 plantage du lof
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #54
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Ha c'est vrai les versions de windows et d'excel qui peut être diverses …
    PS : si la variable MaVarTxtGlobale est OK sur Excel 2007, alors garder le tableau VA et boucler dessus pour écrire ligne par ligne dans ce cas …

    Sur mon Mac j'ai une partition de démarrage sous Windows 10 et j'ai Excel 2010 - Ram 8 Go

    En effet je ne peux pas tester sur Excel 2007
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  15. #55
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Je rappelle mon message 38 (qui remonte à 20 jours)
    Je rappelle l'existence de la fonction Input (à ne pas confondre avec l'instruction Input #) qui permet de lire bloc par bloc (de caractères) si on le souhaite
    1) cette lecture par bloc (de la taille de votre choix) permet de lire, bloc par bloc, les fichiers textes les plus énormes.
    2) l'utilisation de cette même fonction permet de lire d'emblée, si on le souhaite, les deux derniers caractères d'un fichier
    3) pour assurer la fusion de deux fichiers, il suffit dès lors d'utiliser la méthode Append de la manière suivante :
    a) ajouter (d'un coup ou bloc par bloc comme vu en 2) les données de fichier1
    b) si les deux derniers caractères de fichier1 ne sont pas vbcrlf, ajouter un saut de ligne
    c) ajouter (d'un coup ou bloc par bloc comme vu en 2) les données de fichier2
    Il s'agit vraiment là de ce qu'il y a de plus simple à mettre en oeuvre.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #56
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    On peut effectivement stocker jusqu'à deux milliards de caractères dans une variable string en théorie mais la limite pratique peut être inférieure si la RAM disponible n'est pas suffisante.
    Dans ce cas la macro pourra fonctionner sur un PC ayant beaucoup de RAM dispo et crasher sur un PC en ayant moins. (c'est du vécu: j'avais un (très très) gros fichier texte que je voulais charger en une fois dans une string pour y appliquer des expressions régulières et ça fonctionnait bien sur un PC mais pas sur l'autre).

  17. #57
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Merci prométhee
    perso j'ai 32 G ram 24 exploitable windows7 64 premium excel2007 et il arrive parfois que ca plante
    c'est pour cela que j'ai conseiller des le depart de lire les fichiers ligne par ligne et de les retranscrire imediatement les fichier base et le final etant tout deux ouvert l'un en lecture l'autre en ecriture "APPEND !!"
    un print# x fois n'est pas plus lent que print# un gros texte voir meme plus rapide car il n'y a pas de surcharge memoire surtout dans une boucle X fichiers , donc aucun risque de plantage de ce coté la
    j'ai fait des tests sur des gros fichiers

    Ryu il me semble avoir vu dans une de tes capture que tu passe par un sheet avec cette methode ca m'etonnerait fortement que se soit plus rapide

    et combien meme perdre quelque centiemes de seconde et avoir une securité totale : a choisir perso vous connaissez ma reponse
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  18. #58
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    lit parfois une seulement valeur ou parfois toutes les valeurs d'un bloc (comme si elles étaient toutes sur la même ligne).
    je te l'ai deja dit paqmarc ca n'est pas du au code mais au formatage du fichier texte

    pour verifier ce que je te dis ouvre ton fichier concerné avec notpad + (gratuit)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #59
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    Ryu il me semble avoir vu dans une de tes capture que tu passe par un sheet avec cette methode ca m'etonnerait fortement que se soit plus rapide
    non du tout je c'étais juste pour la démo, je passe directement via la variable string que j'injecte - cf. code

    Concernant la Ram j'ai fait un Maj de post :
    Citation Envoyé par RyuAutodidacte Voir le message
    Sur mon Mac j'ai une partition de démarrage sous Windows 10 et j'ai Excel 2010 - Ram 8 Go
    Je suis loin des 32 Go de Ram que tu as …

    Edit : https://bettersolutions.com/vba/func...t-function.htm
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  20. #60
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bon
    J'ai apparemment prêché dans le désert deux fois (voir plus haut).
    C'est du code, qu'il faut ? --->> Allons-y
    1) première considération : obtenir une fusion de fichiers ne signifie pas forcément en dénaturer un.
    On peut fort bien vouloir ce résultat, mais conserver les fichiers tels qu'ils étaient.
    Et rien n'interdit, si on le souhaite par ailleurs, de détruire les fichiers originels.
    2) Que veut-on ?
    - Réunir plusieurs fichiers texte et "réparer" leur erreur éventuelle d'écriture (en supprimant dans le résultat final le saut de ligne malencontreusement écrit) ?
    - pouvoir le faire autrement que ligne par ligne (par blocs d'octets , donc) ? (notamment pour le cas où fichiers E N N O O O R M M E S )
    J'en ai indiqué la méthode deux fois (plus haut) -->> son code ? --->> le voici
    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
    Dim fics, desti As String, n As Integer, lgt As Long, lgb As Long, nb As Long, reste As Long, k As Long, titi As String
      lgb = 30000 ' ----->> taille de bloc à traiter (à à mettre à la valeur de votre choix ...)
      fics = Array("d:\fic1.txt", "d:\fic2.txt", "d:\fic3.txt")
      desti = "d:\desti.txt"
      If Dir(desti, vbHidden Or vbNormal) <> "" Then Kill desti
      Open desti For Append As #2
       For n = 0 To UBound(fics)
         Open fics(n) For Input As #1
           lgt = LOF(1): nb = lgt \ lgb: reste = lgt Mod lgb
           For k = 1 To nb
             titi = Input(lgb, #1): Print #2, titi;
           Next
           titi = Input(reste, #1)
           If Right(titi, 2) = vbCrLf Then titi = Left(titi, Len(titi) - 2)
           Print #2, titi
       Close #1
       DoEvents
      Next
     Close #2
    on fusionne ainsi tous les fichiers de l'array Fics
    J'ai ici utilisé par fainéantise #1 et #2. Je vous laisse les modifier par des Freefile, hein ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. detecter une ligne a un seul mot dans un fichier txt
    Par malikoo dans le forum Général Python
    Réponses: 9
    Dernier message: 04/07/2007, 19h43
  2. [JTable] Supprimer une ligne d'un jtable
    Par Orionmel dans le forum Composants
    Réponses: 5
    Dernier message: 05/11/2004, 22h29
  3. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03
  4. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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