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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    octobre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : octobre 2012
    Messages : 10
    Points : 7
    Points
    7

    Par défaut Comparaison de fichier

    Bonjour

    Je souhaite ecrire une fonction VBS qui ouvre deux fichiers Excel et les compare.
    La fonction retourne True si les fichiers sont identiques

    Pouvez vous m'aider SVP ?

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2009
    Messages
    3 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2009
    Messages : 3 553
    Points : 8 541
    Points
    8 541

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

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

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 107
    Points : 4 885
    Points
    4 885

    Par défaut

    En utilisant uniquement Vbscript, on peut utiliser ce
    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
    Option Explicit 
     
     Const ForReading = 1
     Dim fso, File1, File2
     
     
     Set fso = CreateObject("Scripting.FileSystemObject") 
     File1 = fso.OpenTextFile("C:\Temp\Fic1.txt", ForReading, False).ReadAll 
     File2 = fso.OpenTextFile("C:\Temp\Fic2.txt", ForReading, False).ReadAll
     
     If StrComp(File1, File2, 0) = 0 Then ' paramètre 0 pour comparaison binaire
        MsgBox "Fichiers identiques"
     Else
        MsgBox "Fichiers différents"
     End If
    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)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr ICI

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    octobre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : octobre 2012
    Messages : 10
    Points : 7
    Points
    7

    Par défaut

    Merci cela fait une comparaison binaire des fichiers.
    Maintenant si je veux comparer le contenu cellule par cellule est ce possible en VBS ?
    Ou comment puis je intégrer du VBA dans mon script VBS ?

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

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

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 107
    Points : 4 885
    Points
    4 885

    Par défaut

    Une idée consiste à mettre le contenu de chaque fichier excel dans un fichier texte plus facile à manipuler :
    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
    Option Explicit
     
    Dim  objExcel, Sheet1, Sheet2, X, ColsCount, iRow, tmpText, Delim, fso, RowsCount
     'On modifiera les chemins selon le besoin
     Delim = "\*/"
     Sheet1 = "C:\Fich1.xls"
     Sheet2 = "C:\Fich2.xls"
    Set fso = CreateObject("Scripting.FileSystemObject")
    WriteToTextFile Sheet1, "C:\Fich1.txt"
    WriteToTextFile Sheet2, "C:\Fich2.txt"
    Wscript.Sleep 2000
    TestFiles "C:\Fich1.txt", "C:\Fich2.txt"
    '========================================
    Sub WriteToTextFile(SfileExcel, txtFile)
        Dim objfich
        Set objExcel = CreateObject("Excel.Application")
        objExcel.Visible = False
        objExcel.DisplayAlerts = False
        objExcel.Workbooks.Open SfileExcel
        RowsCount = objExcel.Activesheet.UsedRange.Rows.count
        ColsCount = objExcel.Activesheet.UsedRange.Columns.count
        iRow = 1
        Set objfich = fso.OpenTextFile(txtFile, 2, True)
        Do Until iRow > RowsCount
            tmpText = ""
            For X = 1 To  ColsCount          
                tmpText = tmpText & objExcel.Cells(iRow, X).Value & Delim
            Next    
            objfich.writeline tmpText 
            iRow = iRow + 1
        Loop
        objfich.Close
        objExcel.Quit
        Set objExcel = Nothing
    End Sub
    '========================================
     Sub TestFiles(File1, File2)
        Dim oFile1, oFile2, Lig1, Lig2, Ligne, Col, ErrTxt
        Set oFile1 = fso.OpenTextFile(File1, 1, True)
        Set oFile2 = fso.OpenTextFile(File2, 1, True)
        ligne = 1
        ErrTxt = ""
        Do While Not (oFile1.AtEndOfStream) And Not oFile2.AtEndOfStream
           Lig1 = Split(oFile1.ReadLine, Delim)
           Lig2 = Split(oFile2.ReadLine, Delim)
           For Col = 0 To Ubound(Lig1)
              If StrComp(Lig1(Col), Lig2(Col), 0) <> 0 Then
                 ErrTxt = ErrTxt & "Cellule(" & Ligne & ", " & Col+1 & ")" & vbNewLine
                 ' Col+1 car on part de 0 pour col alors que les colonnes commencent à 1
              End If
           Next
           Ligne = Ligne + 1
        Loop
        If ErrTxt <> "" Then MsgBox ErrTxt, vbInformation, "Cellules différentes"
    End Sub
    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)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr ICI

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 161
    Points : 3 075
    Points
    3 075

    Par défaut

    bonjour,

    s'il s'agit simplement de comparer des valeurs de cellules
    le plus performant est sans doute d'ouvrir directement les fichiers xls(x) avec ADO
    il y a un article DVP sur le sujet (chapitre IIIc pour les xlsx)
    c'est du VBA mais l'adaptation devrait être simple
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

Discussions similaires

  1. Comparaison de fichiers text
    Par mick84m dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/07/2005, 17h48
  2. [Debutant(e)]comparaison de fichier : imprimer
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 06/07/2004, 11h43
  3. Comparaison de fichiers Word
    Par Zelphalya dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2003, 16h15
  4. [langage] Comparaison de fichiers
    Par Jibees dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2003, 17h27
  5. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 12h49

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