Pb script vbs fonctionne aléatoirement

Résolu
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010 - 2 juin 2010 à 15:33
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010 - 9 juin 2010 à 14:57
Bonjour à tous,

J'ai réussi à adapter un code vbs trouvé sur un site en anglais.
C'est un script qui permet d'assembler plusieurs présentations powerpoint en une seule.
Le code fonctionne visiblement bien sauf que selon le dossier dans lequel je place le script et les documents à assembler, ma présentation ne contient pas toujours toutes les slides!
Quelqu'un voit-il une explication à ce problème?

Merci pour votre aide.

28 réponses

lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
3 juin 2010 à 09:42
Essayes comme ceic:

Dim ff
For Each ff in folder.Files
'MsgBox ff.Name
if fs.getextensionName(ff)="ppt" then
f = PPTMERGE_FOLDER + "" + ff.Name
If first Then
Dim p
Set out = Application.Presentations.Open(f)
out.SaveAs PPTMERGE_FOLDER + "" + PPTMERGE_FILE
first = False
Else
out.Slides.InsertFromFile f, out.Slides.Count
End If
End if
Next
If Not first Then
out.Save
'out.SlideShowSettings.Run
'out.Close
End If


L'expérience, c'est une connerie par jour, mais jamais la même..
3
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
2 juin 2010 à 15:48
Bonjour,

Je vois...Je vois que le problème vient sûrement de la ligne 23 de ton script..
Plus sérieusement avec ton code il serait plus simple de t'aider..

Y'a t'il des caractères spéciaux dans les noms de répertoires ou de documents ( espace blancs, tirer, accents, etc etc...)


L'expérience, c'est une connerie par jour, mais jamais la même..
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
2 juin 2010 à 16:12
Merci pour la rapidité de la réponse!

Excuse cet oubli , voici le code:
Const PPTMERGE_FILE = "PPT_assemblé.pptm"
Const PPTMERGE_FOLDER = "D:\DATA\test fusion\FusionPPT"

Dim Application
Set Application=CreateObject("PowerPoint.Application")
Application.Visible = True 'must do this for merge to work

Dim first
first = True

Set fs=CreateObject("Scripting.FileSystemObject")
Dim folder
Set folder = fs.GetFolder(PPTMERGE_FOLDER)

Dim out

Dim ff
For Each ff in folder.Files
'MsgBox ff.Name
f = PPTMERGE_FOLDER + "" + ff.Name
If first Then
Dim p
Set out = Application.Presentations.Open(f)
out.SaveAs PPTMERGE_FOLDER + "\.." + PPTMERGE_FILE
first = False
Else
out.Slides.InsertFromFile f, out.Slides.Count
End If
Next
If Not first Then
out.Save
'out.SlideShowSettings.Run
'out.Close
End If
Set folder = Nothing

Set out = Nothing

Set folder = Nothing

'Application.Quit
Set Application = Nothing


En fait avec le chemin qu'il y a dans ce code, la fusion fonctionne, par contre si je change mon dossier de place et que le chemin est D:\DATA\Presentation Neutre\FusionPPT, là il ne fonctionne, alors que j'ai les mêmes fichiers à assembler dans le dossier "FusionPPT".

Pour répondre à ta question, oui mes noms de fichiers ont des espaces, tiret ou autres caractères de ce genre mais je ne comprends pas pourquoi certains passent et d'autres non!

Merci pour ton aide, dis moi s'il te faut plus de précision.
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
2 juin 2010 à 16:20
Les espaces dans les noms de répertoire peuvent parfois poser quelques soucis, j'en ai encore fait l'expérience aujourd'hui même

Après cette ligne : Set folder = fs.GetFolder(PPTMERGE_FOLDER)
essaye de rajouter ceci:
Set f=folder.shortpath (qui te permettra de récupérer le nom cours de ton répertoire)




L'expérience, c'est une connerie par jour, mais jamais la même..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
2 juin 2010 à 16:27
Ok merci je vais essayer ça de suite!
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
2 juin 2010 à 16:32
Je viens de tester, mais ça me met une erreur directement.
Ligne: 14
Carct: 1
Erreur: Objet requis: '[string: "D:\DATA\PRESEN~2\FUS"]'
Code: 800A01A8
Source: Erreur d'éxécution Microsoft VBScript


Je n'ai pourtant rien changé d'autre que l'ajout de cette ligne.
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
3 juin 2010 à 08:51
Bonjour,

Le pb ne vient peut-être pas de là. Tu dis que ça ne fonctionne pas, c'est vaste..Il y a un message d'erreur?

Ou comme tu le dis dans ton 1er message, il manque juste des diapos dans la présentation finale?


L'expérience, c'est une connerie par jour, mais jamais la même..
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
3 juin 2010 à 09:05
En effet je ne sais pas trop d'où vient l'erreur. C'est assez particulier comme problème!!
Au départ j'avais toujours un message d'erreur à la fin de l'exécution de mon script disant que l'instruction "Slides.InsertFromFile : failed", j'ai d'abord pensé qu'il y avait un problème dans la boucle mais j'avais toutes mes diapos. Grace au message box qui énumère les fichiers assemblés (dans le code je l'ai mis en commentaire car quand il y en a beaucoup, c'est embetant!) j'ai vu que le probleme venait d'un fichier "thumbs.db" et que donc ça ne genait en rien mon assemblage.
Mais je ne pense pas que ce message soit la source du problème car, que mon assemblage soit complet ou non, j'ai ce message.
Autre élément étrange, j'ai cru remarqué (sans doute un hasard) que ce sont généralement les fichiers commençant par certaines lettres qui sont "ignorés" (les 't', 'v', 'z' et sans doute d'autres!!).
Donc je ne comprends pas!
J'aurais bien aimé faire le script moi même mais mes connaissances de ce langage sont quasi nulles!!

Merci pour ta patience!
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
3 juin 2010 à 09:18
Heuuu alors dans ce cas, autre question:

Dans ton répertoire, as-tu d'autres types de fichier que les slides?

en effet, avec cette boucle:

For Each ff in folder.Files
'MsgBox ff.Name
f = PPTMERGE_FOLDER + "" + ff.Name
If first Then

Tu prends absolument tous les fichiers, sans vérifier l'extension, donc si il existe des fichiers autre que tes slides, cela peut surement poser pb..Ton script essaye peut-etre d'ajouter ce fichier thumbs.db dans ta présentation powerpoint, mais comme ce n'ets pas un fichier au bon format, plantage..

Il faudrait donc peut-etre rajouter une sécurité ( à tester ou adapter) :
If fso.getextensionName(ff)="pst" then on ajoute

L'expérience, c'est une connerie par jour, mais jamais la même..
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
3 juin 2010 à 09:30
Non dans mon répertoire je n'ai que des fichiers issus de PowerPoint (.ppt, .pptx, .pptm et je crois que c'est tout ce que je peux trouver comme extension dans le dossier).
Le problème du fichier "thumbs.db" c'est qu'il n'apparait pas dans mon dossier, ce doit être un fichier caché ou je ne sais pas trop. On m'a dit qu'il est créé par Windows pour afficher des miniatures d'images, et comme mes slides contiennent des images, je pense que ça vient de là.
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
3 juin 2010 à 09:52
Je viens de tester, visiblement ça fonctionne (il faudra que je reteste dans plusieurs dossiers différents vu les surprises que j'ai deja eues^^!
En tout cas un grand merci à toi!!
Je sais que j'abuse mais est-ce que tu sais comment je peux faire pour présicer plusieurs extensions?
Autre détail, il ne m'enregistre plus mon fichier final au même endroit, avant il l'enregistrait dans le dossier où il y a le script et maintenant il l'enregistre dans le sous-dossier avec tous les ppt à assembler.
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
3 juin 2010 à 10:02
if fs.getextensionName(ff)="ppt" or fs.getextensionName(ff)="pptx" then

Ha oui j'avais modifié l'endroit d'enregistrement suffit de remettre le "\.." :
out.SaveAs PPTMERGE_FOLDER + "\.." + PPTMERGE_FILE


L'expérience, c'est une connerie par jour, mais jamais la même..
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
3 juin 2010 à 10:08
Oui je viens de trouver pour l'enregistrement du fichier!
Ok je vais tester de mettre plusieurs extensions, je n'en ai que 3 de toute façon il me semble.
Un grand merci à toi pour ta patience et tes explications!!
J'espère ne plus t'embêter!

Ah si j'aurais encore une petite question, sais-tu s'il existe un différence quand on exécute ce genre de script sur XP et quand on l'exécute sur Seven, y a-t-il des choses à modifier?

Encore merci à toi!
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
3 juin 2010 à 11:07
Logiquement sur Seven avec ce genre de script qui ne nécessite pas les droits admins, cela ne devrait pas poser de soucis, mais il vaut mieux vérifier quand même :)


L'expérience, c'est une connerie par jour, mais jamais la même..
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
3 juin 2010 à 11:15
Ok je verrai alors

Un grand merci à toi, tu m'as beaucoup aidé!!
Je reviendrai peut etre t'embeter si d'aventure je dois refaire face à du vb!^^

Mélanie
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
3 juin 2010 à 13:08
Mais de rien, ce forum est fait pour ça


L'expérience, c'est une connerie par jour, mais jamais la même..
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
9 juin 2010 à 10:09
Bonjour Lolokun, et bonjour à tous les autres aussi!

Je viens encore chercher vos lumières au sujet de mon problème de script vbs.
Grâce à l'aide de Lolokun j'ai réussi à le faire fonctionner sans problème.
Mais je voudrais qu'il soit utilisable sur d'autres postes sans avoir à changer à chaque fois le chemin d'accès au répertoire, j'aurais voulu savoir comment faire pour spécifier un chemin "par défaut".
Je m'explique, plutôt que d'avoir "D:\Data\test fusion\FusionPPT" j'aimerais trouvé une solution pour que mon script aille chercher mes fichiers powerpoint dans le dossier FusionPPT sans avoir à écrire tout ce chemin, qui peut varier selon les postes et l'endroit où on le met.
En sachant que mon fichier .vbs se trouve dans le dossier "test fusion", est-il possible de mettre quelque chose du genre ".\FusionPPT" ou "\..\FusionPPT??

Merci pour vos réponses.
Cordialement.
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
9 juin 2010 à 10:12
J'ai oublié de préciser que j'ai XP et Seven comme OS.

Merci.
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
9 juin 2010 à 11:33
Bonjour,

un conseil, pour un nouveau sujet, ouvre un nouveau post, celui-ci étant condidéré comme clôturé tu auras moins de réponses d'autres membres qui se contenteront d'ouvir des sujets encore no résolu..

Vu que ton vbs est dans le même répertoire, tu peux utiliser le code présent dans les snippet: ici

Personnellement je n'utilise pas la fonction replace :

var1 = WScript.ScriptFullName
var2 = WScript.ScriptName
vardest = left(var1,len(var1) - len(var2))

L'expérience, c'est une connerie par jour, mais jamais la même..
0
lastar44 Messages postés 16 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 9 juin 2010
9 juin 2010 à 11:39
Ah oui désolée je n'avais pas pensé à cela!

Merci pour ta réponse mais peux-tu me donner quelques précisions, à savoir où je dois placer ce que tu as dit:
var1 = WScript.ScriptFullName
var2 = WScript.ScriptName
vardest = left(var1,len(var1) - len(var2))

Est-ce directement dans le chemin, ou dois-je spécifier quelque chose de particulier à la place de mon chemin??

Merci!
0
Rejoignez-nous