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

VBScript Discussion :

2 fichiers - recherche Reference d'un dans l'autre


Sujet :

VBScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut 2 fichiers - recherche Reference d'un dans l'autre
    Bonjour a tous,

    Je bloque sur un script.

    J'ai 2 fichiers texte qui contiennent des listes formater de la même façon.

    Le premier s'appelle disons "Ecommerce.txt et le deuxième "Tarif.txt

    Le but est de récupérer une référence dans le fichier Ecommerce.txt, de vérifier si elle existe dans le fichier Tarif.txt.
    Si elle existe, supprimer cette ligne du fichier tarif et la mettre dans un autre fichier (que j'appelle "JusteEcom.txt")
    Le tout ligne par ligne

    Voici ce que j'ai fait :

    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
    FichierEcommerce 	= "1-EcommerceMini.txt"
    FichierTarif 		= "1-TarifMini.txt"
    JusteEcom 			= "JusteEcom.txt"
    TarifSansEcom		= "TarifSansEcom.txt"
     
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    'Ouverture fichier Ecommerce en lecture
    Set objFSO_ECommerce 	= objFSO.OpenTextFile (FichierEcommerce, ForReading, false)
    'Ouverture fichier Tarifs en lecture
    Set objFSO_Tarif 		= objFSO.OpenTextFile (FichierTarif, ForReading, false)
     
    'lecture de chaque ligne
    Do While objFSO_ECommerce.AtEndOfStream=false
    	'pour chaque ligne du fichier Ecommerce 
    	LigneEcommerce = objFSO_ECommerce.ReadLine
    	'on cherche la reference colonne 90 et on recupere les 16 caracteres suivant
    	Ref_ECommerce = Mid(LigneEcommerce, 90, 16)
    	'suppression des espaces
    	Ref_ECommerce = LTrim(Ref_ECommerce)
    	'wscript.echo Ref_ECommerce
    	wscript.echo "ref ecommerce " & Ref_ECommerce
     
    	'Ouverture fichier Tarifs en lecture
    	Set objFSO_Tarif 		= objFSO.OpenTextFile (FichierTarif, ForReading, false)
     
    	'wscript.echo "1 : " & countTarif
    	Do While objFSO_Tarif.AtEndOfStream=false
    		'wscript.echo objFSO_Tarif.ReadLine
    		'pour chaque ligne du fichier Tarif 
    		'on cherche la reference colonne 90 et on recupere les 16 caracteres suivant
    		LigneTarif = ""
    		LigneTarif = objFSO_Tarif.ReadLine
    		Ref_Tarif = Mid(LigneTarif, 90, 16)
    		'suppression des espaces
    		Ref_Tarif = LTrim(Ref_Tarif)
    		'Si Ref_Tarif = Ref_Tarif --> on ecrit pa ligne dans un nouveau fichier tarif
    		'compare les 2 ref --> si egale = 0 alors les 2 ref sont identiques
     
    		'Test les 2 ref
    		egale = StrComp(Ref_Tarif, Ref_ECommerce, 1)
     
    		'Si Les 2 ref sont les memes
    		If (egale=0) Then
    			'wscript.echo "test oui Ref Tarif : " & Ref_Tarif & " Ref Ecommercer : " & Ref_ECommerce
    			'On ecrit la ligne dans le fichier Dif
    			Set objFSO_Dif = objFSO.OpenTextFile(JusteEcom,ForAppending,true)
    			objFSO_Dif.Writeline(LigneTarif)
    			objFSO_Dif.close
    		'sinon
    		Else
    			'Si non, on ecrit la ligne dans le NewFichierTarif
    			Set objFSO_New = objFSO.OpenTextFile(TarifSansEcom,ForAppending,true)
    			objFSO_New.WriteLine(LigneTarif)
    			objFSO_New.close
    		End if
    	Loop
    	objFSO_Tarif.close
    Loop
    objFSO_ECommerce.close
    Sur le principe, je cherche ma reference dans le fichier "Ecommerce.txt", je supprime les espaces et je recherche cette référence dans le fichier "Tarif.txt"
    Si je retrouve cette reference, je copie la ligne du tarif correspondant dans un nouveau fichier JusteEcom.txt et sinon je copie cette ligne dans TarifSansEcom.txt

    Le probleme que je rencontre c'est que cela fonctionne pour la premiere ligne mais pour la ligne suivant, vu qu'elle ne correspond pas à la premiere, elle va se retrouver dans TarifSansEcom alors que la ref correspond à la premiere ligne.

    Auriez vous une idée ?
    Il est tout à fait possible que la méthode ne soit pas bonne ...

    Merci d'avance

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Un petit extrait des 2 fichiers(à titre indicatif, mais pas une capture d'écran) serait plus éloquent.

    Si toutes les lignes du fichier "FichierTarif" sont différentes, une fois on a trouvé une valeur, on devrait sortir de la boucle Do While objFSO_Tarif.AtEndOfStream=false.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    pourtant pas compliqué en respectant la Logique !

    Citation Envoyé par djinlemage Voir le message
    Le premier s'appelle disons "Ecommerce.txt et le deuxième "Tarif.txt

    […] et la mettre dans un autre fichier (que j'appelle "JusteEcom.txt") et sinon je copie cette ligne dans TarifSansEcom.txt
    Joindre deux fichiers texte source et les deux fichiers texte des résultats désirés …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Bonjour,

    Merci de votre retour.
    En effet avec les fichiers ça serait plus facile
    Désolé !


    Voici donc en PJ les 2 fichiers que j'analyse et le résultat voulu.

    Citation Envoyé par l_autodidacte
    Un petit extrait des 2 fichiers(à titre indicatif, mais pas une capture d'écran) serait plus éloquent.

    Si toutes les lignes du fichier "FichierTarif" sont différentes, une fois on a trouvé une valeur, on devrait sortir de la boucle Do While objFSO_Tarif.AtEndOfStream=false.]
    En effet mais dans le traitement,
    - je vérifie la 1ere référence du 1er fichier (EcommerceMini)
    - dans le 2eme fichier (TarifMini), ligne par ligne je cherche si la reference correspond
    ----------Si oui - Je copie la ligne du fichier TarifMini dans un fichier (JusteEcom)
    ----------Si non- Je copie la ligne du fichier TarifMini dans un fichier (TarifSans Ecom)
    Sorite de la boucle

    MAIS

    comme l'analyse du fichier Ecommerce n'est pas fini j'ai le même traitement sur les ligne suivant.
    Le pb que je rencontre, c'est que par exemple sur l'analyse de la 2ème ligne du fichier Ecommerce, la référence de la première ligne ne correspondant pas, il me la mets dans TarifSansEcom alors qu'elle ne devrait pas...

    J’espère avoir été claire
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    J'ai bien au moins trois voies différentes, j'attends de voir ce que l_autodidacte te propose pour en poster une autre
    mais on aimerait déjà avoir un ordre d'idée du nombre de lignes à traiter …

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Salut,

    Pour le fichier tarif, il y a 150 000 lignes et pour le Ecommerce il y en a 2000

    Merci encore

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    J'espère aussi que tes pièces jointes respectent les originaux
    car je suis un peu étonné des trous - les blancs, les espaces - présents,
    sinon il vaudrait mieux joindre des fichiers respectant la réalité …

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Oui oui les espaces sont comptabilisé, cela fait partie du format de fichier qui est pour moi une contrainte de la demande initiale.


  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Tester le script vbs suivant d'abord avec les fichiers joints en exemple …

    S'il convient, avant de le tester avec les fichiers réels bien les sauvegarder !

    Car vu le nombre de lignes ou en cas d'une différence de structure cela pourrait planter …
    Si c'est trop gros pour tenir en mémoire, ce script est facilement modifiable pour une lecture ligne par ligne !
    Sans compter les autres voies à explorer …
    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
         SRC = "1-EcommerceMini.txt"
         TRF = "1-TarifMini.txt"
    With CreateObject("Scripting.FileSystemObject")
        If Not (.FileExists(SRC) And .FileExists(TRF)) Then
            MsgBox "Fichier source absent !", vbExclamation
            WScript.Quit 1
        End If
    End With
      ReDim AdoS(2)
    For N = 0 To 2
        Set AdoS(N) = CreateObject("ADODB.Stream")
            AdoS(N).Charset = "windows-1252"
            AdoS(N).Open
    Next
            AdoS(2).LoadFromFile SRC
        Set Dict = CreateObject("Scripting.Dictionary")
    With New RegExp
                .Global = True
             .MultiLine = True
               .Pattern = "^ +\w+ +\w+ +\w+ +\w+ +(\w+)[^\r]+"
        For Each oRow In .Execute(AdoS(2).ReadText)
            Dict(oRow.SubMatches(0)) = ""
        Next
            AdoS(2).LoadFromFile TRF
        For Each oRow In .Execute(AdoS(2).ReadText)
            AdoS(-Dict.Exists(oRow.SubMatches(0))).WriteText oRow.Value, 1
        Next
    End With
        T = Split("TarifSansEcom.txt JusteEcom.txt")
    For N = 0 To 2
     If N < 2 Then AdoS(N).SaveToFile T(N), 2
                   AdoS(N).Close
               Set AdoS(N) = Nothing
    Next
            Dict.RemoveAll
        Set Dict = Nothing
    MsgBox "Création terminée des fichiers" & vbLf & vbLf & Join(T, " & "), vbInformation
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  10. #10
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Wouhaw,

    Déjà merci beaucoup.
    Tu utilise des fonctions que je ne connais pas mais je suis aussi la pour apprendre

    Pourquoi de l'expression régulière alors que le fichier est formaté très précisément et que Mid(LigneTarif, 90, 16) fonctionnait ?

    Par contre cela ne fonctionne pas comme ça devrait
    Le fichier JusteEcom est vide et dans le fichier TarifSansEcom, je retrouve une référence qui corresponds à une référence du 1-EcommerceMini

  11. #11
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    L'as-tu déjà testé avec tes fichiers joints dans le post #4 ?

    Car de mon côté j'obtiens exactement le résultat désiré …


  12. #12
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    A mais lol, j'avais avancé un peu et on ma donné un autre fichier dont le format est différent ... (j’espère le format définitif)
    En effet avec les fichiers en PJ du post, ça fonctionne.

    Comment puis je adapter ton script pour un csv avec séparation point-virgule ?

    Merci encore
    Fichiers attachés Fichiers attachés

  13. #13
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Dans l'attente d'une situation définitive (autre changement dans les autres fichiers ?),

    il est déjà possible de séparer les données d'une chaîne via la fonction Split

    Edit : maintenant que le forum est retourné à son mode de fonctionnement normal,
    si le code dans le nouveau format est toujours sur les six premiers caractères alors la fonction VBA Left fait l'affaire !

  14. #14
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Je suis désolé mais je ne connais pas du tout la méthode que tu as utilisé.
    Du coup je ne comprend pas 2-3 choses :

    le ReDim Ados(2) créé bien un tableau avec 3 élèments

    Tu créé 3 objets AdoS(x) pour y charger les fichiers
    --> pourquoi 3 (de 0 à 2)

    Je ne comprend pas cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dict(oRow.SubMatches(0)) = ""
    Du coup j'ai récupérer ma réf de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Temp = Split(AdoS(2).ReadText,";")
    Ref = Temp(0)
    Mais l'integrer dans ton script je nage un peu

    J't'ai deja dit merci !

  15. #15
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    • 3 fichiers : un en lecture et deux en écritures …

    • La ligne Dict(oRow.SubMatches(0)) = "" crée une entrée dans le dictionnaire à partir de l'extraction d'une ligne.

    ReadText sans paramètre lit l'intégralité du fichier donc telle quelle ta ligne est ingérable ! (cf aide sur MSDN)
    Soit un Split sur la séquence de fin de ligne puis une boucle sur chaque ligne pour un Split sur le ;
    soit modifier le masque de l'expression rationnelle …

    Ou encore revenir à tes fondamentaux avec juste FileSystemObject (forcément plus lent)
    mais cette fois en respectant la Logique, rien de compliqué à la portée d'un débutant …

  16. #16
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Salut,

    Je reviens ca mais connaissance plutôt limitées me bloques…

    Je tente avec ta méthode car vu le nombre de ligne, j’ai tout de même besoin de performance

    Je bute sur l’adaptation de la boucle :

    La partie split ne pose pas de probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	Temp = Split(AdoS(2).ReadText,";")
    	Ref = Temp(0)
    Si j'ai bien compris, sur chaque expression retrouvée, tu le rentre dans le dictionnaire mais je ne comprends pas comment l’adapter en supprimant la partie Expression Régulière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With New RegExp
    		 .Global = True
             .MultiLine = True
             .Pattern = "^ +\w+ +\w+ +\w+ +\w+ +(\w+)[^\r]+"
        For Each oRow In .Execute(AdoS(2).ReadText)
            Dict(oRow.SubMatches(0)) = ""
        Next
            AdoS(2).LoadFromFile TRF
        For Each oRow In .Execute(AdoS(2).ReadText)
            AdoS(-Dict.Exists(oRow.SubMatches(0))).WriteText oRow.Value, 1
        Next
    End With
    Merci encore

  17. #17
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Il faut déjà deux Split comme pourtant expliqué dans mon précédent message
    donc là encore cela ne peut fonctionner !

    Sans consulter les diverses documentation pourtant à disposition …
    … revenons-en au B-A-BA comme le code de la présentation initiale
       mais cette fois en respectant la Logique et exploitant la voie romaine :
    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
            SRC = "1-EcommerceMini.txt"
            TRF = "1-TarifMini.txt"
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(SRC) And .FileExists(TRF) Then
            With .OpenTextFile(SRC, 1)
                  SPQ = Split(.ReadAll, vbCrLf)
                 .Close
            End With
            For R = 0 To UBound(SPQ)
                SPQ(R) = Split(SPQ(R), ";")(0)
            Next
                 ReDim TF(1)
                   Set TF(0) = .OpenTextFile("JusteEcom.txt", 2, True)
                   Set TF(1) = .OpenTextFile("TarifSansEcom.txt", 2, True)
            With .OpenTextFile(TRF, 1)
                Do Until .AtEndOfStream
                         L = .ReadLine
                         S = RTrim(Mid(L, 91, 15))
                    For Each V In SPQ
                      If S = V Then Exit For
                    Next
                        TF(-(V = "")).WriteLine L
                Loop
                    .Close
            End With
                   TF(0).Close
                   TF(1).Close
               Set TF(0) = Nothing
               Set TF(1) = Nothing
                   MsgBox "Fichiers créés …", vbInformation
        Else
            MsgBox "Fichier source absent !", vbExclamation
        End If
    End With
    Cadeau bonus : la référence de la voie romaine est dans le code !

    Ce code a été réalisé par un collégien il y a deux vendredi (fallait l'occuper !),
    je l'ai juste un peu remanié pour une analogie avec mon précédent code.

    Et à tester évidemment avec la pièce jointe du post #12 …

  18. #18
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Au top, ça fonctionne nickel.

    Vraiment merci !!!

  19. #19
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par djinlemage Voir le message
    Au top, ça fonctionne nickel.
    Non pas du tout au top car la logique vient d'un gamin de 14 ans débutant en VBScript !

    Pour chaque ligne sans correspondance du fichier tarif de 150 000 lignes,
    l'intégralité des 2 000 lignes du fichier ecommerce est parcourue !
    Certes en mémoire pour limiter les dégâts du code initialement présenté …

    Par exemple s'il y a 100 000 lignes sans correspondance,
    il y a donc 200 millions (100 000 x 2 000) de lignes parcourues inutilement
    Sans compter le nombre de lignes parcourues pour les 50 000 autres lignes du fichier tarif.
    Qui plus est le tout uniquement avec FSO la grosse Bertha pas très rapide …

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

Discussions similaires

  1. Recherche d'une donnée dans un autre fichier
    Par Cha0022 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/06/2014, 22h23
  2. [XL-2007] Erreur 1004, recherche d'une cellule dans un autre fichier excel
    Par bodd984 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/08/2010, 18h12
  3. [DOM] importer un noeud d'un fichier xml et le coller dans un autre fichier
    Par iznogoud36 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/06/2006, 12h55
  4. [VBA] Recherche d'une valeur dans un autre fichiers puis
    Par Nicos77 dans le forum Général VBA
    Réponses: 11
    Dernier message: 24/03/2006, 11h24
  5. Recherche d'une chaine dans une autre chaine
    Par arnapou dans le forum C
    Réponses: 7
    Dernier message: 31/01/2006, 23h10

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