Se connecter avec
S'enregistrer | Connectez-vous

[Excel 2003] Generer une presentation powerpoint en VB

Dernière réponse : dans Programmation

Bonjour a tous,

Pour mon premier message, je vous soumets une interrogation relativement specifique.
Tout d'abord veuillez excuser le manque d'accent dans mon message, je vous ecris d'un clavier britannique...

J'ai donc cree un systeme de tableurs excel et de Macro pour le besoin de mon equipe de travail.
Pour faire simple, un premier fichier excel fait office de fiche vierge. Sur cette fiche, les membres de mon equipe peuvent documenter leur travail, nous appellerons ces fiches "A".
Une fois cette fiche rempli, les informations qu'elle contient sont transfere dans un deuxieme fichier excel ( "B" ) qui reuni toute les informations, qui contient un lien pour chaque fiche et un numero de reference pour ces dernieres...
Jusqu'ici, je l'admet rien de bien sorcier !!

Le deuxieme fichier excel (celui qui contient toute les informations) est de plus utiliser pour generer une presentation PowerPoint qui sert de rapport.
Cette presentation powerpoint va donc contenir tel ou tel fiches A.

Ma macro debute donc par :
  1. Private Sub CommandButton1_Click()
  2.  
  3. ' Sets Variables for managing the PowerPoint Application
  4. Dim PPApp As PowerPoint.Application
  5. Dim PPPres As PowerPoint.Presentation
  6. Dim PPSlide As PowerPoint.Slide


Variable que j'utilise evidement par la suite pour manipuler ma presentation...

Tout fonctionner correctement jusqu'a hier apres-midi ! Ce matin Excel me renvoie cette erreur
Citation :
Compile Error : Can't find project or library

En me surlignant "PowerPoint.Application"...
Je suis donc alle faire un tour dans Tools -> References et essayais d'activer la librairie ppt9.0... Excel me renvoie l'erreur :
Citation :
Name conflicts with existing module, project or object library


Je suis completement perdu, et tres frustre car tout fonctionner correctement pas plus tard qu'hier !!!

Merci d'avance,
Sozat
Lassé par la pub ? Créez un compte

Desole pour ce message, je viens de trouver le probleme...

Pour information, mon equipe utilise soit Office 2000 soit Office 2003...

Lors du passage de l'un a l'autre les librairies de references change automatiquement, posant quelques soucis.

Je ne sais pas trop comment je vais resoudre le probleme, mais au moins j'ai le doigt dessus ;) 
Expert Programmation

Bonjour,

(J'ai remplacé
Citation :
par [CODE]) dans ton premier message. Merci de respecter ce point de règlement à l'avenir)

Voici une solution pour éviter les conflits.

Ton code, élégant :
  1. Private Sub CommandButton1_Click()
  2.  
  3. ' // Sets Variables for managing the PowerPoint Application
  4. Dim PPApp As PowerPoint.Application
  5. [..]
  6.  
  7. Set PPApp = CreateObject("PowerPoint.Application")
  8. Set PPApp = GetObject("PowerPoint.Application")


Ma proposition, moche :
  1. Private Sub CommandButton1_Click()
  2.  
  3. ' // Sets Variables for managing the PowerPoint Application
  4. Dim PPApp As Object
  5. [..]
  6.  
  7. Set PPApp = CreateObject("PowerPoint.Application")
  8. Set PPApp = GetObject("PowerPoint.Application")


Cela te convient-il ?


A creuser : l'objet VBProject.References.
Expert Programmation

Après creusage, TADAAAAAA !
Voilà LA solution, ZE soluce comme disent ceux qui ont un clavier sans accent. :D 

  1. Public Sub AddReference(class As String, file As String)
  2. Dim ref As Object
  3. Dim app As Object
  4. Dim fic As String
  5.  
  6. ' // Efface les références non valides
  7. For Each ref In VBProject.References
  8. If ref.IsBroken Then
  9. VBProject.References.Remove ref
  10. End If
  11. Next
  12.  
  13. ' // On recherche une appli.
  14. On Error Resume Next
  15. Set app = CreateObject(class)
  16. On Error GoTo 0
  17. If app Is Nothing Then Exit Sub
  18.  
  19. fic = app.Path & "\" & Dir(app.Path & "\" & file)
  20. Debug.Print "Ref: " & fic
  21.  
  22. ' // Vérification ultime
  23. For Each ref In VBProject.References
  24. If UCase(ref.fullpath) = UCase(fic) Then
  25. Debug.Print "Ref. déjà présente."
  26. Exit Sub
  27. End If
  28. Next
  29.  
  30. ' // Ajout de la Référence
  31. Debug.Print "Ajout de la Référence."
  32. VBProject.References.AddFromFile fic
  33.  
  34. ' // MrProper
  35. Set ref = Nothing
  36. Set app = Nothing
  37. End Sub


Et voici de quoi référencer vos applications préférées :
  1. Private Sub AddReferenceToPowerPoint()
  2. AddReference "PowerPoint.Application", "MSPPT*.OLB"
  3. End Sub
  4.  
  5. Private Sub AddReferenceToWord()
  6. AddReference "MSWord.Application", "MSWORD*.OLB"
  7. End Sub
Expert Programmation

:D 

Citation :
je vous raconte comment ca s'est passe
(Pas de cédille non plus, hein ! :lol:  )

Ouhais, c'est cool quand quelqu'un ne se contente pas de juste prendre la solution, mais qu'il donne son avis, complète, ajuste, critique (objectivement), et donc améliore ce qui est proposé. Pourtant et c'est rare, j'ai écrit LA soluce comme s'il n'y en avait qu'une. Ne pas en tenir compte si on peut l'améliorer ;) 

C'est re-moi ;) 

Bon, j'ai quelque difficulte a faire fonctionner le code.
Je pense que cela est du a mes pauvres connaissances (apprise sur le tas) de VBA...

Dans le premier cadre de code "class" doit il bien est remplacer par "PowerPoint.Application" et "file" par "MSPPT*.OLB" ??

De plus, je suis oblige d'inserer "ThisWorkbook." devant VBproject pour que visual basic me compile mon code...

Finalement, je n'ai pas bien compris comment utiliser le deuxieme cadre de code :D 

Ah oui, et concernant la premiere reponse, ta proposition moche, zeb, me renvoie une erreur tout de meme car excel ne reconnait pas le "PowerPoint.Application" qui suit (ligne 7)...

Bon, je repars dans mon code...
Expert Programmation

Pour le code moche, oublions, il est trop moche.

Le premier cadre est une procédure générique, on n'y remplace rien par rien, on ne touche pas.

Le second cadre donne des exemples de l'utilisation de cette procédure.

Donc, il faut copier
  1. Public Sub AddReference(class As String, file As String)
  2. ..
dans le code de ThisWorkbook, comme ça, pas besoin d'y modifier quoi que ce soit.

Là où on en a besoin, on l'appelle comme dans les exemples AddReferenceToPowerPoint.

Donc :
  1. Private Sub CommandButton1_Click()
  2. AddReference "PowerPoint.Application", "MSPPT*.OLB"
  3. ..
  4. End Sub


(J'ai corrigé les deux ou trois erreurs de mon code précédent :whistle:  )


Comme c'est un truc qu'on n'a besoin de faire qu'une seule fois, je te conseille plutôt de ne pas le mettre dans CommandButton1_Click de ta feuille, mais plutôt dans le Workbook_Open de ThisWorkbook:
  1. Private Sub Workbook_Open()
  2. AddReference "PowerPoint.Application", "MSPPT*.OLB"
  3. End Sub

De deux chose l'une...

Avec Office 2000, quand la librairie est deja charge... le code ne reconnait pas que cette derniere est chargee et renvoie donc une erreur comme quoi il ne peut pas la recharger (normale me direz vous, mais genant quand meme lol)...

Avec 2003... excel me renvoie un probleme de securite et je n'arrive pas a baisser le niveau de secu d'Office sur l'ordinateur en question. Pas que je ne sache pas comment faire : Tools -> macro -> securite... l'option n'est juste pas sauvegarde :S

Merci neanmoins pour le dernier message qui m'a permis de comprendre beaucoup mieux ce qui se passe lol ;) 

Je continue evidemment mes recherches...

Bonjour a tous,

J'ai regle mon soucis sous Office 2000.
Pour info, la boucle conditionnel if verifiant la presence ou non de la librairie voulu ne fonctionnait pas car l'adresse recherchait (dans mon cas) se terminait par MSPPT9.OLB alors que l'adresse exacte se termine par msppt9.olb. Apparement, par defaut, la comparaison de texte sous office est case-sensitive. La solution est assez simple, une ligne de code a inserer avant tout eventuel sub :

  1. Option compare Text


Il s'agit d'une declaration VBA basique...

Mon probleme est maintenant regle,
Merci Zeb pour ta precieuse aide !!
Lassé par la pub ? Créez un compte