Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA fait crasher excel alors que pas à pas = pas de crash

13 réponses
Avatar
seliana
Bonjour microsoft.public.fr.excel,

Comment se fait il que le code ci dessous fasse crasher Excel quand
ex=E9cut=E9 sans interruption alors que s'il est ex=E9cut=E9 pas =E0 pas to=
ut
fonctionne sans probl=E8me.

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=E9s

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 =3D New ADODB.Connection
Set rstRecordset =3D New ADODB.recordSet

tempQuery =3D "SELECT tAgents.AgentName, tAgents.isTemp,
tAgents.percentage, tBEELoginLogout.entryDate,
tBEELoginLogout.entryLoginCET, tBEELoginLogout.entryLogoutCET,
tBEELoginLogout.isValid FROM tAgents INNER JOIN tBEELoginLogout ON
tAgents.AgentName =3D tBEELoginLogout.ptrAgentName WHERE
(((tAgents.AgentName) Like """ & "%" & frmPointage.ComboBox1.value
tempQuery =3D tempQuery & "%" & """) AND ((tBEELoginLogout.entryDate)
=3D#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Year &
"#));"

'V=E9rifie que la connexion est bien ferm=E9e
If cnnConn.State =3D adStateOpen Then cnnConn.Close
'Etabli la connection
cnnConn.ConnectionString =3D CAppConnectionString
cnnConn.Open CAppPathTodB
'Attente que la connexion soit =E9tablie
While (cnnConn.State =3D adStateConnecting)
DoEvents
Wend

'v=E9rifie que le recordset est bien ferm=E9e
If rstRecordset.State =3D adStateOpen Then rstRecordset.Close
'ouvre le recordset
rstRecordset.Open tempQuery, cnnConn
'transpose recordset dans grid
Set VSFlexGrid1.DataSource =3D rstRecordset
'si recordset encore ouvert alors le ferme
If rstRecordset.State =3D adStateOpen Then rstRecordset.Close
'si connection encore ouverte alors la ferme
If cnnConn.State =3D adStateOpen Then cnnConn.Close

'libere objets
Set cnnConn =3D Nothing
Set rstRecordset =3D Nothing

End Sub
--------------------------------------------

ainsi que quelques constantes d=E9finies dans un module

--------------------------------------------
Public Const AppVersion =3D "0.2.9"
Public Const AppInDevMode =3D True
Public Const CAppPathTodB =3D "U:\_\dev\fifo\main.mdb"
Public Const CAppConnectionString =3D "Provider=3DMicrosoft.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 =E0 pas.
nickel sans probl=E9mes les donn=E9es de la base de donn=E9es sont lues et
affich=E9s dans le grid.

mais si je n'ai pas de point d'arret, tout le code est execut=E9 et a la
fin excel crashe (entre "Set rstRecordset =3D Nothing" et "End Sub"
d'apr=E9s quelques debug.print que j'ai mis)

Quelqu'un saurait pourquoi ?

10 réponses

1 2
Avatar
altarboy
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.entryD ate)
=#" & 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 e t
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 ?


Avatar
isabelle
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 ?







Avatar
altarboy
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 à p as 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.ent ryDate)
>> =#" & 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 lue s 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 ?


Avatar
isabelle
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 ?











Avatar
altarboy
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 fo is
>>> 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 ma is
>>>> 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.e ntryDate)
>>>> =#" & 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.Clos e
>>>>     '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.Clos e
>>>>     '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.OLED B.
>>>> 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 l ues 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 ?


Avatar
isabelle
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 ?















Avatar
altarboy
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.Clo se
>>>>>     '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 quan d
>>>>>> 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.Cl ose
>>>>>>     '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.Cl ose
>>>>>>     '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.OL EDB.
>>>>>> 4.0;"
>>>>>> --------------------------------------------

>>>>>> Si je clique sur CommandButton1 et que j'ai un point d'arret sur l e
>>>>>> debut du CommandButton1_Click() et qu'ensuite j'execute pas à pa s.
>>>>>> 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é e t 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 ?


Avatar
Gilbert
Bonjour

As-tu essayé de rajouter un Doevents avant les
Set cnnConn = Nothing
Set rstRecordset = Nothing

--
Cordialement,

Gilbert


"altarboy" a écrit dans le message de
news:
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 ?


Avatar
altarboy
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:74607e
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 un e 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 qu and
> >>>>>> 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 labe l
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.val ue
> >>>>>> tempQuery = tempQuery & "%" & """) AND ((tBEELoginLogout.entry Date)
> >>>>>> =#" & calAgent.Month & "/" & calAgent.Day & "/" & calAgent.Yea r &
> >>>>>> "#));"

> >>>>>> '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 so nt 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 S ub"
> >>>>>> d'aprés quelques debug.print que j'ai mis)

> >>>>>> Quelqu'un saurait pourquoi ?


Avatar
isabelle
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 ?





















1 2