Mise à jour de données sur Excel depuis Powerpoint

Lougral

XLDnaute Nouveau
Bonjour à tous,
Je travaille sur un diaporama PowerPoint qui est un Qcm.
Sur la dernière diapo, une macro est exécutée. Son but est d'aller écrire sur Excel dans un fichier existant.
La macro fonctionne comme je le désire tant qu'Excel n'est pas ouvert, mais si elle est executée alors qu'excel est déjà ouvert, rien n'est écrit sur le fichier Excel.
Il n'y a aucun plantage, la macro va jusqu'au bout mais à à partir de la ligne indiquée ('*****PROBLÈME A PARTIR D'ICI***) sur le code joint, il ne se passe rien sur Excel.
Merci de votre aide
Francis
Code:
Sub Fin2()
Dim XlApp As Excel.Application 'Déclaration de la variable qui fera référence à Excel
Dim XlClasseur As Excel.Workbook 'Déclaration de la variable qui fera référence au classeur
 
Dim ExcelOuvert As Boolean, ClasseurOuvert As Boolean
ExcelOuvert = False
ClasseurOuvert = False
Total = 3
Question = 3
Fichier = "Titi"
'La boîte de dialogue
x = MsgBox("Vous avez répondu correctement à " & Total & " questions sur " & Question - 1 & "." _
& Chr(13) & "Vous avez donc " & Int(Total / (Question - 1) * 100) & "% des points." _
& Chr(13) & "Cliquez sur le bouton OK", , "Fin du questionnaire")
Fichier = Nom & ".txt"
 
'*******Test Excel déjà ouvert
On Error Resume Next
    Set XlApp = GetObject(, "Excel.Application")
 
    If XlApp Is Nothing Then
        Set XlApp = CreateObject("Excel.Application")
        Set XlClasseur = XlApp.Workbooks.Open("C:\Temp\RésultatsQCM.xlsx")
        ExcelOuvert = False
    Else
'******Si Excel ouvert test si classeur ouvert
        For i = 1 To XlApp.Workbooks.Count
            If XlApp.Workbooks(i).Name = "RésultatsQCM.xlsx" Then
                ClasseurOuvert = True
                Exit For
            End If
        Next i
        If ClasseurOuvert = True Then
            Workbooks("RésultatsQCM.xls").Activate
            'MsgBox "resultat ouvert"
            ExcelOuvert = True
        Else
            Set XlClasseur = XlApp.Workbooks.Open("C:\Temp\RésultatsQCM.xlsx")
            ExcelOuvert = True
 
        End If
 
    End If
 
'****** Travail sur excel
XlApp.Visible = True
'xcl.Parent.Windows(1).Visible = True
XlClasseur.Worksheets(1).Select
 
'**************PROBLEME A PARTIR D'ICI********
'Si excel est ouvert Rien n'est écrit dans Excel
 
 
'Recherche de la cellule contenant moyenne
Cells.Find(What:="moyenne").Select
'Insertion d'une colonne pour introduire les résultats
Selection.EntireColumn.Insert
ActiveCell.Value = Nom
ActiveCell.Offset(1, 0).Range("A1").Select
'Introduction des données dans la feuille de calcul
For i = 1 To Question - 1
    ActiveCell.Value = Points(i)
    ActiveCell.Offset(1, 0).Range("A1").Select
Next i
XlClasseur.Save 'Enregistrement du fichier Excel
XlClasseur.Close
'Fermeture d'Excel s'il n'était pas ouvert
If ExcelOuvert = False Then XlApp.Quit
Set XlApp = Nothing
 
'Deuxième sauvegarde des résultats dans un fichier texte
'portant comme nom celui de la personne qui a répondu au questionnaire
Open Fichier For Output Shared As #1
Write #1, Nom
For i = 1 To Question - 1
Write #1, Points(i)
Next i
Close #1
 
End Sub
 

Lougral

XLDnaute Nouveau
Re : Mise à jour de données sur Excel depuis Powerpoint

C'est bien ce que j'avais fait, mais je n'ai pas de plantage, la macro va jusqu'au bout, mais n'écrit rien sur le fichier Excel si Excel est lancé. Je pense que j'ai un problème avec l'instruction GetObject(), mais???
Cordialement
 

Lougral

XLDnaute Nouveau
Re : Mise à jour de données sur Excel depuis Powerpoint

Merci pour tes réponses. J'ai effectivement essayé en pas à pas. Je pense qu'en utilisant un getobject, on créer peut être une deuxième instance d'Excel et que mon problème se situe à ce niveau la.
 

tototiti2008

XLDnaute Barbatruc
Re : Mise à jour de données sur Excel depuis Powerpoint

Re,

Non, sur le principe, GetObject fait bien référence à une instance Excel existante. Le problème vient peut-être du cas où tu as plusieurs instances Excel d'ouvertes et ton fichier est déjà ouvert dans une autre de ces instances, mais ça m'étonne qu'il ne plante pas (ou parle de lecture seule) dans ce cas
 

tototiti2008

XLDnaute Barbatruc
Re : Mise à jour de données sur Excel depuis Powerpoint

Re,

Sinon,sur la partie là

Code:
'Recherche de la cellule contenant moyenne
Cells.Find(What:="moyenne").Select
'Insertion d'une colonne pour introduire les résultats
Selection.EntireColumn.Insert
ActiveCell.Value = Nom
ActiveCell.Offset(1, 0).Range("A1").Select
'Introduction des données dans la feuille de calcul
For i = 1 To Question - 1
    ActiveCell.Value = Points(i)
    ActiveCell.Offset(1, 0).Range("A1").Select
Next i

je m'arrangerais pour ajouter des xlClasseur ou xlApp partout
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Mise à jour de données sur Excel depuis Powerpoint

du type

Code:
with xlapp
'Recherche de la cellule contenant moyenne
xlclasseur.activesheet.Cells.Find(What:="moyenne").Select
'Insertion d'une colonne pour introduire les résultats
.Selection.EntireColumn.Insert
.ActiveCell.Value = Nom
.ActiveCell.Offset(1, 0).Range("A1").Select
'Introduction des données dans la feuille de calcul
For i = 1 To Question - 1
    .ActiveCell.Value = Points(i)
    .ActiveCell.Offset(1, 0).Range("A1").Select
Next i
End with
 

tototiti2008

XLDnaute Barbatruc
Re : Mise à jour de données sur Excel depuis Powerpoint

Bonjour Lougral,

Je ne comprend pas bien

Je viens d'essayer ça sur Excel, l'objet est bien mon Excel ouvert

Code:
Sub test()
Dim xlapp As Object
Set xlapp = GetObject(, "Excel.Application")
    xlapp.Visible = True
End Sub

Je ne vois que le test pour comprendre

Ouvre Excel et ton classeur RésultatsQCM
Va dans ton powerpoint
lance le code en pas à pas
Après le getObject, met un espion sur xlApp
vérifie si xlApp.Activeworkbook est bien ton classeur
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Mise à jour de données sur Excel depuis Powerpoint

Re,

Essaye comme ça :

Code:
Sub Fin2()
Dim XlApp As Excel.Application 'Déclaration de la variable qui fera référence à Excel
Dim XlClasseur As Excel.Workbook 'Déclaration de la variable qui fera référence au classeur
 
Dim ExcelOuvert As Boolean, ClasseurOuvert As Boolean
ExcelOuvert = False
ClasseurOuvert = False
Total = 3
Question = 3
Fichier = "Titi"
'La boîte de dialogue
x = MsgBox("Vous avez répondu correctement à " & Total & " questions sur " & Question - 1 & "." _
& Chr(13) & "Vous avez donc " & Int(Total / (Question - 1) * 100) & "% des points." _
& Chr(13) & "Cliquez sur le bouton OK", , "Fin du questionnaire")
Fichier = Nom & ".txt"
 
'*******Test Excel déjà ouvert
On Error Resume Next
    Set XlApp = GetObject(, "Excel.Application")
 
    If XlApp Is Nothing Then
        Set XlApp = CreateObject("Excel.Application")
        Set XlClasseur = XlApp.Workbooks.Open("C:\Temp\RésultatsQCM.xlsx")
        ExcelOuvert = False
    Else
'******Si Excel ouvert test si classeur ouvert
        For i = 1 To XlApp.Workbooks.Count
            If XlApp.Workbooks(i).Name = "RésultatsQCM.xlsx" Then
                ClasseurOuvert = True
                Exit For
            End If
        Next i
        If ClasseurOuvert = True Then
            Set XlClasseur = XlApp.Workbooks("RésultatsQCM.xlsx")
            'MsgBox "resultat ouvert"
            ExcelOuvert = True
        Else
            Set XlClasseur = XlApp.Workbooks.Open("C:\Temp\RésultatsQCM.xlsx")
            ExcelOuvert = True
 
        End If
 
    End If
 
'****** Travail sur excel
XlApp.Visible = True
'xcl.Parent.Windows(1).Visible = True
XlClasseur.Activate
XlClasseur.Worksheets(1).Select
 
'**************PROBLEME A PARTIR D'ICI********
'Si excel est ouvert Rien n'est écrit dans Excel
 
 
'Recherche de la cellule contenant moyenne
XlClasseur.ActiveSheet.Cells.Find(What:="moyenne").Select
'Insertion d'une colonne pour introduire les résultats
XlApp.Selection.EntireColumn.Insert
XlApp.ActiveCell.Value = Nom
XlApp.ActiveCell.Offset(1, 0).Range("A1").Select
'Introduction des données dans la feuille de calcul
For i = 1 To Question - 1
    XlApp.ActiveCell.Value = Points(i)
    XlApp.ActiveCell.Offset(1, 0).Range("A1").Select
Next i
XlClasseur.Save 'Enregistrement du fichier Excel
XlClasseur.Close
'Fermeture d'Excel s'il n'était pas ouvert
If ExcelOuvert = False Then XlApp.Quit
Set XlApp = Nothing
 
'Deuxième sauvegarde des résultats dans un fichier texte
'portant comme nom celui de la personne qui a répondu au questionnaire
Open Fichier For Output Shared As #1
Write #1, Nom
For i = 1 To Question - 1
Write #1, Points(i)
Next i
Close #1
 
End Sub

Pour toutes tes actions sur Excel, il te faut un xlApp ou un xlClasseur (ou un With pour simplifier)
 
Dernière édition:

Lougral

XLDnaute Nouveau
Re : Mise à jour de données sur Excel depuis Powerpoint

J'ai bien un seul Excel apparent. J'ai aussi le classeur ResultatQCM est est présent, mais la macro n'agit pas sur le classeur. Mais dans le gestionnaire de tâches j'ai deux instances d'excel qui sont lancées.
J'ai aussi essayé de mettre un point d'arrêt ou un Stop, mais étant dans un diaporama, lorsque tu ressort du diaporama, j'ai l'impression que cela termine la macro malgré le point d'arrêt, donc je suis obligé d'utiliser F8 depuis le VB pour faire un pas pas.
 

Discussions similaires

Réponses
4
Affichages
418

Statistiques des forums

Discussions
314 628
Messages
2 111 333
Membres
111 103
dernier inscrit
Maxime@mar