Comparaison d edeux fichiers, formatage - VB/VBA/VBS - Programmation
MarshPosté le 13-07-2005 à 09:59:56
Bonjour à tous,
je suis novice en VBA, et c'est le seul langage à ma disposition.. Voilà ma problématique : J'ai un fichier F1 qui renferme beaucoup d'informations relatives à des serveurs (unh eligne par serveur, chaque champ correspond à une caractéristique : nom du serveur, type d'OS sur ce serveur, appli qu'il héberge etc...). J'ai un fichier F2 ("Feuil1" ) qui n'est composé que d'un champ correspondant à une liste de serveurs. Ni F1, ni F2 ne sont triés.
Mon but serait de checker la liste de F2 afin de ne faire ressortir que la liste des serveurs de F2 qui sont dans F1 plus quelques caractéristiques choisies. Je souhaite que cette liste soit printée dans la "Feuil2" de F2.
Voici mon programme :
Dim lastLine1%, lastLine2%, F1$, F2$, serv$, pos%, serveur$ Dim nomServ$, numMax%, numMin%, argh%, numMaxStr$ Dim taille As Integer Dim F1 As Excel.Workbook Dim F2 As Excel.Workbook Dim Feuil1 As Excel.Worksheet Dim Feuil2 As Excel.Worksheet Application.ScreenUpdating = False F1 = "XXX.xls" F2 = "YYY.xls" Workbooks.Open FileName:=F1
lastLine1 = Worksheets("Feuil1" ).Cells(65535, 1).End(xlUp).Row Dim tabServ(500) As String Dim appli(500) As String Index = 1 For Line = 2 To lastLine1 serv = Trim(LCase$(Worksheets("Feuil1" ).Cells(Line, 5).Value)) pos = InStr(serv, " " ) - 1
'Formatage pour traiter des cas spéciaux du fichier F1 If pos <> -1 Then serveur = Mid(serv, 1, pos) numMax = Mid(serv, pos + 4, Len(serv)) numMaxStr = numMax & x taille = Len(numMaxStr) numMin = Mid(serv, pos - taille, taille + 1) nomServ = Mid(serv, 1, pos - taille) For i = numMin To numMax serveur = nomServ & i tabServ(Index) = serveur appli(Index) = Trim(LCase$(Worksheets("Feuil1" ).Cells(Line, 7).Value)) Next i ' Fin du formatage pour cas spéciaux
Else tabServ(Index) = serv appli(Index) = Trim(LCase$(Worksheets("Feuil1" ).Cells(Line, 7).Value)) Index = Index + 1 End If Next Line
Workbooks.Open FileName:=F2 Workbooks(F2).Worksheets("Feuil1" ).Activate lastLine2 = Worksheets("Feuil1" ).Cells(65535, 1).End(xlUp).Row MsgBox "lastLine2 = " & lastLine2 Open Workbooks(F2).Worksheets("Feuil2" ) For Output As #1 Print #1, "Serveurs"; "Application"
i = 1 For Line = 1 To lastLine2 flag = False servToCheck = Trim(LCase$(Worksheets(F2).Cells(Line, 1).Value)) MsgBox "servToCheck = " & servToCheck Do While (i <= Index) Or (flag = False) If tabServ(i) = servToCheck Then flag = True Print #1, servToCheck; appli(Index) MsgBox "servToCheck = " & servToCheck & "et appli = " & appli(Index) End If Loop Next Line End
End Sub
J'ai évidemment enlevé les MsgBox et autres.. Mon programme fonctionne bien jusqu'à la première partie, ensuite quand j'ouvre le fichier F2 : RIEN NE SE PASSE : pas de print "serveurs applicaton", pas de MsgBox qui apparait : LE NEANT !!
Je pense que je maîtrise mal les .activate ou select, je ne vois pas ce que cela pourrait être d'autre, toutefois j'ai bien un message me demandant si je veux rouvrir F2...
Marsh Posté le 13-07-2005 à 09:59:56
Bonjour à tous,
je suis novice en VBA, et c'est le seul langage à ma disposition..
Voilà ma problématique :
J'ai un fichier F1 qui renferme beaucoup d'informations relatives à des serveurs (unh eligne par serveur, chaque champ correspond à une caractéristique : nom du serveur, type d'OS sur ce serveur, appli qu'il héberge etc...).
J'ai un fichier F2 ("Feuil1" ) qui n'est composé que d'un champ correspondant à une liste de serveurs.
Ni F1, ni F2 ne sont triés.
Mon but serait de checker la liste de F2 afin de ne faire ressortir que la liste des serveurs de F2 qui sont dans F1 plus quelques caractéristiques choisies.
Je souhaite que cette liste soit printée dans la "Feuil2" de F2.
Voici mon programme :
Dim lastLine1%, lastLine2%, F1$, F2$, serv$, pos%, serveur$
Dim nomServ$, numMax%, numMin%, argh%, numMaxStr$
Dim taille As Integer
Dim F1 As Excel.Workbook
Dim F2 As Excel.Workbook
Dim Feuil1 As Excel.Worksheet
Dim Feuil2 As Excel.Worksheet
Application.ScreenUpdating = False
F1 = "XXX.xls"
F2 = "YYY.xls"
Workbooks.Open FileName:=F1
lastLine1 = Worksheets("Feuil1" ).Cells(65535, 1).End(xlUp).Row
Dim tabServ(500) As String
Dim appli(500) As String
Index = 1
For Line = 2 To lastLine1
serv = Trim(LCase$(Worksheets("Feuil1" ).Cells(Line, 5).Value))
pos = InStr(serv, " " ) - 1
'Formatage pour traiter des cas spéciaux du fichier F1
If pos <> -1 Then
serveur = Mid(serv, 1, pos)
numMax = Mid(serv, pos + 4, Len(serv))
numMaxStr = numMax & x
taille = Len(numMaxStr)
numMin = Mid(serv, pos - taille, taille + 1)
nomServ = Mid(serv, 1, pos - taille)
For i = numMin To numMax
serveur = nomServ & i
tabServ(Index) = serveur
appli(Index) = Trim(LCase$(Worksheets("Feuil1" ).Cells(Line, 7).Value))
Next i
' Fin du formatage pour cas spéciaux
Else
tabServ(Index) = serv
appli(Index) = Trim(LCase$(Worksheets("Feuil1" ).Cells(Line, 7).Value))
Index = Index + 1
End If
Next Line
Workbooks.Open FileName:=F2
Workbooks(F2).Worksheets("Feuil1" ).Activate
lastLine2 = Worksheets("Feuil1" ).Cells(65535, 1).End(xlUp).Row
MsgBox "lastLine2 = " & lastLine2
Open Workbooks(F2).Worksheets("Feuil2" ) For Output As #1
Print #1, "Serveurs"; "Application"
i = 1
For Line = 1 To lastLine2
flag = False
servToCheck = Trim(LCase$(Worksheets(F2).Cells(Line, 1).Value))
MsgBox "servToCheck = " & servToCheck
Do While (i <= Index) Or (flag = False)
If tabServ(i) = servToCheck Then
flag = True
Print #1, servToCheck; appli(Index)
MsgBox "servToCheck = " & servToCheck & "et appli = " & appli(Index)
End If
Loop
Next Line
End
End Sub
J'ai évidemment enlevé les MsgBox et autres..
Mon programme fonctionne bien jusqu'à la première partie, ensuite quand j'ouvre le fichier F2 : RIEN NE SE PASSE : pas de print "serveurs applicaton", pas de MsgBox qui apparait :
LE NEANT !!
Je pense que je maîtrise mal les .activate ou select, je ne vois pas ce que cela pourrait être d'autre, toutefois j'ai bien un message me demandant si je veux rouvrir F2...
Je reste perplexe..
Pourriez-vous m'aider ?
Merci beaucoup