re bonjour ,
as tu mis
.RefreshPeriod = 0
isabelle
altarboy a écrit :
> Salut Gilbert,
> Oui, j'ai mis des doevents avant, malheureusement ça apporte plus de
> problémes que ça en resoud car ADO etant asynchrone les methodes se
> melangent et ça crée un gros crash d'excel aussi.
> je crois que ma seule solution est de commencer a gérer les ADO Event s
> mais avec VBA je ne sais pas si c'est possible. Une autre solution
> serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> encore comment faire car par defaut les objects Connection et
> Recordset de ADO sont asynchrones.
> encore une poignée de cheveux en moins...
> Salutations
> On 28 mar, 17:38, "Gilbert" wrote:
>> Bonjour
>> As-tu essayé de rajouter un Doevents avant les
>> Set cnnConn = Nothing
>> Set rstRecordset = Nothing
>> --
>> Cordialement,
>> Gilbert
>> "altarboy" a écrit dans le message denews:746
>> Salut
>> Effectivement, ça a l'air plus logique, malheureusement ça ne chan ge
>> rien. ça crash toujours quand je set les variables = Nothing.
>> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
>> On 28 mar, 15:45, isabelle wrote:
>>> bonjour,
>>> oups desolé , la correction est :
>>> While état1 <> adStateClose
>>> état1 = rstRecordset.State
>>> Wend
>>> While état2 <> adStateClose
>>> état2 = cnnConn.State
>>> Wend
>>> isabelle
>>> altarboy a écrit :
>>>> si je le mets la :
>>>> ...
>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>> While état1 = adStateClosed
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClosed
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>> ben une fois sur deux ça reste dans la boucle car le state est dej a
>>>> closed
>>>> On 28 mar, 14:49, isabelle wrote:
>>>>> Salut altarboy,
>>>>> juste avant
>>>>> Set cnnConn = Nothing
>>>>> Set rstRecordset = Nothing
>>>>> isabelle
>>>>> altarboy a écrit :
>>>>>> Salut Isabelle,
>>>>>> Je ne vois pas trop ou mettre ces deux boucles.
>>>>>> On 27 mar, 19:17, isabelle wrote:
>>>>>>> bonjour,
>>>>>>> essai en y ajoutant une boucle :
>>>>>>> While état1 = adStateClose
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClose
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>> isabelle
>>>>>>> altarboy a écrit :
>>>>>>>> Petite précision :
>>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
>>>>>>>> problèmes :
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vieu x.
>>>>>>>> Normalement on est pas sensés libérer les variables/objets u ne fois
>>>>>>>> qu'on a plus besoin ?
>>>>>>>> On 27 mar, 17:23, seliana wrote:
>>>>>>>>> Bonjour microsoft.public.fr.excel,
>>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel q uand
>>>>>>>>> exécuté sans interruption alors que s'il est exécuté pa s à pas tout
>>>>>>>>> fonctionne sans problème.
>>>>>>>>> j'ai sur ma feuille :
>>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
>>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
>>>>>>>>> ComboBox1 - objet combobox
>>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et lab el
>> mais
>>>>>>>>> qui ne sont pas encore utilisés
>>>>>>>>> Voici le code en question.
>>>>>>>>> --------------------------------------------
>>>>>>>>> Option Explicit
>>>>>>>>> 'declaration de variables
>>>>>>>>> Dim cnnConn As ADODB.Connection
>>>>>>>>> Dim rstRecordset As ADODB.recordSet
>>>>>>>>> Dim tempQuery As String
>>>>>>>>> Private Sub CommandButton1_Click()
>>>>>>>>> 'definition de variables
>>>>>>>>> Set cnnConn = New ADODB.Connection
>>>>>>>>> Set rstRecordset = New ADODB.recordSet
>>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
>>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
>>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET,
>>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogout ON
>>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
>>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1.va lue
>>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.entr yDate)
>>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Ye ar &
>>>>>>>>> "#));"
>>>>>>>>> 'Vérifie que la connexion est bien fermée
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'Etabli la connection
>>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
>>>>>>>>> cnnConn.Open CAppPathTodB
>>>>>>>>> 'Attente que la connexion soit établie
>>>>>>>>> While (cnnConn.State = adStateConnecting)
>>>>>>>>> DoEvents
>>>>>>>>> Wend
>>>>>>>>> 'vérifie que le recordset est bien fermée
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'ouvre le recordset
>>>>>>>>> rstRecordset.Open tempQuery, cnnConn
>>>>>>>>> 'transpose recordset dans grid
>>>>>>>>> Set VSFlexGrid1.DataSource = rstRecordset
>>>>>>>>> 'si recordset encore ouvert alors le ferme
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'libere objets
>>>>>>>>> Set cnnConn = Nothing
>>>>>>>>> Set rstRecordset = Nothing
>>>>>>>>> End Sub
>>>>>>>>> --------------------------------------------
>>>>>>>>> ainsi que quelques constantes définies dans un module
>>>>>>>>> --------------------------------------------
>>>>>>>>> Public Const AppVersion = "0.2.9"
>>>>>>>>> Public Const AppInDevMode = True
>>>>>>>>> Public Const CAppPathTodB = "U:_devfifomain.mdb"
>>>>>>>>> Public Const CAppConnectionString = "Provider=Microsoft.Jet .OLEDB.
>>>>>>>>> 4.0;"
>>>>>>>>> --------------------------------------------
>>>>>>>>> Si je clique sur CommandButton1 et que j'ai un point d'arret su r le
>>>>>>>>> debut du CommandButton1_Click() et qu'ensuite j'execute pas à pas.
>>>>>>>>> nickel sans problémes les données de la base de données s ont lues
>> et
>>>>>>>>> affichés dans le grid.
>>>>>>>>> mais si je n'ai pas de point d'arret, tout le code est execut é et a
>> la
>>>>>>>>> fin excel crashe (entre "Set rstRecordset = Nothing" et "End Sub"
>>>>>>>>> d'aprés quelques debug.print que j'ai mis)
>>>>>>>>> Quelqu'un saurait pourquoi ?
re bonjour ,
as tu mis
.RefreshPeriod = 0
isabelle
altarboy a écrit :
> Salut Gilbert,
> Oui, j'ai mis des doevents avant, malheureusement ça apporte plus de
> problémes que ça en resoud car ADO etant asynchrone les methodes se
> melangent et ça crée un gros crash d'excel aussi.
> je crois que ma seule solution est de commencer a gérer les ADO Event s
> mais avec VBA je ne sais pas si c'est possible. Une autre solution
> serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> encore comment faire car par defaut les objects Connection et
> Recordset de ADO sont asynchrones.
> encore une poignée de cheveux en moins...
> Salutations
> On 28 mar, 17:38, "Gilbert" <ZZZgilbert...@NOSPAMlaposte.net> wrote:
>> Bonjour
>> As-tu essayé de rajouter un Doevents avant les
>> Set cnnConn = Nothing
>> Set rstRecordset = Nothing
>> --
>> Cordialement,
>> Gilbert
>> "altarboy" <altarbo...@gmail.com> a écrit dans le message denews:746 07e49-31bd-4f9a-b7a2-dbc21c900d9e@f19g2000yqo.googlegroups.com...
>> Salut
>> Effectivement, ça a l'air plus logique, malheureusement ça ne chan ge
>> rien. ça crash toujours quand je set les variables = Nothing.
>> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
>> On 28 mar, 15:45, isabelle <i@v> wrote:
>>> bonjour,
>>> oups desolé , la correction est :
>>> While état1 <> adStateClose
>>> état1 = rstRecordset.State
>>> Wend
>>> While état2 <> adStateClose
>>> état2 = cnnConn.State
>>> Wend
>>> isabelle
>>> altarboy a écrit :
>>>> si je le mets la :
>>>> ...
>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>> While état1 = adStateClosed
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClosed
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>> ben une fois sur deux ça reste dans la boucle car le state est dej a
>>>> closed
>>>> On 28 mar, 14:49, isabelle <i@v> wrote:
>>>>> Salut altarboy,
>>>>> juste avant
>>>>> Set cnnConn = Nothing
>>>>> Set rstRecordset = Nothing
>>>>> isabelle
>>>>> altarboy a écrit :
>>>>>> Salut Isabelle,
>>>>>> Je ne vois pas trop ou mettre ces deux boucles.
>>>>>> On 27 mar, 19:17, isabelle <i@v> wrote:
>>>>>>> bonjour,
>>>>>>> essai en y ajoutant une boucle :
>>>>>>> While état1 = adStateClose
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClose
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>> isabelle
>>>>>>> altarboy a écrit :
>>>>>>>> Petite précision :
>>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
>>>>>>>> problèmes :
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vieu x.
>>>>>>>> Normalement on est pas sensés libérer les variables/objets u ne fois
>>>>>>>> qu'on a plus besoin ?
>>>>>>>> On 27 mar, 17:23, seliana <altarbo...@gmail.com> wrote:
>>>>>>>>> Bonjour microsoft.public.fr.excel,
>>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel q uand
>>>>>>>>> exécuté sans interruption alors que s'il est exécuté pa s à pas tout
>>>>>>>>> fonctionne sans problème.
>>>>>>>>> j'ai sur ma feuille :
>>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
>>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
>>>>>>>>> ComboBox1 - objet combobox
>>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et lab el
>> mais
>>>>>>>>> qui ne sont pas encore utilisés
>>>>>>>>> Voici le code en question.
>>>>>>>>> --------------------------------------------
>>>>>>>>> Option Explicit
>>>>>>>>> 'declaration de variables
>>>>>>>>> Dim cnnConn As ADODB.Connection
>>>>>>>>> Dim rstRecordset As ADODB.recordSet
>>>>>>>>> Dim tempQuery As String
>>>>>>>>> Private Sub CommandButton1_Click()
>>>>>>>>> 'definition de variables
>>>>>>>>> Set cnnConn = New ADODB.Connection
>>>>>>>>> Set rstRecordset = New ADODB.recordSet
>>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
>>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
>>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET,
>>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogout ON
>>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
>>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1.va lue
>>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.entr yDate)
>>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Ye ar &
>>>>>>>>> "#));"
>>>>>>>>> 'Vérifie que la connexion est bien fermée
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'Etabli la connection
>>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
>>>>>>>>> cnnConn.Open CAppPathTodB
>>>>>>>>> 'Attente que la connexion soit établie
>>>>>>>>> While (cnnConn.State = adStateConnecting)
>>>>>>>>> DoEvents
>>>>>>>>> Wend
>>>>>>>>> 'vérifie que le recordset est bien fermée
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'ouvre le recordset
>>>>>>>>> rstRecordset.Open tempQuery, cnnConn
>>>>>>>>> 'transpose recordset dans grid
>>>>>>>>> Set VSFlexGrid1.DataSource = rstRecordset
>>>>>>>>> 'si recordset encore ouvert alors le ferme
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'libere objets
>>>>>>>>> Set cnnConn = Nothing
>>>>>>>>> Set rstRecordset = Nothing
>>>>>>>>> End Sub
>>>>>>>>> --------------------------------------------
>>>>>>>>> ainsi que quelques constantes définies dans un module
>>>>>>>>> --------------------------------------------
>>>>>>>>> Public Const AppVersion = "0.2.9"
>>>>>>>>> Public Const AppInDevMode = True
>>>>>>>>> Public Const CAppPathTodB = "U:_devfifomain.mdb"
>>>>>>>>> Public Const CAppConnectionString = "Provider=Microsoft.Jet .OLEDB.
>>>>>>>>> 4.0;"
>>>>>>>>> --------------------------------------------
>>>>>>>>> Si je clique sur CommandButton1 et que j'ai un point d'arret su r le
>>>>>>>>> debut du CommandButton1_Click() et qu'ensuite j'execute pas à pas.
>>>>>>>>> nickel sans problémes les données de la base de données s ont lues
>> et
>>>>>>>>> affichés dans le grid.
>>>>>>>>> mais si je n'ai pas de point d'arret, tout le code est execut é et a
>> la
>>>>>>>>> fin excel crashe (entre "Set rstRecordset = Nothing" et "End Sub"
>>>>>>>>> d'aprés quelques debug.print que j'ai mis)
>>>>>>>>> Quelqu'un saurait pourquoi ?
re bonjour ,
as tu mis
.RefreshPeriod = 0
isabelle
altarboy a écrit :
> Salut Gilbert,
> Oui, j'ai mis des doevents avant, malheureusement ça apporte plus de
> problémes que ça en resoud car ADO etant asynchrone les methodes se
> melangent et ça crée un gros crash d'excel aussi.
> je crois que ma seule solution est de commencer a gérer les ADO Event s
> mais avec VBA je ne sais pas si c'est possible. Une autre solution
> serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> encore comment faire car par defaut les objects Connection et
> Recordset de ADO sont asynchrones.
> encore une poignée de cheveux en moins...
> Salutations
> On 28 mar, 17:38, "Gilbert" wrote:
>> Bonjour
>> As-tu essayé de rajouter un Doevents avant les
>> Set cnnConn = Nothing
>> Set rstRecordset = Nothing
>> --
>> Cordialement,
>> Gilbert
>> "altarboy" a écrit dans le message denews:746
>> Salut
>> Effectivement, ça a l'air plus logique, malheureusement ça ne chan ge
>> rien. ça crash toujours quand je set les variables = Nothing.
>> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
>> On 28 mar, 15:45, isabelle wrote:
>>> bonjour,
>>> oups desolé , la correction est :
>>> While état1 <> adStateClose
>>> état1 = rstRecordset.State
>>> Wend
>>> While état2 <> adStateClose
>>> état2 = cnnConn.State
>>> Wend
>>> isabelle
>>> altarboy a écrit :
>>>> si je le mets la :
>>>> ...
>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>> While état1 = adStateClosed
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClosed
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>> ben une fois sur deux ça reste dans la boucle car le state est dej a
>>>> closed
>>>> On 28 mar, 14:49, isabelle wrote:
>>>>> Salut altarboy,
>>>>> juste avant
>>>>> Set cnnConn = Nothing
>>>>> Set rstRecordset = Nothing
>>>>> isabelle
>>>>> altarboy a écrit :
>>>>>> Salut Isabelle,
>>>>>> Je ne vois pas trop ou mettre ces deux boucles.
>>>>>> On 27 mar, 19:17, isabelle wrote:
>>>>>>> bonjour,
>>>>>>> essai en y ajoutant une boucle :
>>>>>>> While état1 = adStateClose
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClose
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>> isabelle
>>>>>>> altarboy a écrit :
>>>>>>>> Petite précision :
>>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
>>>>>>>> problèmes :
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vieu x.
>>>>>>>> Normalement on est pas sensés libérer les variables/objets u ne fois
>>>>>>>> qu'on a plus besoin ?
>>>>>>>> On 27 mar, 17:23, seliana wrote:
>>>>>>>>> Bonjour microsoft.public.fr.excel,
>>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel q uand
>>>>>>>>> exécuté sans interruption alors que s'il est exécuté pa s à pas tout
>>>>>>>>> fonctionne sans problème.
>>>>>>>>> j'ai sur ma feuille :
>>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
>>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
>>>>>>>>> ComboBox1 - objet combobox
>>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et lab el
>> mais
>>>>>>>>> qui ne sont pas encore utilisés
>>>>>>>>> Voici le code en question.
>>>>>>>>> --------------------------------------------
>>>>>>>>> Option Explicit
>>>>>>>>> 'declaration de variables
>>>>>>>>> Dim cnnConn As ADODB.Connection
>>>>>>>>> Dim rstRecordset As ADODB.recordSet
>>>>>>>>> Dim tempQuery As String
>>>>>>>>> Private Sub CommandButton1_Click()
>>>>>>>>> 'definition de variables
>>>>>>>>> Set cnnConn = New ADODB.Connection
>>>>>>>>> Set rstRecordset = New ADODB.recordSet
>>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
>>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
>>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET,
>>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogout ON
>>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
>>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1.va lue
>>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.entr yDate)
>>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Ye ar &
>>>>>>>>> "#));"
>>>>>>>>> 'Vérifie que la connexion est bien fermée
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'Etabli la connection
>>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
>>>>>>>>> cnnConn.Open CAppPathTodB
>>>>>>>>> 'Attente que la connexion soit établie
>>>>>>>>> While (cnnConn.State = adStateConnecting)
>>>>>>>>> DoEvents
>>>>>>>>> Wend
>>>>>>>>> 'vérifie que le recordset est bien fermée
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'ouvre le recordset
>>>>>>>>> rstRecordset.Open tempQuery, cnnConn
>>>>>>>>> 'transpose recordset dans grid
>>>>>>>>> Set VSFlexGrid1.DataSource = rstRecordset
>>>>>>>>> 'si recordset encore ouvert alors le ferme
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'libere objets
>>>>>>>>> Set cnnConn = Nothing
>>>>>>>>> Set rstRecordset = Nothing
>>>>>>>>> End Sub
>>>>>>>>> --------------------------------------------
>>>>>>>>> ainsi que quelques constantes définies dans un module
>>>>>>>>> --------------------------------------------
>>>>>>>>> Public Const AppVersion = "0.2.9"
>>>>>>>>> Public Const AppInDevMode = True
>>>>>>>>> Public Const CAppPathTodB = "U:_devfifomain.mdb"
>>>>>>>>> Public Const CAppConnectionString = "Provider=Microsoft.Jet .OLEDB.
>>>>>>>>> 4.0;"
>>>>>>>>> --------------------------------------------
>>>>>>>>> Si je clique sur CommandButton1 et que j'ai un point d'arret su r le
>>>>>>>>> debut du CommandButton1_Click() et qu'ensuite j'execute pas à pas.
>>>>>>>>> nickel sans problémes les données de la base de données s ont lues
>> et
>>>>>>>>> affichés dans le grid.
>>>>>>>>> mais si je n'ai pas de point d'arret, tout le code est execut é et a
>> la
>>>>>>>>> fin excel crashe (entre "Set rstRecordset = Nothing" et "End Sub"
>>>>>>>>> d'aprés quelques debug.print que j'ai mis)
>>>>>>>>> Quelqu'un saurait pourquoi ?
re bonjour ,
as tu mis
.RefreshPeriod = 0
isabelle
altarboy a écrit :
> Salut Gilbert,
> Oui, j'ai mis des doevents avant, malheureusement ça apporte plus de
> problémes que ça en resoud car ADO etant asynchrone les methodes se
> melangent et ça crée un gros crash d'excel aussi.
> je crois que ma seule solution est de commencer a gérer les ADO Events
> mais avec VBA je ne sais pas si c'est possible. Une autre solution
> serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> encore comment faire car par defaut les objects Connection et
> Recordset de ADO sont asynchrones.
> encore une poignée de cheveux en moins...
> Salutations
> On 28 mar, 17:38, "Gilbert" wrote:
>> Bonjour
>> As-tu essayé de rajouter un Doevents avant les
>> Set cnnConn = Nothing
>> Set rstRecordset = Nothing
>> --
>> Cordialement,
>> Gilbert
>> "altarboy" a écrit dans le message
>> denews:
>> Salut
>> Effectivement, ça a l'air plus logique, malheureusement ça ne change
>> rien. ça crash toujours quand je set les variables = Nothing.
>> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
>> On 28 mar, 15:45, isabelle wrote:
>>> bonjour,
>>> oups desolé , la correction est :
>>> While état1 <> adStateClose
>>> état1 = rstRecordset.State
>>> Wend
>>> While état2 <> adStateClose
>>> état2 = cnnConn.State
>>> Wend
>>> isabelle
>>> altarboy a écrit :
>>>> si je le mets la :
>>>> ...
>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>> While état1 = adStateClosed
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClosed
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>> ben une fois sur deux ça reste dans la boucle car le state est deja
>>>> closed
>>>> On 28 mar, 14:49, isabelle wrote:
>>>>> Salut altarboy,
>>>>> juste avant
>>>>> Set cnnConn = Nothing
>>>>> Set rstRecordset = Nothing
>>>>> isabelle
>>>>> altarboy a écrit :
>>>>>> Salut Isabelle,
>>>>>> Je ne vois pas trop ou mettre ces deux boucles.
>>>>>> On 27 mar, 19:17, isabelle wrote:
>>>>>>> bonjour,
>>>>>>> essai en y ajoutant une boucle :
>>>>>>> While état1 = adStateClose
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClose
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>> isabelle
>>>>>>> altarboy a écrit :
>>>>>>>> Petite précision :
>>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
>>>>>>>> problèmes :
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vieux.
>>>>>>>> Normalement on est pas sensés libérer les variables/objets une fois
>>>>>>>> qu'on a plus besoin ?
>>>>>>>> On 27 mar, 17:23, seliana wrote:
>>>>>>>>> Bonjour microsoft.public.fr.excel,
>>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel quand
>>>>>>>>> exécuté sans interruption alors que s'il est exécuté pas à pas tout
>>>>>>>>> fonctionne sans problème.
>>>>>>>>> j'ai sur ma feuille :
>>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
>>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
>>>>>>>>> ComboBox1 - objet combobox
>>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et label
>> mais
>>>>>>>>> qui ne sont pas encore utilisés
>>>>>>>>> Voici le code en question.
>>>>>>>>> --------------------------------------------
>>>>>>>>> Option Explicit
>>>>>>>>> 'declaration de variables
>>>>>>>>> Dim cnnConn As ADODB.Connection
>>>>>>>>> Dim rstRecordset As ADODB.recordSet
>>>>>>>>> Dim tempQuery As String
>>>>>>>>> Private Sub CommandButton1_Click()
>>>>>>>>> 'definition de variables
>>>>>>>>> Set cnnConn = New ADODB.Connection
>>>>>>>>> Set rstRecordset = New ADODB.recordSet
>>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
>>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
>>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET,
>>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogout ON
>>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
>>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1.value
>>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.entryDate)
>>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Year &
>>>>>>>>> "#));"
>>>>>>>>> 'Vérifie que la connexion est bien fermée
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'Etabli la connection
>>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
>>>>>>>>> cnnConn.Open CAppPathTodB
>>>>>>>>> 'Attente que la connexion soit établie
>>>>>>>>> While (cnnConn.State = adStateConnecting)
>>>>>>>>> DoEvents
>>>>>>>>> Wend
>>>>>>>>> 'vérifie que le recordset est bien fermée
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'ouvre le recordset
>>>>>>>>> rstRecordset.Open tempQuery, cnnConn
>>>>>>>>> 'transpose recordset dans grid
>>>>>>>>> Set VSFlexGrid1.DataSource = rstRecordset
>>>>>>>>> 'si recordset encore ouvert alors le ferme
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'libere objets
>>>>>>>>> Set cnnConn = Nothing
>>>>>>>>> Set rstRecordset = Nothing
>>>>>>>>> End Sub
>>>>>>>>> --------------------------------------------
>>>>>>>>> ainsi que quelques constantes définies dans un module
>>>>>>>>> --------------------------------------------
>>>>>>>>> Public Const AppVersion = "0.2.9"
>>>>>>>>> Public Const AppInDevMode = True
>>>>>>>>> Public Const CAppPathTodB = "U:_devfifomain.mdb"
>>>>>>>>> Public Const CAppConnectionString = "Provider=Microsoft.Jet.OLEDB.
>>>>>>>>> 4.0;"
>>>>>>>>> --------------------------------------------
>>>>>>>>> Si je clique sur CommandButton1 et que j'ai un point d'arret sur le
>>>>>>>>> debut du CommandButton1_Click() et qu'ensuite j'execute pas à pas.
>>>>>>>>> nickel sans problémes les données de la base de données sont lues
>> et
>>>>>>>>> affichés dans le grid.
>>>>>>>>> mais si je n'ai pas de point d'arret, tout le code est executé et a
>> la
>>>>>>>>> fin excel crashe (entre "Set rstRecordset = Nothing" et "End Sub"
>>>>>>>>> d'aprés quelques debug.print que j'ai mis)
>>>>>>>>> Quelqu'un saurait pourquoi ?
re bonjour ,
as tu mis
.RefreshPeriod = 0
isabelle
altarboy a écrit :
> Salut Gilbert,
> Oui, j'ai mis des doevents avant, malheureusement ça apporte plus de
> problémes que ça en resoud car ADO etant asynchrone les methodes se
> melangent et ça crée un gros crash d'excel aussi.
> je crois que ma seule solution est de commencer a gérer les ADO Events
> mais avec VBA je ne sais pas si c'est possible. Une autre solution
> serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> encore comment faire car par defaut les objects Connection et
> Recordset de ADO sont asynchrones.
> encore une poignée de cheveux en moins...
> Salutations
> On 28 mar, 17:38, "Gilbert" <ZZZgilbert...@NOSPAMlaposte.net> wrote:
>> Bonjour
>> As-tu essayé de rajouter un Doevents avant les
>> Set cnnConn = Nothing
>> Set rstRecordset = Nothing
>> --
>> Cordialement,
>> Gilbert
>> "altarboy" <altarbo...@gmail.com> a écrit dans le message
>> denews:74607e49-31bd-4f9a-b7a2-dbc21c900d9e@f19g2000yqo.googlegroups.com...
>> Salut
>> Effectivement, ça a l'air plus logique, malheureusement ça ne change
>> rien. ça crash toujours quand je set les variables = Nothing.
>> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
>> On 28 mar, 15:45, isabelle <i@v> wrote:
>>> bonjour,
>>> oups desolé , la correction est :
>>> While état1 <> adStateClose
>>> état1 = rstRecordset.State
>>> Wend
>>> While état2 <> adStateClose
>>> état2 = cnnConn.State
>>> Wend
>>> isabelle
>>> altarboy a écrit :
>>>> si je le mets la :
>>>> ...
>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>> While état1 = adStateClosed
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClosed
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>> ben une fois sur deux ça reste dans la boucle car le state est deja
>>>> closed
>>>> On 28 mar, 14:49, isabelle <i@v> wrote:
>>>>> Salut altarboy,
>>>>> juste avant
>>>>> Set cnnConn = Nothing
>>>>> Set rstRecordset = Nothing
>>>>> isabelle
>>>>> altarboy a écrit :
>>>>>> Salut Isabelle,
>>>>>> Je ne vois pas trop ou mettre ces deux boucles.
>>>>>> On 27 mar, 19:17, isabelle <i@v> wrote:
>>>>>>> bonjour,
>>>>>>> essai en y ajoutant une boucle :
>>>>>>> While état1 = adStateClose
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClose
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>> isabelle
>>>>>>> altarboy a écrit :
>>>>>>>> Petite précision :
>>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
>>>>>>>> problèmes :
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vieux.
>>>>>>>> Normalement on est pas sensés libérer les variables/objets une fois
>>>>>>>> qu'on a plus besoin ?
>>>>>>>> On 27 mar, 17:23, seliana <altarbo...@gmail.com> wrote:
>>>>>>>>> Bonjour microsoft.public.fr.excel,
>>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel quand
>>>>>>>>> exécuté sans interruption alors que s'il est exécuté pas à pas tout
>>>>>>>>> fonctionne sans problème.
>>>>>>>>> j'ai sur ma feuille :
>>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
>>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
>>>>>>>>> ComboBox1 - objet combobox
>>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et label
>> mais
>>>>>>>>> qui ne sont pas encore utilisés
>>>>>>>>> Voici le code en question.
>>>>>>>>> --------------------------------------------
>>>>>>>>> Option Explicit
>>>>>>>>> 'declaration de variables
>>>>>>>>> Dim cnnConn As ADODB.Connection
>>>>>>>>> Dim rstRecordset As ADODB.recordSet
>>>>>>>>> Dim tempQuery As String
>>>>>>>>> Private Sub CommandButton1_Click()
>>>>>>>>> 'definition de variables
>>>>>>>>> Set cnnConn = New ADODB.Connection
>>>>>>>>> Set rstRecordset = New ADODB.recordSet
>>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
>>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
>>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET,
>>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogout ON
>>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
>>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1.value
>>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.entryDate)
>>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Year &
>>>>>>>>> "#));"
>>>>>>>>> 'Vérifie que la connexion est bien fermée
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'Etabli la connection
>>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
>>>>>>>>> cnnConn.Open CAppPathTodB
>>>>>>>>> 'Attente que la connexion soit établie
>>>>>>>>> While (cnnConn.State = adStateConnecting)
>>>>>>>>> DoEvents
>>>>>>>>> Wend
>>>>>>>>> 'vérifie que le recordset est bien fermée
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'ouvre le recordset
>>>>>>>>> rstRecordset.Open tempQuery, cnnConn
>>>>>>>>> 'transpose recordset dans grid
>>>>>>>>> Set VSFlexGrid1.DataSource = rstRecordset
>>>>>>>>> 'si recordset encore ouvert alors le ferme
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'libere objets
>>>>>>>>> Set cnnConn = Nothing
>>>>>>>>> Set rstRecordset = Nothing
>>>>>>>>> End Sub
>>>>>>>>> --------------------------------------------
>>>>>>>>> ainsi que quelques constantes définies dans un module
>>>>>>>>> --------------------------------------------
>>>>>>>>> Public Const AppVersion = "0.2.9"
>>>>>>>>> Public Const AppInDevMode = True
>>>>>>>>> Public Const CAppPathTodB = "U:_devfifomain.mdb"
>>>>>>>>> Public Const CAppConnectionString = "Provider=Microsoft.Jet.OLEDB.
>>>>>>>>> 4.0;"
>>>>>>>>> --------------------------------------------
>>>>>>>>> Si je clique sur CommandButton1 et que j'ai un point d'arret sur le
>>>>>>>>> debut du CommandButton1_Click() et qu'ensuite j'execute pas à pas.
>>>>>>>>> nickel sans problémes les données de la base de données sont lues
>> et
>>>>>>>>> affichés dans le grid.
>>>>>>>>> mais si je n'ai pas de point d'arret, tout le code est executé et a
>> la
>>>>>>>>> fin excel crashe (entre "Set rstRecordset = Nothing" et "End Sub"
>>>>>>>>> d'aprés quelques debug.print que j'ai mis)
>>>>>>>>> Quelqu'un saurait pourquoi ?
re bonjour ,
as tu mis
.RefreshPeriod = 0
isabelle
altarboy a écrit :
> Salut Gilbert,
> Oui, j'ai mis des doevents avant, malheureusement ça apporte plus de
> problémes que ça en resoud car ADO etant asynchrone les methodes se
> melangent et ça crée un gros crash d'excel aussi.
> je crois que ma seule solution est de commencer a gérer les ADO Events
> mais avec VBA je ne sais pas si c'est possible. Une autre solution
> serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> encore comment faire car par defaut les objects Connection et
> Recordset de ADO sont asynchrones.
> encore une poignée de cheveux en moins...
> Salutations
> On 28 mar, 17:38, "Gilbert" wrote:
>> Bonjour
>> As-tu essayé de rajouter un Doevents avant les
>> Set cnnConn = Nothing
>> Set rstRecordset = Nothing
>> --
>> Cordialement,
>> Gilbert
>> "altarboy" a écrit dans le message
>> denews:
>> Salut
>> Effectivement, ça a l'air plus logique, malheureusement ça ne change
>> rien. ça crash toujours quand je set les variables = Nothing.
>> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
>> On 28 mar, 15:45, isabelle wrote:
>>> bonjour,
>>> oups desolé , la correction est :
>>> While état1 <> adStateClose
>>> état1 = rstRecordset.State
>>> Wend
>>> While état2 <> adStateClose
>>> état2 = cnnConn.State
>>> Wend
>>> isabelle
>>> altarboy a écrit :
>>>> si je le mets la :
>>>> ...
>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>> While état1 = adStateClosed
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClosed
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>> ben une fois sur deux ça reste dans la boucle car le state est deja
>>>> closed
>>>> On 28 mar, 14:49, isabelle wrote:
>>>>> Salut altarboy,
>>>>> juste avant
>>>>> Set cnnConn = Nothing
>>>>> Set rstRecordset = Nothing
>>>>> isabelle
>>>>> altarboy a écrit :
>>>>>> Salut Isabelle,
>>>>>> Je ne vois pas trop ou mettre ces deux boucles.
>>>>>> On 27 mar, 19:17, isabelle wrote:
>>>>>>> bonjour,
>>>>>>> essai en y ajoutant une boucle :
>>>>>>> While état1 = adStateClose
>>>>>>> état1 = rstRecordset.State
>>>>>>> Wend
>>>>>>> While état2 = adStateClose
>>>>>>> état2 = cnnConn.State
>>>>>>> Wend
>>>>>>> isabelle
>>>>>>> altarboy a écrit :
>>>>>>>> Petite précision :
>>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
>>>>>>>> problèmes :
>>>>>>>> 'libere objets
>>>>>>>> Set cnnConn = Nothing
>>>>>>>> Set rstRecordset = Nothing
>>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vieux.
>>>>>>>> Normalement on est pas sensés libérer les variables/objets une fois
>>>>>>>> qu'on a plus besoin ?
>>>>>>>> On 27 mar, 17:23, seliana wrote:
>>>>>>>>> Bonjour microsoft.public.fr.excel,
>>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel quand
>>>>>>>>> exécuté sans interruption alors que s'il est exécuté pas à pas tout
>>>>>>>>> fonctionne sans problème.
>>>>>>>>> j'ai sur ma feuille :
>>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
>>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
>>>>>>>>> ComboBox1 - objet combobox
>>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et label
>> mais
>>>>>>>>> qui ne sont pas encore utilisés
>>>>>>>>> Voici le code en question.
>>>>>>>>> --------------------------------------------
>>>>>>>>> Option Explicit
>>>>>>>>> 'declaration de variables
>>>>>>>>> Dim cnnConn As ADODB.Connection
>>>>>>>>> Dim rstRecordset As ADODB.recordSet
>>>>>>>>> Dim tempQuery As String
>>>>>>>>> Private Sub CommandButton1_Click()
>>>>>>>>> 'definition de variables
>>>>>>>>> Set cnnConn = New ADODB.Connection
>>>>>>>>> Set rstRecordset = New ADODB.recordSet
>>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
>>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
>>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET,
>>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogout ON
>>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
>>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1.value
>>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.entryDate)
>>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Year &
>>>>>>>>> "#));"
>>>>>>>>> 'Vérifie que la connexion est bien fermée
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'Etabli la connection
>>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
>>>>>>>>> cnnConn.Open CAppPathTodB
>>>>>>>>> 'Attente que la connexion soit établie
>>>>>>>>> While (cnnConn.State = adStateConnecting)
>>>>>>>>> DoEvents
>>>>>>>>> Wend
>>>>>>>>> 'vérifie que le recordset est bien fermée
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'ouvre le recordset
>>>>>>>>> rstRecordset.Open tempQuery, cnnConn
>>>>>>>>> 'transpose recordset dans grid
>>>>>>>>> Set VSFlexGrid1.DataSource = rstRecordset
>>>>>>>>> 'si recordset encore ouvert alors le ferme
>>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
>>>>>>>>> 'si connection encore ouverte alors la ferme
>>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
>>>>>>>>> 'libere objets
>>>>>>>>> Set cnnConn = Nothing
>>>>>>>>> Set rstRecordset = Nothing
>>>>>>>>> End Sub
>>>>>>>>> --------------------------------------------
>>>>>>>>> ainsi que quelques constantes définies dans un module
>>>>>>>>> --------------------------------------------
>>>>>>>>> Public Const AppVersion = "0.2.9"
>>>>>>>>> Public Const AppInDevMode = True
>>>>>>>>> Public Const CAppPathTodB = "U:_devfifomain.mdb"
>>>>>>>>> Public Const CAppConnectionString = "Provider=Microsoft.Jet.OLEDB.
>>>>>>>>> 4.0;"
>>>>>>>>> --------------------------------------------
>>>>>>>>> Si je clique sur CommandButton1 et que j'ai un point d'arret sur le
>>>>>>>>> debut du CommandButton1_Click() et qu'ensuite j'execute pas à pas.
>>>>>>>>> nickel sans problémes les données de la base de données sont lues
>> et
>>>>>>>>> affichés dans le grid.
>>>>>>>>> mais si je n'ai pas de point d'arret, tout le code est executé et a
>> la
>>>>>>>>> fin excel crashe (entre "Set rstRecordset = Nothing" et "End Sub"
>>>>>>>>> d'aprés quelques debug.print que j'ai mis)
>>>>>>>>> Quelqu'un saurait pourquoi ?
Un petit exemple de code avec ADO
Je t'ai mis une procédure qui "teste" l'état de ta connection
et de ton recordSet. Je me demande cependant à quoi cela
peut bien servir dans ce type de procédure puisque tu as
des commandes du type : Set Conn = New ADODB.Connection
juste avant d'ouvrir la connection... cela signifie que tu crées
une "NOUVELLE INSTANCE" .... comment pourrait-elle déjà
exister puisque tu viens de la créer ! Il en va de même pour
l'objet RecordSet. Ce serait différent si ces 2 objets étaient
des variables publiques appelées par diverses procédures pour
un travail quelconque sur la base de données.
Les procédures qui suivent ne sont là que pour illustrer mon
propos. A toi de les adapter si tu le juges pertinent pour ton applicatio n.
'-----------------------------------------------------
Sub Requête_Avec_ADO()
Dim Gestion_Erreur As String
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Dim Requete As String, NomFeuille As String, Rg As Range
Dim File As String, C As Integer
On Error GoTo Gestion_Erreur
'Fichier sur lequel se fera la requête :
File = ThisWorkbook.FullName
'Nom de la feuille du fichier où sont les données
'Dans la requête, j'utilise la variable.
NomFeuille = "denis"
'Défini la première cellule où seront copiées les
'données des requêtes ADO
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2 )
End If
End With
'Tester le statut de la connection
If Not Conn Is Nothing Then
Connection_Statut Conn
End If
Set Conn = New ADODB.Connection
'Valeur par défaut est de 15 secondes
'Une erreur est générée si par exemple ça
'prend plus de 30 secondes à se connecter à
'la base de donnée
Conn.ConnectionTimeout = 30 ' À TOI DE LE DÉTERMINER
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
'La requête qui sera exécutée.
Requete = "SELECT * From [" & NomFeuille & "$]"
'Tester le Statut du RecordSet
If Not Rst Is Nothing Then
Recordset_Statut Rst
End If
Set Rst = New ADODB.Recordset
Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic
'Copie les étiquettes du recordset vers Excel
Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count
Rg.Offset(1).CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
Exit Sub
Gestion_Erreur:
MsgBox Err.Number & " , " & Err.Description
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------------------------
'-------------------------------------------------------------
Sub Connection_Statut(Conn As ADODB.Connection)
Select Case Conn.State
Case 0 'Constante texte :adStateClosed
Debug.Print "The object is closed."
Case 1 'Constante texte :adStateOpen
Debug.Print "The object is open"
Case 2 'Constante texte :adStateConnecting
Debug.Print "The object is connecting"
Case 4 'Constante texte :adStateExecuting
Debug.Print "The object is executing a command"
Case 8 'Constante texte :adStateFetching
Debug.Print "The rows of the object are being retrieved"
End Select
End Sub
'-------------------------------------------------------------
Sub Recordset_Statut(Rst As ADODB.Recordset)
Select Case Rst.State
Case Is = adStateClosed
Debug.Print "The rst object is currently closed."
Case Is = adStateConnecting
Debug.Print "The rst object is currently connecting."
Case Is = adStateExecuting
Debug.Print "The rst object is currently executing."
Case Is = adStateFetching
Debug.Print "The rst object is currently fetching."
Case Is = adStateOpen
Debug.Print "The rst object is currently open."
End Select
End Sub
'-------------------------------------------------------------
"altarboy" a écrit dans le message de groupe de discussion :
Salut isabelle,
Je n'ai pas mis de .RefreshPeriod
Je ne connaissait pas cette commande, j'essayerai dés que possible et
te redirait..
salutations
enoc
On 28 mar, 20:13, isabelle wrote:
> re bonjour ,
> as tu mis
> .RefreshPeriod = 0
> isabelle
> altarboy a écrit :
> > Salut Gilbert,
> > Oui, j'ai mis des doevents avant, malheureusement ça apporte plus d e
> > problémes que ça en resoud car ADO etant asynchrone les methodes se
> > melangent et ça crée un gros crash d'excel aussi.
> > je crois que ma seule solution est de commencer a gérer les ADO Eve nts
> > mais avec VBA je ne sais pas si c'est possible. Une autre solution
> > serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> > encore comment faire car par defaut les objects Connection et
> > Recordset de ADO sont asynchrones.
> > encore une poignée de cheveux en moins...
> > Salutations
> > On 28 mar, 17:38, "Gilbert" wrote:
> >> Bonjour
> >> As-tu essayé de rajouter un Doevents avant les
> >> Set cnnConn = Nothing
> >> Set rstRecordset = Nothing
> >> --
> >> Cordialement,
> >> Gilbert
> >> "altarboy" a écrit dans le message
> >> denews: .com...
> >> Salut
> >> Effectivement, ça a l'air plus logique, malheureusement ça ne ch ange
> >> rien. ça crash toujours quand je set les variables = Nothing.
> >> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
> >> On 28 mar, 15:45, isabelle wrote:
> >>> bonjour,
> >>> oups desolé , la correction est :
> >>> While état1 <> adStateClose
> >>> état1 = rstRecordset.State
> >>> Wend
> >>> While état2 <> adStateClose
> >>> état2 = cnnConn.State
> >>> Wend
> >>> isabelle
> >>> altarboy a écrit :
> >>>> si je le mets la :
> >>>> ...
> >>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
> >>>>>>>> 'si connection encore ouverte alors la ferme
> >>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
> >>>>>>> While état1 = adStateClosed
> >>>>>>> état1 = rstRecordset.State
> >>>>>>> Wend
> >>>>>>> While état2 = adStateClosed
> >>>>>>> état2 = cnnConn.State
> >>>>>>> Wend
> >>>>>>>> 'libere objets
> >>>>>>>> Set cnnConn = Nothing
> >>>>>>>> Set rstRecordset = Nothing
> >>>> ben une fois sur deux ça reste dans la boucle car le state est d eja
> >>>> closed
> >>>> On 28 mar, 14:49, isabelle wrote:
> >>>>> Salut altarboy,
> >>>>> juste avant
> >>>>> Set cnnConn = Nothing
> >>>>> Set rstRecordset = Nothing
> >>>>> isabelle
> >>>>> altarboy a écrit :
> >>>>>> Salut Isabelle,
> >>>>>> Je ne vois pas trop ou mettre ces deux boucles.
> >>>>>> On 27 mar, 19:17, isabelle wrote:
> >>>>>>> bonjour,
> >>>>>>> essai en y ajoutant une boucle :
> >>>>>>> While état1 = adStateClose
> >>>>>>> état1 = rstRecordset.State
> >>>>>>> Wend
> >>>>>>> While état2 = adStateClose
> >>>>>>> état2 = cnnConn.State
> >>>>>>> Wend
> >>>>>>> isabelle
> >>>>>>> altarboy a écrit :
> >>>>>>>> Petite précision :
> >>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
> >>>>>>>> problèmes :
> >>>>>>>> 'libere objets
> >>>>>>>> Set cnnConn = Nothing
> >>>>>>>> Set rstRecordset = Nothing
> >>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vi eux.
> >>>>>>>> Normalement on est pas sensés libérer les variables/objets une fois
> >>>>>>>> qu'on a plus besoin ?
> >>>>>>>> On 27 mar, 17:23, seliana wrote:
> >>>>>>>>> Bonjour microsoft.public.fr.excel,
> >>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel quand
> >>>>>>>>> exécuté sans interruption alors que s'il est exécuté pas à pas tout
> >>>>>>>>> fonctionne sans problème.
> >>>>>>>>> j'ai sur ma feuille :
> >>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
> >>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
> >>>>>>>>> ComboBox1 - objet combobox
> >>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et l abel
> >> mais
> >>>>>>>>> qui ne sont pas encore utilisés
> >>>>>>>>> Voici le code en question.
> >>>>>>>>> --------------------------------------------
> >>>>>>>>> Option Explicit
> >>>>>>>>> 'declaration de variables
> >>>>>>>>> Dim cnnConn As ADODB.Connection
> >>>>>>>>> Dim rstRecordset As ADODB.recordSet
> >>>>>>>>> Dim tempQuery As String
> >>>>>>>>> Private Sub CommandButton1_Click()
> >>>>>>>>> 'definition de variables
> >>>>>>>>> Set cnnConn = New ADODB.Connection
> >>>>>>>>> Set rstRecordset = New ADODB.recordSet
> >>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
> >>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
> >>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET ,
> >>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogo ut ON
> >>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
> >>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1. value
> >>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.en tryDate)
> >>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent. Year &
> >>>>>>>>> "#));"
> >>>>>>>>> 'Vérifie que la connexion est bien fermée
> >>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
> >>>>>>>>> 'Etabli la connection
> >>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
> >>>>>>>>> cnnConn.Open CAppPathTodB
> >>>>>>>>> 'Attente que la connexion soit établie
> >>>>>>>>> While (cnnConn.State = adStateConnecting)
> >>>>>>>>> DoEvents
> >>>>>>>>> Wend
> >>>>>>>>> 'vérifie que le recordset est bien fermée
> >>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
> >>>>>>>>> 'ouvre le recordset
> >>>>>>>>> rstRecordset.Open tempQuery, cnnConn
...
plus de détails »
Un petit exemple de code avec ADO
Je t'ai mis une procédure qui "teste" l'état de ta connection
et de ton recordSet. Je me demande cependant à quoi cela
peut bien servir dans ce type de procédure puisque tu as
des commandes du type : Set Conn = New ADODB.Connection
juste avant d'ouvrir la connection... cela signifie que tu crées
une "NOUVELLE INSTANCE" .... comment pourrait-elle déjà
exister puisque tu viens de la créer ! Il en va de même pour
l'objet RecordSet. Ce serait différent si ces 2 objets étaient
des variables publiques appelées par diverses procédures pour
un travail quelconque sur la base de données.
Les procédures qui suivent ne sont là que pour illustrer mon
propos. A toi de les adapter si tu le juges pertinent pour ton applicatio n.
'-----------------------------------------------------
Sub Requête_Avec_ADO()
Dim Gestion_Erreur As String
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Dim Requete As String, NomFeuille As String, Rg As Range
Dim File As String, C As Integer
On Error GoTo Gestion_Erreur
'Fichier sur lequel se fera la requête :
File = ThisWorkbook.FullName
'Nom de la feuille du fichier où sont les données
'Dans la requête, j'utilise la variable.
NomFeuille = "denis"
'Défini la première cellule où seront copiées les
'données des requêtes ADO
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2 )
End If
End With
'Tester le statut de la connection
If Not Conn Is Nothing Then
Connection_Statut Conn
End If
Set Conn = New ADODB.Connection
'Valeur par défaut est de 15 secondes
'Une erreur est générée si par exemple ça
'prend plus de 30 secondes à se connecter à
'la base de donnée
Conn.ConnectionTimeout = 30 ' À TOI DE LE DÉTERMINER
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
'La requête qui sera exécutée.
Requete = "SELECT * From [" & NomFeuille & "$]"
'Tester le Statut du RecordSet
If Not Rst Is Nothing Then
Recordset_Statut Rst
End If
Set Rst = New ADODB.Recordset
Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic
'Copie les étiquettes du recordset vers Excel
Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count
Rg.Offset(1).CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
Exit Sub
Gestion_Erreur:
MsgBox Err.Number & " , " & Err.Description
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------------------------
'-------------------------------------------------------------
Sub Connection_Statut(Conn As ADODB.Connection)
Select Case Conn.State
Case 0 'Constante texte :adStateClosed
Debug.Print "The object is closed."
Case 1 'Constante texte :adStateOpen
Debug.Print "The object is open"
Case 2 'Constante texte :adStateConnecting
Debug.Print "The object is connecting"
Case 4 'Constante texte :adStateExecuting
Debug.Print "The object is executing a command"
Case 8 'Constante texte :adStateFetching
Debug.Print "The rows of the object are being retrieved"
End Select
End Sub
'-------------------------------------------------------------
Sub Recordset_Statut(Rst As ADODB.Recordset)
Select Case Rst.State
Case Is = adStateClosed
Debug.Print "The rst object is currently closed."
Case Is = adStateConnecting
Debug.Print "The rst object is currently connecting."
Case Is = adStateExecuting
Debug.Print "The rst object is currently executing."
Case Is = adStateFetching
Debug.Print "The rst object is currently fetching."
Case Is = adStateOpen
Debug.Print "The rst object is currently open."
End Select
End Sub
'-------------------------------------------------------------
"altarboy" <altarbo...@gmail.com> a écrit dans le message de groupe de discussion :
07e55e30-0239-43e4-a7dd-728bb9243...@r37g2000yqn.googlegroups.com...
Salut isabelle,
Je n'ai pas mis de .RefreshPeriod
Je ne connaissait pas cette commande, j'essayerai dés que possible et
te redirait..
salutations
enoc
On 28 mar, 20:13, isabelle <i@v> wrote:
> re bonjour ,
> as tu mis
> .RefreshPeriod = 0
> isabelle
> altarboy a écrit :
> > Salut Gilbert,
> > Oui, j'ai mis des doevents avant, malheureusement ça apporte plus d e
> > problémes que ça en resoud car ADO etant asynchrone les methodes se
> > melangent et ça crée un gros crash d'excel aussi.
> > je crois que ma seule solution est de commencer a gérer les ADO Eve nts
> > mais avec VBA je ne sais pas si c'est possible. Une autre solution
> > serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> > encore comment faire car par defaut les objects Connection et
> > Recordset de ADO sont asynchrones.
> > encore une poignée de cheveux en moins...
> > Salutations
> > On 28 mar, 17:38, "Gilbert" <ZZZgilbert...@NOSPAMlaposte.net> wrote:
> >> Bonjour
> >> As-tu essayé de rajouter un Doevents avant les
> >> Set cnnConn = Nothing
> >> Set rstRecordset = Nothing
> >> --
> >> Cordialement,
> >> Gilbert
> >> "altarboy" <altarbo...@gmail.com> a écrit dans le message
> >> denews:74607e49-31bd-4f9a-b7a2-dbc21c900d9e@f19g2000yqo.googlegroups .com...
> >> Salut
> >> Effectivement, ça a l'air plus logique, malheureusement ça ne ch ange
> >> rien. ça crash toujours quand je set les variables = Nothing.
> >> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
> >> On 28 mar, 15:45, isabelle <i@v> wrote:
> >>> bonjour,
> >>> oups desolé , la correction est :
> >>> While état1 <> adStateClose
> >>> état1 = rstRecordset.State
> >>> Wend
> >>> While état2 <> adStateClose
> >>> état2 = cnnConn.State
> >>> Wend
> >>> isabelle
> >>> altarboy a écrit :
> >>>> si je le mets la :
> >>>> ...
> >>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
> >>>>>>>> 'si connection encore ouverte alors la ferme
> >>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
> >>>>>>> While état1 = adStateClosed
> >>>>>>> état1 = rstRecordset.State
> >>>>>>> Wend
> >>>>>>> While état2 = adStateClosed
> >>>>>>> état2 = cnnConn.State
> >>>>>>> Wend
> >>>>>>>> 'libere objets
> >>>>>>>> Set cnnConn = Nothing
> >>>>>>>> Set rstRecordset = Nothing
> >>>> ben une fois sur deux ça reste dans la boucle car le state est d eja
> >>>> closed
> >>>> On 28 mar, 14:49, isabelle <i@v> wrote:
> >>>>> Salut altarboy,
> >>>>> juste avant
> >>>>> Set cnnConn = Nothing
> >>>>> Set rstRecordset = Nothing
> >>>>> isabelle
> >>>>> altarboy a écrit :
> >>>>>> Salut Isabelle,
> >>>>>> Je ne vois pas trop ou mettre ces deux boucles.
> >>>>>> On 27 mar, 19:17, isabelle <i@v> wrote:
> >>>>>>> bonjour,
> >>>>>>> essai en y ajoutant une boucle :
> >>>>>>> While état1 = adStateClose
> >>>>>>> état1 = rstRecordset.State
> >>>>>>> Wend
> >>>>>>> While état2 = adStateClose
> >>>>>>> état2 = cnnConn.State
> >>>>>>> Wend
> >>>>>>> isabelle
> >>>>>>> altarboy a écrit :
> >>>>>>>> Petite précision :
> >>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
> >>>>>>>> problèmes :
> >>>>>>>> 'libere objets
> >>>>>>>> Set cnnConn = Nothing
> >>>>>>>> Set rstRecordset = Nothing
> >>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vi eux.
> >>>>>>>> Normalement on est pas sensés libérer les variables/objets une fois
> >>>>>>>> qu'on a plus besoin ?
> >>>>>>>> On 27 mar, 17:23, seliana <altarbo...@gmail.com> wrote:
> >>>>>>>>> Bonjour microsoft.public.fr.excel,
> >>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel quand
> >>>>>>>>> exécuté sans interruption alors que s'il est exécuté pas à pas tout
> >>>>>>>>> fonctionne sans problème.
> >>>>>>>>> j'ai sur ma feuille :
> >>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
> >>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
> >>>>>>>>> ComboBox1 - objet combobox
> >>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et l abel
> >> mais
> >>>>>>>>> qui ne sont pas encore utilisés
> >>>>>>>>> Voici le code en question.
> >>>>>>>>> --------------------------------------------
> >>>>>>>>> Option Explicit
> >>>>>>>>> 'declaration de variables
> >>>>>>>>> Dim cnnConn As ADODB.Connection
> >>>>>>>>> Dim rstRecordset As ADODB.recordSet
> >>>>>>>>> Dim tempQuery As String
> >>>>>>>>> Private Sub CommandButton1_Click()
> >>>>>>>>> 'definition de variables
> >>>>>>>>> Set cnnConn = New ADODB.Connection
> >>>>>>>>> Set rstRecordset = New ADODB.recordSet
> >>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
> >>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
> >>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET ,
> >>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogo ut ON
> >>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
> >>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1. value
> >>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.en tryDate)
> >>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent. Year &
> >>>>>>>>> "#));"
> >>>>>>>>> 'Vérifie que la connexion est bien fermée
> >>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
> >>>>>>>>> 'Etabli la connection
> >>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
> >>>>>>>>> cnnConn.Open CAppPathTodB
> >>>>>>>>> 'Attente que la connexion soit établie
> >>>>>>>>> While (cnnConn.State = adStateConnecting)
> >>>>>>>>> DoEvents
> >>>>>>>>> Wend
> >>>>>>>>> 'vérifie que le recordset est bien fermée
> >>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
> >>>>>>>>> 'ouvre le recordset
> >>>>>>>>> rstRecordset.Open tempQuery, cnnConn
...
plus de détails »
Un petit exemple de code avec ADO
Je t'ai mis une procédure qui "teste" l'état de ta connection
et de ton recordSet. Je me demande cependant à quoi cela
peut bien servir dans ce type de procédure puisque tu as
des commandes du type : Set Conn = New ADODB.Connection
juste avant d'ouvrir la connection... cela signifie que tu crées
une "NOUVELLE INSTANCE" .... comment pourrait-elle déjà
exister puisque tu viens de la créer ! Il en va de même pour
l'objet RecordSet. Ce serait différent si ces 2 objets étaient
des variables publiques appelées par diverses procédures pour
un travail quelconque sur la base de données.
Les procédures qui suivent ne sont là que pour illustrer mon
propos. A toi de les adapter si tu le juges pertinent pour ton applicatio n.
'-----------------------------------------------------
Sub Requête_Avec_ADO()
Dim Gestion_Erreur As String
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Dim Requete As String, NomFeuille As String, Rg As Range
Dim File As String, C As Integer
On Error GoTo Gestion_Erreur
'Fichier sur lequel se fera la requête :
File = ThisWorkbook.FullName
'Nom de la feuille du fichier où sont les données
'Dans la requête, j'utilise la variable.
NomFeuille = "denis"
'Défini la première cellule où seront copiées les
'données des requêtes ADO
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2 )
End If
End With
'Tester le statut de la connection
If Not Conn Is Nothing Then
Connection_Statut Conn
End If
Set Conn = New ADODB.Connection
'Valeur par défaut est de 15 secondes
'Une erreur est générée si par exemple ça
'prend plus de 30 secondes à se connecter à
'la base de donnée
Conn.ConnectionTimeout = 30 ' À TOI DE LE DÉTERMINER
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
'La requête qui sera exécutée.
Requete = "SELECT * From [" & NomFeuille & "$]"
'Tester le Statut du RecordSet
If Not Rst Is Nothing Then
Recordset_Statut Rst
End If
Set Rst = New ADODB.Recordset
Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic
'Copie les étiquettes du recordset vers Excel
Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count
Rg.Offset(1).CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
Exit Sub
Gestion_Erreur:
MsgBox Err.Number & " , " & Err.Description
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------------------------
'-------------------------------------------------------------
Sub Connection_Statut(Conn As ADODB.Connection)
Select Case Conn.State
Case 0 'Constante texte :adStateClosed
Debug.Print "The object is closed."
Case 1 'Constante texte :adStateOpen
Debug.Print "The object is open"
Case 2 'Constante texte :adStateConnecting
Debug.Print "The object is connecting"
Case 4 'Constante texte :adStateExecuting
Debug.Print "The object is executing a command"
Case 8 'Constante texte :adStateFetching
Debug.Print "The rows of the object are being retrieved"
End Select
End Sub
'-------------------------------------------------------------
Sub Recordset_Statut(Rst As ADODB.Recordset)
Select Case Rst.State
Case Is = adStateClosed
Debug.Print "The rst object is currently closed."
Case Is = adStateConnecting
Debug.Print "The rst object is currently connecting."
Case Is = adStateExecuting
Debug.Print "The rst object is currently executing."
Case Is = adStateFetching
Debug.Print "The rst object is currently fetching."
Case Is = adStateOpen
Debug.Print "The rst object is currently open."
End Select
End Sub
'-------------------------------------------------------------
"altarboy" a écrit dans le message de groupe de discussion :
Salut isabelle,
Je n'ai pas mis de .RefreshPeriod
Je ne connaissait pas cette commande, j'essayerai dés que possible et
te redirait..
salutations
enoc
On 28 mar, 20:13, isabelle wrote:
> re bonjour ,
> as tu mis
> .RefreshPeriod = 0
> isabelle
> altarboy a écrit :
> > Salut Gilbert,
> > Oui, j'ai mis des doevents avant, malheureusement ça apporte plus d e
> > problémes que ça en resoud car ADO etant asynchrone les methodes se
> > melangent et ça crée un gros crash d'excel aussi.
> > je crois que ma seule solution est de commencer a gérer les ADO Eve nts
> > mais avec VBA je ne sais pas si c'est possible. Une autre solution
> > serait d'utiliser ADO en mode synchrone, chose que je ne sais pas
> > encore comment faire car par defaut les objects Connection et
> > Recordset de ADO sont asynchrones.
> > encore une poignée de cheveux en moins...
> > Salutations
> > On 28 mar, 17:38, "Gilbert" wrote:
> >> Bonjour
> >> As-tu essayé de rajouter un Doevents avant les
> >> Set cnnConn = Nothing
> >> Set rstRecordset = Nothing
> >> --
> >> Cordialement,
> >> Gilbert
> >> "altarboy" a écrit dans le message
> >> denews: .com...
> >> Salut
> >> Effectivement, ça a l'air plus logique, malheureusement ça ne ch ange
> >> rien. ça crash toujours quand je set les variables = Nothing.
> >> De quoi m'arracher les cheveux. Heureusement que j'en ai plus.
> >> On 28 mar, 15:45, isabelle wrote:
> >>> bonjour,
> >>> oups desolé , la correction est :
> >>> While état1 <> adStateClose
> >>> état1 = rstRecordset.State
> >>> Wend
> >>> While état2 <> adStateClose
> >>> état2 = cnnConn.State
> >>> Wend
> >>> isabelle
> >>> altarboy a écrit :
> >>>> si je le mets la :
> >>>> ...
> >>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
> >>>>>>>> 'si connection encore ouverte alors la ferme
> >>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
> >>>>>>> While état1 = adStateClosed
> >>>>>>> état1 = rstRecordset.State
> >>>>>>> Wend
> >>>>>>> While état2 = adStateClosed
> >>>>>>> état2 = cnnConn.State
> >>>>>>> Wend
> >>>>>>>> 'libere objets
> >>>>>>>> Set cnnConn = Nothing
> >>>>>>>> Set rstRecordset = Nothing
> >>>> ben une fois sur deux ça reste dans la boucle car le state est d eja
> >>>> closed
> >>>> On 28 mar, 14:49, isabelle wrote:
> >>>>> Salut altarboy,
> >>>>> juste avant
> >>>>> Set cnnConn = Nothing
> >>>>> Set rstRecordset = Nothing
> >>>>> isabelle
> >>>>> altarboy a écrit :
> >>>>>> Salut Isabelle,
> >>>>>> Je ne vois pas trop ou mettre ces deux boucles.
> >>>>>> On 27 mar, 19:17, isabelle wrote:
> >>>>>>> bonjour,
> >>>>>>> essai en y ajoutant une boucle :
> >>>>>>> While état1 = adStateClose
> >>>>>>> état1 = rstRecordset.State
> >>>>>>> Wend
> >>>>>>> While état2 = adStateClose
> >>>>>>> état2 = cnnConn.State
> >>>>>>> Wend
> >>>>>>> isabelle
> >>>>>>> altarboy a écrit :
> >>>>>>>> Petite précision :
> >>>>>>>> Si j'enlève du code la partie suivante tout fonctionne sans
> >>>>>>>> problèmes :
> >>>>>>>> 'libere objets
> >>>>>>>> Set cnnConn = Nothing
> >>>>>>>> Set rstRecordset = Nothing
> >>>>>>>> Alors soit je deviens trop vieux soit ..... je deviens trop vi eux.
> >>>>>>>> Normalement on est pas sensés libérer les variables/objets une fois
> >>>>>>>> qu'on a plus besoin ?
> >>>>>>>> On 27 mar, 17:23, seliana wrote:
> >>>>>>>>> Bonjour microsoft.public.fr.excel,
> >>>>>>>>> Comment se fait il que le code ci dessous fasse crasher Excel quand
> >>>>>>>>> exécuté sans interruption alors que s'il est exécuté pas à pas tout
> >>>>>>>>> fonctionne sans problème.
> >>>>>>>>> j'ai sur ma feuille :
> >>>>>>>>> calAgent - objet calendrier (microsoft calendar control 11.0)
> >>>>>>>>> VSFlexGrid1 - voila :) VS Flex Grid v7
> >>>>>>>>> ComboBox1 - objet combobox
> >>>>>>>>> ainsi que un bouton (CommandButton1) et quelques textbox et l abel
> >> mais
> >>>>>>>>> qui ne sont pas encore utilisés
> >>>>>>>>> Voici le code en question.
> >>>>>>>>> --------------------------------------------
> >>>>>>>>> Option Explicit
> >>>>>>>>> 'declaration de variables
> >>>>>>>>> Dim cnnConn As ADODB.Connection
> >>>>>>>>> Dim rstRecordset As ADODB.recordSet
> >>>>>>>>> Dim tempQuery As String
> >>>>>>>>> Private Sub CommandButton1_Click()
> >>>>>>>>> 'definition de variables
> >>>>>>>>> Set cnnConn = New ADODB.Connection
> >>>>>>>>> Set rstRecordset = New ADODB.recordSet
> >>>>>>>>> tempQuery = "SELECT tAgents.AgentName, tAgents.isTemp,
> >>>>>>>>> tAgents.percentage, tBEELoginLogout.entryDate,
> >>>>>>>>> tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET ,
> >>>>>>>>> tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogo ut ON
> >>>>>>>>> tAgents.AgentName = tBEELoginLogout.ptrAgentName WHERE
> >>>>>>>>> (((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1. value
> >>>>>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.en tryDate)
> >>>>>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent. Year &
> >>>>>>>>> "#));"
> >>>>>>>>> 'Vérifie que la connexion est bien fermée
> >>>>>>>>> If cnnConn.State = adStateOpen Then cnnConn.Close
> >>>>>>>>> 'Etabli la connection
> >>>>>>>>> cnnConn.ConnectionString = CAppConnectionString
> >>>>>>>>> cnnConn.Open CAppPathTodB
> >>>>>>>>> 'Attente que la connexion soit établie
> >>>>>>>>> While (cnnConn.State = adStateConnecting)
> >>>>>>>>> DoEvents
> >>>>>>>>> Wend
> >>>>>>>>> 'vérifie que le recordset est bien fermée
> >>>>>>>>> If rstRecordset.State = adStateOpen Then rstRecordset.Close
> >>>>>>>>> 'ouvre le recordset
> >>>>>>>>> rstRecordset.Open tempQuery, cnnConn
...
plus de détails »