ydu_sputnik
Messages postés8Date d'inscriptionjeudi 7 juin 2007StatutMembreDernière intervention25 septembre 2007
-
7 juin 2007 à 15:23
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 2009
-
11 juin 2007 à 12:28
Bonjour à tous:
Voici mon problème, au cours de mon programme, je souhaite compresser un fichier en .ZIP. Mon applis se bloque au moment où WINZIP s'ouvre et le message suivant suivant apparait ===> voir PJ
Voici ma macro, en rouge figure l'endroit du bug
Merci pour votre aide
Bonne journée à tous
Dim p, d, groupe(0 To 50) As String
Dim i, j, t, t1, ok, maxlig As Integer
Declare Function WaitForSingleObject Lib "Kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function OpenProcess Lib "Kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Public Const INFINITE = &HFFFF
Sub compilation_bp04()
'supprime temporairement les messages d'alerte et la mise à jour de l'écran
Application.DisplayAlerts = False
Workbooks("data.xls").Sheets(1).Cells(16, 6) = "Ouverture des fichiers BP04 en cours ..."
Application.ScreenUpdating = False
p = ActiveWorkbook.Path
maxlig = 300
'Enregistrement sous databis.xls
Workbooks("data.xls").Activate
Workbooks("data.xls").Sheets(1).Cells(16, 6) = "Copie de data.xls (S-1) en databis.xls"
'Workbooks("data.xls").Sheets(1).Cells(18, 6) = Workbooks("data.xls").Sheets(2).Cells(4, 10).Text
Application.ScreenUpdating = True
Application.ScreenUpdating = False
ActiveWorkbook.SaveAs Filename:=p + "\databis.xls"
'ouverture des fichiers
t = 0
While Cells(t + 2, 1) <> ""
groupe(t) = Cells(t + 2, 1).Value
Workbooks.Open Filename:=p + "" + groupe(t) + ".xls"
Workbooks("databis.xls").Activate
Sheets("Index").Select
t = t + 1
Wend
'Tri des feuilles
Workbooks("databis.xls").Sheets(1).Cells(16, 6) = " Tri des zones de données en cours ..."
Application.ScreenUpdating = True
Application.ScreenUpdating = False
For j = 2 To Sheets.Count: Sheets(j).Select: Range("A7:J" & maxlig).Select
Selection.Sort Key1:=Range("A7"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Next j
'ajout d'une colonne a gauche avec le code et Nb ou Cx
'For t = 2 To Sheets.Count
' Sheets(t).Activate
' 'Range("A1:I" &maxlig).Select
' 'Selection.Copy
' 'Range("B1").Select
' 'ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
' ' IconFileName:=False
' Range("A7").Select
' ActiveCell.FormulaR1C1 = "=RC[1] &""_"" &RC[3]"
' Range("A7").Select
' Selection.Copy
' Range("A8:A" & maxlig).Select
' ActiveSheet.Paste
' Range("A1").Select
'Next t
'test si le contrôle des fichiers est valide
Sheets("Index").Select
If Range("F6").Text = "Erreur" Then
MsgBox "Anomalie dans les fichiers! Refermer sans enregistrer.", vbExclamation, "Attention"
GoTo fin
End If
'Enregistrement sous date de cumul
Sheets(1).Select
Sheets(1).Cells(16, 6) = "Archivage du Data.xls ..."
Application.ScreenUpdating = True 'pour afficher le message
Application.ScreenUpdating = False
Sheets(1).Cells(16, 6) = ""
Sheets(groupe(0)).Select
d = Mid(Range("J4").Value, 10) 'cumul au jj mois année
Sheets(1).Select
Range("F18").Value = d
'd1 = "Data_" & Right(d, 2) & Right("0" & Month(d), 2) & Left(d, 2)
d1 = "Data_" & "S" & Right("0" & Cells(19, 6).Text, 2)
ActiveWorkbook.SaveAs Filename:=p & "" & d1 & ".xls"
'Enregistrement sous data.xls
Cells(16, 6) = "Enregistrement data.xls ..."
Application.ScreenUpdating = True
Application.ScreenUpdating = False
Sheets(1).Cells(16, 6) = ""
ActiveWorkbook.SaveAs Filename:=p & "\data.xls"
'archivage du data en zip
'Répertoire ou est installé WinZip
'===> CheminWinZip = "C:\Program Files\WinZip\Winzip8.1_FR"
'Nom du fichier Zip a créér
'===> NomArchive = p & "\Data" & d1 & ".zip"
'Nom du dossier à compresser
'===> QuelFichier = p & "" & d1 & ".xls"
'===> chemin = CheminWinZip & "winzip32.exe -a """ & NomArchive & """ """ & QuelFichier & """"
'===> While LanceEtAttendLaFin(chemin) <> 0: Wend 'teste si le zip est terminé
'===> Kill p & "" & d1 & ".xls"
fin:
Application.ScreenUpdating = True
MsgBox "Traitement terminé!", vbExclamation, "Fusion des feuilles"
ActiveWorkbook.Close savechanges = True
Application.DisplayAlerts = True
End Sub
Function LanceEtAttendLaFin(ByVal CheminComplet As String) As Long
Dim ProcessHandle As Long
Dim ProcessId As Long, ret&
ProcessId = Shell(CheminComplet, vbNormalFocus)
ProcessHandle = OpenProcess(&H1F0000, 0, ProcessId)
LanceEtAttendLaFin = WaitForSingleObject(ProcessHandle, INFINITE)
End Function
Doc VB
Messages postés16Date d'inscriptionvendredi 24 novembre 2000StatutMembreDernière intervention20 juillet 2007 7 juin 2007 à 19:12
Salut,
Quelle est cette PJ dont tu parles ? Quel est le contenu du message de winzip ? S'il s'agit de la fenêtre relative à l'enregistrement du programme, tu peux essayer de simuler le clic sur le bon bouton... Si c'est ça tu peux aussi utiliser un autre outil que WINZIP pour compresser au format ZIP sans avoir de message à l'écran. Regarde par exemple du côté de 7zip (http://www.7-zip.org/fr/).
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 11 juin 2007 à 12:28
Bonjour
As-tu déjà essayé la fonction que j'ai développée et déposée sur ce site ? Elle permet d'utiliser la fonction ZIP de Windows et donc de se passer de WinZip.