Macro de recherche et de navigation dans Powerpoint

Mister_Fred Messages postés 4 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 25 janvier 2011 - 17 nov. 2010 à 17:19
Mister_Fred Messages postés 4 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 25 janvier 2011 - 17 nov. 2010 à 17:47
Salut a tous,

Je suis actuellement en stage chez un fabricant automobile et ils souhaitent que je realise une base de donnees sous PowerPoint (plus convivial lors de l'utilisation). Le fichier est organise comme suit :
Niveau general - Tableau recapitulatif avec tous les modeles (un modele comprend plusieurs pieces).
Premier niveau de details - Photo d'un modele avec toutes les pieces.
Niveau le plus detaille - Photo et caracteristiques d'une piece.
Lorsque j'ai propose le fichier a l'equipe, ils m'ont demande de developper une macro pour effectuer une recherche de piece a travers la base de donnees. Or, plusieurs slides peuvent correspondre a une seule reference de piece. Ils veulent donc une fenetre de navigation (Slide precedent, suivant, detail du slide, i.e. qu'on ferme la fenetre et on reste sur la slide, et un bouton end pour retourner au tableau principal).
Avec toutes ces donnees, j'ai choisi de faire une macro pour la recherche et un userform pour la navigation. Mais je suis confronte a plusieurs problemes :
- Probleme 1 : J'ai beau mettre un bouton de commande dans mon ppt, en mode presentation je ne peux pas ouvrir ma macro. J'ai pourtant bien essaye de contourner le probleme en utilisant la methode suivante (http://windows.fyicenter.com/898_Tools_PowerPoint_Creating_Command_Buttons_to_Run_Macros.html) mais rien n'y fait...
- Probleme 2 : Ma fenetre de navigation ne fonctionne pas normalement... En effet, que je clique sur Previous, Next, See in details ou End, on va toujours au slide suivant. Heureusement, ca conserve les criteres de selection... Meme en cliauqnt sur la croix de la fenetre, le userform ne se ferme pas mais on atteint le slide suivant...

Vous trouverez ci-dessous le code, dans un premier temps de la macro et ensuite de l'userform (appele Form). Mais avant ca, je voulais vous remercier d'avance !!! =)

Option Compare Text

Public j As Integer
Public t(500) As Integer
Public i As Integer

Public Sub Macro()
' This macro allows people to search Part No.

i = 0


réponse = Slide1.TextBox1.Value
For Each diapo In Application.ActivePresentation.Slides
For Each forme In diapo.Shapes
If forme.HasTextFrame Then
Set txtRng = forme.TextFrame.TextRange
Set trouvé = txtRng.Find(FindWhat:=réponse)


Do While Not (trouvé Is Nothing) 'We fill the table with slide number of slides which match with the search.
'ActivePresentation.Slides(1).SlideShowTransition.Hidden = True
'SlideShowWindows(1).View.GotoSlide diapo.SlideNumber
t(i) = diapo.SlideNumber
j = i 'We save the last table index to use it for the userform for navigation.
i = i + 1
Exit Do


While (trouvé Is Nothing) And i < 500
t(i) = 0 'We fill in the table with 0 to make comparison in the rest of the program.
i = i + 1
Wend

Loop
End If
Next
Next

i = 0 'Reset of the variable.
While t(i) <> 0 And i < 500
'Application.SlideShowWindows(1).View.GotoSlide t(i)
With Application.ActiveWindow
.ViewType = ppViewSlide
.View.GotoSlide t(i)
End With

Form.Show
'Form.Hide
'MsgBox "Next slide with this part No." 'Insert the userform for navigation.
i = i + 1
Wend


End Sub


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
End If
End Sub


Private Sub theend_Click()
'ActivePresentation.Slides(3).Select
'With Application.ActiveWindow
'.ViewType = ppViewSlide
'.View.GotoSlide 3
'End With
ActivePresentation.Slides(3).Select
Me.Hide
End Sub

Private Sub theprevious_Click()
If i > 0 And j < 500 And t(i) <> 0 Then
With Application.ActiveWindow
.ViewType = ppViewSlide
.View.GotoSlide t(i - 1)
End With
Form.Hide
Unload Me
Else
With Application.ActiveWindow
.ViewType = ppViewSlide
.View.GotoSlide 3
End With
Form.Hide
Unload Me
End If
'If i > 0 And t(i) <> 0 Then
'SlideShowWindows(1).View.GotoSlide t(i - 1)
'With Application.ActiveWindow
'.ViewType = ppViewSlide
'.View.GotoSlide t(i - 1)
'End With
'Else
'ActivePresentation.Slides(3).Select
'End If
'Form.Hide
End Sub

Private Sub thenext_Click()
If i < j And j < 500 Then
With Application.ActiveWindow
.ViewType = ppViewSlide
.View.GotoSlide t(i + 1)
End With
Form.Hide
Unload Me
Else
Form.Hide
Unload Me
MsgBox "It's the last slide for this part No."
'With Application.ActiveWindow
'.ViewType = ppViewSlide
'.View.GotoSlide 3
'End With

End If
'If i < j And t(i) <> 0 Then
'SlideShowWindows(1).View.GotoSlide t(i + 1)
'With Application.ActiveWindow
'.ViewType = ppViewSlide
'.View.GotoSlide t(i + 1)
'End With
'Else
'ActivePresentation.Slides(3).Select
'End If
'Form.Hide
End Sub

Sub details_Click()
With Application.ActiveWindow
.ViewType = ppViewSlide
.View.GotoSlide t(i)
End With
Form.Hide
Unload Me
End Sub


Et l'arborescence est la suivante :

1 réponse

Mister_Fred Messages postés 4 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 25 janvier 2011
17 nov. 2010 à 17:47
En fait, pour le probleme 1, c'est partiellement regle... En fait, il ne faut pas mettre de bouton de commande mais juste une forme ou un texte que l'on selectionne. Ensuite, on utilise l'onglet Action et run Macro ou on selectionne la macro a lancer. Ceci dit, elle marche pas top puisqu'elle ne se lance pas.
0
Rejoignez-nous