Powerpoint - Formulaire sur présentation interactive (résolu)

Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 07/10/2021 à 14:12


Bonjour,

je souhaite insérer un formulaire sur une présentation Powerpoint diffusé sur une borne interactive.
Etant plutôt novice je rencontre plusieurs problèmes.

Tout d'abord, je souhaiterai savoir comment et où sont enregistrés les avis saisies par les utilisateurs.
Ma présentation étant sur une borne en libre service, je souhaiterai qu'une fois le formulaire rempli sur une slide du diaporama, une mention indique que l'avis a été bien pris en compte et que le diaporama retourne à la page d'accueil et remette à zéro le formulaire afin que les utilisateurs suivant puissent également remplir le formulaire.

Merci d'avance, je reste à votre disposition pour tout renseignement complémentaire.

Cédric


Répondre à ce message

Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 07/10/2021 à 15:36 Modifié par Bipbipcoyote


Bonjour,
La solution sans doute
en cumul avec ce code
mais il faut gérer les événements et détecter le passage à la diapositive suivante pour lancer la macro envoi ou alors il faut mettre un bouton pour provoquer l'envoi
https://arkham46.developpez.com/articles/powerpoint/events/#LVIII
Je vais tenter de faire ce truc et je posterai le fichier sur ci-joint
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 07/10/2021 à 18:17 Modifié par Bipbipcoyote


Bonjour,
En cumulant les liens ci-dessus, voici ma proposition
Pour voir le code faire ALT+F11
Télécharger le fichier
utiisez Firefox pour le télécharger parce que Chrome refuse de le faire, il considère les fichiers avec macro comme des virus

J'ai modifié le code de Marina pour envoyer le fichier complet (faire quand même attention à sa taille, compresser les images) , S'il est trop lourd, il faut reprendre le code de Marina qui efface les diapositives qui fournissent des infos générales et qui ne font pas partie du "formulaire"

L'envoi fonctionne avec Outlook pour bureau installé sur l'ordinateur et configuré avec l'adresse email inscrite dans le code, il faut personnaliser l'adresse qui recevra le courrier ainsi que le texte du corps du message
On ne sait pas quel est le logiciel de messagerie installé sur la borne. Il faudra découvrir sans doute une code spécifique si ce n'est pas Outlook pour bureau

Le code pour effacer le contenu des contrôles textbox combobox checkbox est personnalisé pour chaque diapositive, on pourrait pousser le bouchon à boucler sur chaque diapositive, à détecter le type de contrôle etc mais bon, en principe, il ne doit pas y avoir trop de questions par slide, ni trop de slides par présentation...
Il faut donc personnaliser ce code suivant ton diaporama, mais le code que j'ai mis est simple à comprendre

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 08/10/2021 à 10:01


Bonjour,

merci pour votre aide.
Je vais essayer tout ça tranquillement avant de revenir vers vous.

Merci encore et bon week-end.
Cédric

Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 20/10/2021 à 09:46


Bonjour,
tout d'abord, merci, tout fonctionne parfaitement.
Cependant, je souhaiterai récupérer les informations saisies dans le formulaire dans un fichier excel et non pas une copie de la diapositive.
Il n'y a pas beaucoup de données à récupérer, environ 4 à 6 questions.
Je reste disponible pour tout renseignement complémentaire.
Cédric



Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 20/10/2021 à 17:57


Bonjour,
Tu peux voir ma solution sur mon site J'y ai mis les explications et les fichiers d'exemple en bas de page... Je n'ai pas fait toutes les données mais en cumulant ce que j'ai déjà expliqué et que j'ai repris sur ce lien
tu peux personnaliser le type de données à récupérer dans
ActivePresentation.Slides(1).Shapes("TextBox1").OLEFormat.Object.Text
regarde la procédure effacer_contenu_formulaire() où on parle des shapes Combobox, Checkbox etc...
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 22/10/2021 à 11:00


Bonjour,

je n'arrive pas à envoyer le fichier excel par mail, surement à cause de mon niveau en VB qui est proche du nul! [;(]

Merci d'avance pour ton aide.
Bonne journée et bon week-end
Cédric

Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 22/10/2021 à 16:17 Modifié par Bipbipcoyote


Bonjour,
Tu dois personnaliser les lignes dans la procédure envoi en changeant le nom et l'extension du fichier
ActivePresentation.SaveCopyAs chemin & "\formulaire.xlsm"
unfichier = chemin & "formulaire.xlsm"

Mais je ne comprends pas pourquoi tu veux l'envoyer par email car ce fichier est censé recueillir les informations entrées par différents usagers/clients ou que sais-je ?

Ta borne : de quoi est-elle constituée ? n'es-tu pas dans un environnement windows pro ? car tu peux alors, utiliser le bureau à distance

Ou si la borne et ton pc font partie d'un même réseau, tu peux connecter le dossier en tant que Lecteur Comment faire en vidéo ! Si tu n'en as pas les droits , demande à ton administrateur

Je ne connais pas non plus ton organisation. es-tu en entreprise et donc dans un domaine ou dans groupe de travail Différences en vidéo

Les dossiers partagés tu connais dans un groupe de travail[-comment faire

ou plus facile, à tester (car je n'ai pas de borne et je ne peux donc pas tester mais je suppose que cela peut fonctionner
placer le diaporama et le fichier Excel dans le dossier OneDrive et sur la borne et sur ton ordinateur, tu installes l'application de synchronisation avec le même compte. il te suffit alors d'ouvrir le fichier, plus besoin d'email
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 03/11/2021 à 11:48


Bonjour,

tout d'abord, désolé pour le temps de réponse mais congés oblige! [:D]

Pour répondre à tes questions, je comprends totalement ta réflexion mais je souhaiterais quand même pouvoir envoyé par mail le fichier excel afin d'une part de simplifier la tache et d'autre part de pouvoir changer à ma guise les personnes qui recevront le fichier.

J'ai essayé de cumuler tes solutions mais je ne m'en sors pas. [;(]
En effet, j'arrive à envoyer un fichier xlsx par mail mais il ne veut pas s'ouvrir (format de fichier non valide). J'ai l'impression que je me suis emmêlé les pinceaux entre les différentes solutions que tu m'as apporté.

Comme je n'arrive pas à insérer en pièce jointe mon fichier PowerPoint, je te mets ci-dessous les différents codes liés à ma présentation en espérant que tu pourras trouver la solution.

1 - Code sur slide:
Private Sub ComboBox1_DropButtonClick()
If ComboBox1.ListCount = 0 Then
With ComboBox1
.AddItem "Enfants"
.AddItem "Ados"
.AddItem "Adultes"
End With
End If
End Sub

Private Sub CommandButton1_Click()
Call envoi
SlideShowWindows(1).View.GotoSlide (1)
End Sub

Private Sub cmd_CopierVersExcel_Click()
Call Ouvrir
End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox2_Change()

End Sub

2 - Code sur module1
Sub envoi()
Dim Chemin As String, x As Integer, nb As Integer
Dim diapo64 As String
Dim ol As Object, monItem As Object
Set ol = CreateObject("outlook.application")
Set monItem = ol.CreateItem(0)
Chemin = ActivePresentation.Path & "\"
nb = ActivePresentation.Slides.Count
ActivePresentation.SaveCopyAs Chemin & "\Sauvegarde.xlsx"
diapo1 = Chemin & "Sauvegarde.xlsx"
Presentations.Open (diapo1)
For x = nb To 1 Step -1
If x <> 1 Then ActivePresentation.Slides(x).Delete
Next
Presentations(diapo1).Save
With monItem
.To = "adresse@mail.fr"
.Subject = "Boite à idées"
.body = "Bonjour" & Chr(13) & Chr(13) & "Un avis a été déposé sur votre borne"
.Attachments.Add diapo1
.Send
End With
Set ol = Nothing
Presentations(diapo1).Close
MsgBox "Merci pour votre participation"
Kill diapo1
Call effacer
End Sub

Sub effacer()
For i = 1 To 2
ActivePresentation.Slides(1).Shapes("TextBox" & i).OLEFormat.Object.Text = ""
Next
ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Text = ""
End Sub

3 - Code sur Module2
Sub envoi()
Dim Chemin As String, x As Integer, nb As Integer
Dim diapo64 As String
Dim ol As Object, monItem As Object
Set ol = CreateObject("outlook.application")
Set monItem = ol.CreateItem(0)
Chemin = ActivePresentation.Path & "\"
nb = ActivePresentation.Slides.Count
ActivePresentation.SaveCopyAs Chemin & "\Sauvegarde.xlsx"
diapo1 = Chemin & "Sauvegarde.xlsx"
Presentations.Open (diapo1)
For x = nb To 1 Step -1
If x <> 1 Then ActivePresentation.Slides(x).Delete
Next
Presentations(diapo1).Save
With monItem
.To = "adresse@mail.fr"
.Subject = "Boite à idées"
.body = "Bonjour" & Chr(13) & Chr(13) & "Un avis a été déposé sur votre borne"
.Attachments.Add diapo1
.Send
End With
Set ol = Nothing
Presentations(diapo1).Close
MsgBox "Merci pour votre participation"
Kill diapo1
Call effacer
End Sub

Sub effacer()
For i = 1 To 2
ActivePresentation.Slides(1).Shapes("TextBox" & i).OLEFormat.Object.Text = ""
Next
ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Text = ""
End Sub



Merci encore pour ta précieuse aide.

Bonne journée



Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 03/11/2021 à 11:53


Oups,

je viens de m'apercevoir que j'ai copié le mauvais code pour le module 2.
Tu trouveras donc ci-dessous le code de mon module 2.

Sub Ouvrir()
Dim xlApp As Object
Dim Chemin As String
Dim Document As Variant
Dim Compteur As Long

'on initialise le compteur = nombre de lignes remplies
Compteur = 0

'endroit où se trouve les fichiers
Chemin = ActivePresentation.Path

'on lance Excel
Set xlApp = CreateObject("excel.application")
'on masque l'application
xlApp.Visible = False
Document = Dir(Chemin & "\Sauvegarde.xlsx")
'on masque ce qui se passe dans excel
xlApp.EnableEvents = False
'on charge le classeur
xlApp.Workbooks.Open FileName:=Chemin & "\" & Document, UpdateLinks:=True, ReadOnly:=False
'on compte le nombre de lignes déjà remplies
Compteur = xlApp.ActiveSheet.UsedRange.Rows.Count
'on copie le contenu des textbox dans les cellules
xlApp.Range("A" & Compteur + 1) = ActivePresentation.Slides(1).Shapes("TextBox1").OLEFormat.Object.Text
xlApp.Range("B" & Compteur + 1) = ActivePresentation.Slides(1).Shapes("TextBox2").OLEFormat.Object.Text
xlApp.Range("C" & Compteur + 1) = ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Text
xlApp.EnableEvents = True
'on sauve le fichier excel
xlApp.Workbooks("Sauvegarde.xlsx").Save
'on quitte Excel
xlApp.Quit

'On revient dans la présentation
DoEvents
CommandBars.ExecuteMso ("SlideReset")
DoEvents
ActivePresentation.SlideShowWindow.Activate

'Effacement des données saisies précédemment sur la dia
For i = 1 To 2
ActivePresentation.Slides(1).Shapes("TextBox" & i).OLEFormat.Object.Text = ""
Next
ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Text = ""
Next
'On revient sur la première dia
SlideShowWindows(1).View.GotoSlide (1)

End Sub



Merci encore!!!


Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 03/11/2021 à 15:44


Bonjour,
tu peux placer ton fichier powerpoint sur le site cjoint et tu colles l'url qu'il fournit ici sur mémoclic, je peux alors le récupérer...si tu veux en garder la confidentialité, tu peux le mettre dans un zip avec mot de passe que tu me communique en message privé, en cliquant sur mon pseudo sur cette réponse... En attendant, je vais tenter de recréer ton powerpoint en m'inspirant de ton code
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 03/11/2021 à 15:49


Bonjour,

merci pour ta réactivité.

Voici le lien:
https://www.cjoint.com/c/KKdoQCkRO0u




Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 03/11/2021 à 15:54


Petite précision sur mon diapo, je ne t'ai envoyé que la slide où le questionnaire apparait car il est composé de 64 slides.

Je reste disponible pour tout renseignement complémentaire.

Merci encore.


Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 03/11/2021 à 16:32 Modifié par Bipbipcoyote


Bonjour,
Sans rien tester plus avant, je vois que sur cette diapo tu n'as qu'un seul bouton de commande qui se nomme CommandButton1 et je ne vois pas de bouton qui s'appelle cmd_CopierVersExcel donc, il y a une procédure qui n'est pas exécutée, tu dois grouper les 2 actions, comme ceci

Private Sub CommandButton1_Click()
Call Ouvrir
Call envoi
'SlideShowWindows(1).View.GotoSlide (1) 'ceci pas utile puisque tu le demandes déjà dans la procédure envoi
End Sub

et n'oublie pas que tu dois personnaliser adresse@mail.fr sinon, Outlook tente d'envoyer le fichier sur cette adresse mais tu vas recevoir un message d'erreur de postmaster car cette adresse n'existe pas, ce n'est qu'un exemple...

Le VBA s'exécute en mode séquentiel donc une ligne après l'autre, il faut suivre son cheminement et lorsque l'on subdivise les lignes de commandes, c'est pour y voir plus clair, lorsque l'on reprend son projet quelque temps plus tard où on a oublié comment on l'a pensé à l'époque, c'est pour cela qu'il faut aussi bien le commenter
Et voici comment débogger VBA sur le lien, c'est dans Excel mais c'est pareil pour les autres applications dont PowerPoint


Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 03/11/2021 à 17:08


Re,

je viens de grouper les actions en suivant ta procédure, mais maintenant j'ai une erreur sur le module2 qui me dit "erreur de compilation - Next sans For" ???



Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 03/11/2021 à 18:19 Modifié par Bipbipcoyote


Bonjour,
revoici Ton fichier modifié

oui il y avait un Next en trop, mais pas seulement, car on avait aussi une instruction Kill or ici on ne doit pas effacer le fichier Excel et aussi un petit souci pour trouver le chemin du powerpoint et du fichier excel...
Donc n'oublie pas les conditions
- les fichiers powerpoint et excel sont dans le même dossier
- l'envoi se réalise via Outlook pour bureau
- personnalise le destinataire de l'email et son contenu (le texte)

Voilà je pense que ça fonctionneran en tout cas j'ai fait l'essai et plus de problème... sinon, reviens avec le souci

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 04/11/2021 à 11:14


Bonjour Bipbip,
l'envoi du fichier excel fonctionne, cependant, il ne récupère que les données inscrites dans les textbox mais pas les données de la liste déroulante.

Une autre question concernant les textbox, quand on écrit dedans, le texte saisie ne va pas à ligne et du coup si on écrit quelque chose de long on ne voit plus le début de la phrase. Y-a-t'il une solution pour que le texte saisie aille à la ligne automatiquement?
Je ne sais pas si mon explication est assez claire??? [8(]

Merci encore pour ton aide.
Bonne journée



Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 04/11/2021 à 14:14


Re,
une autre question, est-il possible lors de la récupération des données d'ajouter la date du jour automatiquement dans le fichier excel pour chaque formulaire rempli?


Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 04/11/2021 à 15:20 Modifié par Bipbipcoyote


Bonjour,
Argh ! la folie du copier-coller....
il faut modifier la procédure ouvrir comme ceci

'on copie le contenu des textbox dans les cellules
xlApp.Range("A" & Compteur + 1) = ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Text
xlApp.Range("B" & Compteur + 1) = ActivePresentation.Slides(1).Shapes("TextBox1").OLEFormat.Object.Text
xlApp.Range("C" & Compteur + 1) = ActivePresentation.Slides(1).Shapes("TextBox2").OLEFormat.Object.Text
xlApp.Range("D" & Compteur + 1) = Now() 'ceci inscrit date et heure

Et pour écrire sur plusieurs lignes avec retour automatique à la ligne, il faut simplement éditer les propriétés des textbox et de retrouver "multiline" et de passer de False à True

J'ai effacé le zip sur cjoint. voici la nouvelle version

Et j'ai aussi remarqué une nouvelle contrainte, il faut que le fichier Excel reste fermé lors de l'utilisation du PowerPoint sinon, il y a arrêt de la procédure d'envoi et Excel demande d'en faire une copie etc...

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 05/11/2021 à 10:34


Bonjour Bipbip,

c'est parfait, tout fonctionne correctement.
Merci beaucoup pour ton aide.
Je vais continuer à bosser sur ma présentation et peut-être à bientôt si je suis coincé. [;)]
Bonne journée

Cédric C
15 contributions
Membre depuis le 07/10/2021
Envoyé le 10/11/2021 à 17:17


Bonjour Bipbip,

et oui, c'est encore moi [:D]
J'ai un autre petit souci, j'ai un bug quand je clique sur enregistrer et envoyer
pour envoyer mon formulaire.
Quand je visualise mon powerpoint (pptm) cela fonctionne correctement et envoi le fichier excel. Par contre, quand j'enregistre mon diaporama (ppsm) afin d'avoir directement la présentation, j'ai cette erreur:
"la méthode 'ExecuteMso' de l'objet '_CommandBars' a échoué"
Quand j'active le débogeur il me surligne cette ligne de commande:
"CommandBars.ExecuteMso ("SlideReset")"

Je te remercie par avance de ton aide.
Bonne fin de journée

Bipbipcoyote Bipbipcoyote
3 542 contributions
Membre depuis le 06/03/2001
Envoyé le 10/11/2021 à 23:42 Modifié par Bipbipcoyote


Bonjour,
c'est l'extension qui provoque cela, pourquoi ne pas rester en pptm
maintenant, tu peux mettre cette ligne en remarque (il faut simplement placer une apostrophe devant la ligne, elle prend une couleur verte et n'est pas exécutée) et tester. Je l'ai fait et cela fonctionne apparemment .
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions

Participer à cette discussion

« Retour sur la liste des messages de ce forum