Problème MACRO Zip : erreur introuvable

Résolu
Signaler
Messages postés
6
Date d'inscription
lundi 17 octobre 2011
Statut
Membre
Dernière intervention
21 octobre 2011
-
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
-
Bonjour à Tous,


Voilà je débute tout juste sur VBA au travers d'Excel 2003, et je suis complètement bloquée sur un projet depuis 2 jours. Celui-ci consiste à automatiser le zip d'un fichier xls à la fin de son utilisation grâce à une macro.


J'ai trouvé une macro mais je n'arrive à y trouver l'erreur. Après de multiples tentatives, je désespère de ne pas trouver cette erreur qui, j'en suis sûre, ne doit pas être si énorme que ça alors si quelqu'un pouvait m'aider svp pour résoudre cette énigme :)

Alors, peut-être que je ne l'applique pas correctement probablement dû à mon manque d'expérience.

C'est pourquoi, je vais vous dire exactement ce que je fais sur cette macro une fois que je l'ai copié dans un nouveau module.

Tout d'abord, je fais un copier-coller de cette macro, ensuite je modifie essentiellement deux paramètres qui vont être le fichier à zipper donc mon xls, et le fichier de destination.

Première question, le fichier de destination doit-il obligatoirement être créée au préalable sur le bureau ? Si, c'est le cas, doit-on directement le mettre au format zip ou doit-on le laisser en mode dossier ?

Deuxième question, n'est-il pas nécessaire normalement d'indiquer l'emplacement du programme WinZip ?

Voilà, et lorsque je lance la macro, celle-ci ferme correctement le fichier en question et s'arrête en bloquant sur cette partie du code :
" MyBinary = MyBinary & Chr(MyHex(i))
Next"

Pouvez-vous me dire mon erreur ou mes erreurs dans l'application de cette macro ?

Je vous en remercie beaucoup par avance, le langage VBA m'intéresse beaucoup, j'ai vraiment envie d'apprendre à l'utiliser mais pour cela il faut que je puisse comprendre mes erreurs.


En vous souhaitant une belle journée,

Cordialement,

Sabrina

Ci-dessous, le code tel que je l'applique :

[code=cs]Sub ZipFichier()


ActiveWorkbook.Close

Dim oShell As Object, Fso As Object
Dim i As Long
Dim Fichier As String, MyBinary As String
Dim LeZip As Variant
Dim MyHex As Variant

LeZip = "P:\120.DirectionDesOperations\04.Marketing_Client\Reflexe_et_Fidelisation\C&S\_ASK\outils\Rank Entrepôts\2011\Rank_201109.zip"
Fichier = "D:\Documents and Settings\Sabrina.Jehanno\Bureau\TEST"



Set Fso = CreateObject("Scripting.FileSystemObject")
MyHex = _
Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

For i = 0 To UBound(MyHex)
MyBinary = MyBinary & Chr(MyHex(i))
Next

With Fso.CreateTextFile(LeZip, True)
.Write MyBinary
.Close
End With

Set oShell = CreateObject("Shell.Application")
oShell.Namespace(LeZip).CopyHere (Fichier)

Set oShell = Nothing
End Sub

Bien Cordialement,

Sabrina

14 réponses

Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

Voilà, et lorsque je lance la macro, celle-ci ferme correctement le fichier en question et s'arrête en bloquant sur cette partie du code :
" MyBinary = MyBinary & Chr(MyHex(i))
Next"

Quel est le message d'erreur ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bàonjour,

Il ne saurait, en VBA, y avoir l'erreur dénoncée sur la ligne (elle-même) :
MyBinary = MyBinary & Chr(MyHex(i)) 

dans
MyHex = _
Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

For i = 0 To UBound(MyHex)
  MyBinary = MyBinary & Chr(MyHex(i))
Next 


Sauf si l'une des deux variables MyHex ou MyBinary a, par ailleurs, une autre définition en contradiction !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Il est par contre certain que, dans le fichier d'écriture, on trouvera les deux premiers caractères, suivis de deux caractères non imprimables (Chr(5) et chr(6)) suivis de ... rien du tout (puisque des caractère chr(0)) !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
6
Date d'inscription
lundi 17 octobre 2011
Statut
Membre
Dernière intervention
21 octobre 2011

Alors sachez que l'erreur venait simplement du fait que j'avais mes chemins d'accès entre le fichier et le Zip :/ et tout fonctionne parafietement bien maintenant, c'est génial !

Alors, en tout cas, je vous remercie beaucoup pour votre aide dans la résolution de ce mystère.

Néanmoins, j'aurai une autre question : quel code feriez vous pour zipper plusieurs fichier, c'est à dire (un par un), situés dans un repertoire, dossier ? car je dois vous avouer que c'est ma nouvelle problématique.

Merci par avance,
Bien Cordialement,

Sabrina
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

Que veux-tu ?
Un zip=1 fichier
1 zip=plusieurs fichiers ?
Tu zip vraiment le fichier (réduction de taille) ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
6
Date d'inscription
lundi 17 octobre 2011
Statut
Membre
Dernière intervention
21 octobre 2011

Bonjour,

Merci pour votre retour,

Ce que je souhaite exactement :

J'ai plusieurs classeurs excel (92 au total) dans un dossier, et je souhaiterai avec ma macro que chaque classeur à l'intérieur de ce dossier soit zipper individuellement pour un envoi par mail à 92 adresses différentes.

J'espère que vous arriverez à me comprendre :/

En vous souhaitant une très belle journée,

Cordialement,


Bien Cordialement,

Sabrina
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour, sabrina (? ou marc ?)
J'ai beau lire et relire, je ne vois rien, dans ton code, qui compresse quoi que ce soit.
NHenry, qui a apparemment les mêmes doutes que moi, t'a posé une question :
Tu zip vraiment le fichier (réduction de taille) ?

question à laquelle tu n'as pas répondu.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Et pour tout dire, j'ai l'impression assez nette que le bout de ode que tu nous a montré est une espèce d' "assemblage" de choses "récoltées" ici et là, sans réellement les comprendre.
J'en veux pour exemple (entre autres choses étranges) cette ligne de code :
Set oShell = CreateObject("Shell.Application")

où as-tu "pêché" ce code-là ? "Shell.Application" n'existe pas !

Ce n'est pas ma tasse de thé, mais je pense que ce devrait être du genre :
Set oShell = WScript.CreateObject ("WScript.Shell")

ou
Set oShell = CreateObject("WScript.Shell")

Et ce n'est pas (loin de là) la seule question que je me pose en lisant ton code, tes "dénonciations de ligne d'erreur" (qui n'était pas concernée), tes "éclaircissements" qui n'en étaient pas sur la raison d'une erreur, etc ...
Dur dur de t'aider, dans de telles conditions.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
6
Date d'inscription
lundi 17 octobre 2011
Statut
Membre
Dernière intervention
21 octobre 2011

Je ne comprend pas votre question.

Effectivement, mon fichier .xls initialement fait 2,56 Mo (2 691 072 octets) et n'en fait plus que 666 Ko (683 001 octets) une fois zippé. (par l'action "ajouter au xxx.zip").

Mais, est-il possible d'utiliser du Zip sans compression des fichiers or compression d'images ?


Merci par avance pour votre retour,


Bien Cordialement,

Sabrina
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Tu as donc au départ un fichier zippé (.zip) déjà obtenu.
Bon.
Quel est( alors le but des actions qui suivent :
Set Fso = CreateObject("Scripting.FileSystemObject")
MyHex = _
Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

For i = 0 To UBound(MyHex)
MyBinary = MyBinary & Chr(MyHex(i))
Next

With Fso.CreateTextFile(LeZip, True)
.Write MyBinary
.Close
End With

et qui vont "écraser" ce fichier zippé par ... je ne sais trop quoi ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
6
Date d'inscription
lundi 17 octobre 2011
Statut
Membre
Dernière intervention
21 octobre 2011

Je ne sais pas vraiment.

En effet, ce qui se passe, c'est que je débute tout juste sur Vba, alors pour atteindre ce que je souhaite de ma macro, je recherche sur Internet différens codes que j'essaie d'appliquer ensuite tant bien que mal en essayant de comprendre un minimum, autant te dire que que ce n'est pas simple.

C'est pourquoi, toutes mes excuses si je ne suis pas très clair, mais ce n'est pas encore très transparent tout ça pour moi.

Bien Cordialement,

Sabrina
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Tu n'iras pas bien loin en agissant ainsi et en voulant "brûler" les étapes (les bases mêmes).
Mais bon ...
Va alors lire CECI attentivement.
En faisant toutefois attention (en t'en méfiant) à ce pasqsage, que je conteste (voir ce que j'en dis )plus haut) :
Set oApp = CreateObject("Shell.Application")

Bonne chance.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

"Mais, est-il possible d'utiliser du Zip sans compression des fichiers or compression d'images ? "
Quel est l'intérêt du zip ?
Faire un bloc de fichiers ?
Dans ce cas, la compression est utile quand même.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Désolé, j'étais sur la première page ...
Désolé.

---
Mon site