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 ?
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 ?
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) 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
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 ?
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) 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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager