Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" <desaivresanospam@free.fr> a écrit dans le message de news:
cun9md$6mq$1@s1.news.oleane.net...
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" <desaivresanospam@free.fr> a écrit dans le message de news:
cun9md$6mq$1@s1.news.oleane.net...
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Bonjour Alain79,
Le mode .Mode = adModeWrite
Permet d'ouvrir une connexion en mode lecture seulement malgré les
apparences.
Pour obtenir toutes les constantes possibles :
Dim x As ADODB.ConnectModeEnum
x = adModeWrite
Si tu effaces le signe "=" et que tu le retype et que tu appuies après sur
la barre d'espacement, une liste déroulante
devrait apparaître avec la liste des constantes disponibles. Probablement
dans l'aide, tu auras leur signification.
Quant au type de curseur utilisé :
CursorType = adOpenForwardOnly
Effectivement, c'est le curseur le plus rapide et qui demande le moins de
ressource système. Par contre, tu ne pourras
utiliser la méthode RecordCount de ton recordset car la valeur renvoyé
sera toujours égale à -1 . De plus, comme son nom
l'indique, le curseur se déplace de l'enregistrement 1 au dernier ... le
curseur va toujours de l'avant et ne recule pas
....! Mais si l'objectif est de collé le recordset dans une feuille excel,
c'est suffisant ... enfin, encore une fois,
il doit y avoir quelque chose dans l'aide !
Je te suggère d'utiliser aussi un bidule comme ceci pour gérer le
recouvrement du recordset.
Bof = Beginning of file -> juste avant le premier enregistrement
Eof = End of file -> juste après le dernier enregistrement.
Rst = recordset
If Rst.BOF = True And Rst.EOF = True Then
MsgBox "Aucun enregistrement trouvé."
Else
'copie le recordset
With Worksheets("Feuil1") 'à déterminer
.Range("A1").CopyFromRecordset Rst
End With
End If
Enfin, les messages d'erreur permettre aiguiller les recherches lorsque
quelque chose ne tourne pas rond.
P.S. Comme je n'évolue pas dans un environnement réseau, les propositions
n'ont pas été testées !
Salutations!
"Alain79" a écrit dans le message de news:
cuo5sb$jg1$
Merci "MichDenis" - Ton intervention me semble providentielle !!! mais je
n'en saisie pas toute la portée, dommage... Un grand merci tout de même
1 - Pour remettre en évidence l'erreur avant de faire des modifications
j'ai
ouvert deux sessions Excel sur ma machine et ai lancé la même fonction sur
les deux instance d'Excel - le fichier "sondé" par l'ADO étant un seul et
même workbook excel situé sur un serveur sur le net => l'erreur se
produisait bien comme espéré
2 - J'ai dans un premier temps forcé le Recordset.CursorType à
adOpenForwardOnly cela a semble t'il eu pour effet d'accélerer
sensiblement
les opérations mais sans empécher pour autant la collision fatale lorsque
je
lançais les deux appli en même temps - En tout cas déjà un bel effort...
3 - J'ai dans un deuxième temps fait passer Connection.mode à adModeWrite.
Après avoir fait cette deuxième modif je n'arrive plus à reproduire le
fameux "Catastrophic failure" - Bravo! - le problème semble réglé mais je
ne
saisie pas vraiment cette notion de mode - Je me serais attendu à devoir
utiliser adModeRead ou encore adModeReadWrite ou encore
adModeShareDenyNone
mais pas adModeWrite - si ce n'est pas trop demandé que signifie ce mode,
la
doc ne m'inspire pas vraiment... En quoi le mode adModeWrite permet
l'accès
concurentiel de deux appli excel faisant appel a des connexions ADO sur le
même fichier?
4 - Merci également pour le code d'erreur, je n'ai pas eu le temps de le
mettre en oeuvre à la place du mien mais je le met au chaud pour le
futur...
Mon code d'erreur se résumais à On Error Resume Next encadrant l'ouverture
du recordset mais en fait ne me protégais pas du tout du "Catastrophic
Failure"
5 - Dois-je insiter sur les paramètres additionel du recordset que sont
adLockReadOnly, adCmdText - tu les mentionnes dans ton exemple.
Mon code devient: (sans mention du code d'erreur)Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
"MichDenis" wrote in message
news:Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la
solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
deleur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et
dans
celle de récupéper les données - genre pas bien précisé que je ne
voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Bonjour Alain79,
Le mode .Mode = adModeWrite
Permet d'ouvrir une connexion en mode lecture seulement malgré les
apparences.
Pour obtenir toutes les constantes possibles :
Dim x As ADODB.ConnectModeEnum
x = adModeWrite
Si tu effaces le signe "=" et que tu le retype et que tu appuies après sur
la barre d'espacement, une liste déroulante
devrait apparaître avec la liste des constantes disponibles. Probablement
dans l'aide, tu auras leur signification.
Quant au type de curseur utilisé :
CursorType = adOpenForwardOnly
Effectivement, c'est le curseur le plus rapide et qui demande le moins de
ressource système. Par contre, tu ne pourras
utiliser la méthode RecordCount de ton recordset car la valeur renvoyé
sera toujours égale à -1 . De plus, comme son nom
l'indique, le curseur se déplace de l'enregistrement 1 au dernier ... le
curseur va toujours de l'avant et ne recule pas
....! Mais si l'objectif est de collé le recordset dans une feuille excel,
c'est suffisant ... enfin, encore une fois,
il doit y avoir quelque chose dans l'aide !
Je te suggère d'utiliser aussi un bidule comme ceci pour gérer le
recouvrement du recordset.
Bof = Beginning of file -> juste avant le premier enregistrement
Eof = End of file -> juste après le dernier enregistrement.
Rst = recordset
If Rst.BOF = True And Rst.EOF = True Then
MsgBox "Aucun enregistrement trouvé."
Else
'copie le recordset
With Worksheets("Feuil1") 'à déterminer
.Range("A1").CopyFromRecordset Rst
End With
End If
Enfin, les messages d'erreur permettre aiguiller les recherches lorsque
quelque chose ne tourne pas rond.
P.S. Comme je n'évolue pas dans un environnement réseau, les propositions
n'ont pas été testées !
Salutations!
"Alain79" <desaivresanospam@free.fr> a écrit dans le message de news:
cuo5sb$jg1$1@s1.news.oleane.net...
Merci "MichDenis" - Ton intervention me semble providentielle !!! mais je
n'en saisie pas toute la portée, dommage... Un grand merci tout de même
1 - Pour remettre en évidence l'erreur avant de faire des modifications
j'ai
ouvert deux sessions Excel sur ma machine et ai lancé la même fonction sur
les deux instance d'Excel - le fichier "sondé" par l'ADO étant un seul et
même workbook excel situé sur un serveur sur le net => l'erreur se
produisait bien comme espéré
2 - J'ai dans un premier temps forcé le Recordset.CursorType à
adOpenForwardOnly cela a semble t'il eu pour effet d'accélerer
sensiblement
les opérations mais sans empécher pour autant la collision fatale lorsque
je
lançais les deux appli en même temps - En tout cas déjà un bel effort...
3 - J'ai dans un deuxième temps fait passer Connection.mode à adModeWrite.
Après avoir fait cette deuxième modif je n'arrive plus à reproduire le
fameux "Catastrophic failure" - Bravo! - le problème semble réglé mais je
ne
saisie pas vraiment cette notion de mode - Je me serais attendu à devoir
utiliser adModeRead ou encore adModeReadWrite ou encore
adModeShareDenyNone
mais pas adModeWrite - si ce n'est pas trop demandé que signifie ce mode,
la
doc ne m'inspire pas vraiment... En quoi le mode adModeWrite permet
l'accès
concurentiel de deux appli excel faisant appel a des connexions ADO sur le
même fichier?
4 - Merci également pour le code d'erreur, je n'ai pas eu le temps de le
mettre en oeuvre à la place du mien mais je le met au chaud pour le
futur...
Mon code d'erreur se résumais à On Error Resume Next encadrant l'ouverture
du recordset mais en fait ne me protégais pas du tout du "Catastrophic
Failure"
5 - Dois-je insiter sur les paramètres additionel du recordset que sont
adLockReadOnly, adCmdText - tu les mentionnes dans ton exemple.
Mon code devient: (sans mention du code d'erreur)
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
"MichDenis" <michdenis@hotmail.com> wrote in message
news:ub0cDjdEFHA.3648@TK2MSFTNGP10.phx.gbl...
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la
solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" <desaivresanospam@free.fr> a écrit dans le message de news:
cun9md$6mq$1@s1.news.oleane.net...
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et
dans
celle de récupéper les données - genre pas bien précisé que je ne
voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Bonjour Alain79,
Le mode .Mode = adModeWrite
Permet d'ouvrir une connexion en mode lecture seulement malgré les
apparences.
Pour obtenir toutes les constantes possibles :
Dim x As ADODB.ConnectModeEnum
x = adModeWrite
Si tu effaces le signe "=" et que tu le retype et que tu appuies après sur
la barre d'espacement, une liste déroulante
devrait apparaître avec la liste des constantes disponibles. Probablement
dans l'aide, tu auras leur signification.
Quant au type de curseur utilisé :
CursorType = adOpenForwardOnly
Effectivement, c'est le curseur le plus rapide et qui demande le moins de
ressource système. Par contre, tu ne pourras
utiliser la méthode RecordCount de ton recordset car la valeur renvoyé
sera toujours égale à -1 . De plus, comme son nom
l'indique, le curseur se déplace de l'enregistrement 1 au dernier ... le
curseur va toujours de l'avant et ne recule pas
....! Mais si l'objectif est de collé le recordset dans une feuille excel,
c'est suffisant ... enfin, encore une fois,
il doit y avoir quelque chose dans l'aide !
Je te suggère d'utiliser aussi un bidule comme ceci pour gérer le
recouvrement du recordset.
Bof = Beginning of file -> juste avant le premier enregistrement
Eof = End of file -> juste après le dernier enregistrement.
Rst = recordset
If Rst.BOF = True And Rst.EOF = True Then
MsgBox "Aucun enregistrement trouvé."
Else
'copie le recordset
With Worksheets("Feuil1") 'à déterminer
.Range("A1").CopyFromRecordset Rst
End With
End If
Enfin, les messages d'erreur permettre aiguiller les recherches lorsque
quelque chose ne tourne pas rond.
P.S. Comme je n'évolue pas dans un environnement réseau, les propositions
n'ont pas été testées !
Salutations!
"Alain79" a écrit dans le message de news:
cuo5sb$jg1$
Merci "MichDenis" - Ton intervention me semble providentielle !!! mais je
n'en saisie pas toute la portée, dommage... Un grand merci tout de même
1 - Pour remettre en évidence l'erreur avant de faire des modifications
j'ai
ouvert deux sessions Excel sur ma machine et ai lancé la même fonction sur
les deux instance d'Excel - le fichier "sondé" par l'ADO étant un seul et
même workbook excel situé sur un serveur sur le net => l'erreur se
produisait bien comme espéré
2 - J'ai dans un premier temps forcé le Recordset.CursorType à
adOpenForwardOnly cela a semble t'il eu pour effet d'accélerer
sensiblement
les opérations mais sans empécher pour autant la collision fatale lorsque
je
lançais les deux appli en même temps - En tout cas déjà un bel effort...
3 - J'ai dans un deuxième temps fait passer Connection.mode à adModeWrite.
Après avoir fait cette deuxième modif je n'arrive plus à reproduire le
fameux "Catastrophic failure" - Bravo! - le problème semble réglé mais je
ne
saisie pas vraiment cette notion de mode - Je me serais attendu à devoir
utiliser adModeRead ou encore adModeReadWrite ou encore
adModeShareDenyNone
mais pas adModeWrite - si ce n'est pas trop demandé que signifie ce mode,
la
doc ne m'inspire pas vraiment... En quoi le mode adModeWrite permet
l'accès
concurentiel de deux appli excel faisant appel a des connexions ADO sur le
même fichier?
4 - Merci également pour le code d'erreur, je n'ai pas eu le temps de le
mettre en oeuvre à la place du mien mais je le met au chaud pour le
futur...
Mon code d'erreur se résumais à On Error Resume Next encadrant l'ouverture
du recordset mais en fait ne me protégais pas du tout du "Catastrophic
Failure"
5 - Dois-je insiter sur les paramètres additionel du recordset que sont
adLockReadOnly, adCmdText - tu les mentionnes dans ton exemple.
Mon code devient: (sans mention du code d'erreur)Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
"MichDenis" wrote in message
news:Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la
solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
deleur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et
dans
celle de récupéper les données - genre pas bien précisé que je ne
voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" <desaivresanospam@free.fr> a écrit dans le message de news:
cun9md$6mq$1@s1.news.oleane.net...
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et dans
celle de récupéper les données - genre pas bien précisé que je ne voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Bonjour Alain79,
Le mode .Mode = adModeWrite
Permet d'ouvrir une connexion en mode lecture seulement malgré les
apparences.
Pour obtenir toutes les constantes possibles :
Dim x As ADODB.ConnectModeEnum
x = adModeWrite
Si tu effaces le signe "=" et que tu le retype et que tu appuies après sur
la barre d'espacement, une liste déroulante
devrait apparaître avec la liste des constantes disponibles. Probablement
dans l'aide, tu auras leur signification.
Quant au type de curseur utilisé :
CursorType = adOpenForwardOnly
Effectivement, c'est le curseur le plus rapide et qui demande le moins de
ressource système. Par contre, tu ne pourras
utiliser la méthode RecordCount de ton recordset car la valeur renvoyé
sera toujours égale à -1 . De plus, comme son nom
l'indique, le curseur se déplace de l'enregistrement 1 au dernier ... le
curseur va toujours de l'avant et ne recule pas
....! Mais si l'objectif est de collé le recordset dans une feuille excel,
c'est suffisant ... enfin, encore une fois,
il doit y avoir quelque chose dans l'aide !
Je te suggère d'utiliser aussi un bidule comme ceci pour gérer le
recouvrement du recordset.
Bof = Beginning of file -> juste avant le premier enregistrement
Eof = End of file -> juste après le dernier enregistrement.
Rst = recordset
If Rst.BOF = True And Rst.EOF = True Then
MsgBox "Aucun enregistrement trouvé."
Else
'copie le recordset
With Worksheets("Feuil1") 'à déterminer
.Range("A1").CopyFromRecordset Rst
End With
End If
Enfin, les messages d'erreur permettre aiguiller les recherches lorsque
quelque chose ne tourne pas rond.
P.S. Comme je n'évolue pas dans un environnement réseau, les propositions
n'ont pas été testées !
Salutations!
"Alain79" a écrit dans le message de news:
cuo5sb$jg1$
Merci "MichDenis" - Ton intervention me semble providentielle !!! mais je
n'en saisie pas toute la portée, dommage... Un grand merci tout de même
1 - Pour remettre en évidence l'erreur avant de faire des modifications
j'ai
ouvert deux sessions Excel sur ma machine et ai lancé la même fonction sur
les deux instance d'Excel - le fichier "sondé" par l'ADO étant un seul et
même workbook excel situé sur un serveur sur le net => l'erreur se
produisait bien comme espéré
2 - J'ai dans un premier temps forcé le Recordset.CursorType à
adOpenForwardOnly cela a semble t'il eu pour effet d'accélerer
sensiblement
les opérations mais sans empécher pour autant la collision fatale lorsque
je
lançais les deux appli en même temps - En tout cas déjà un bel effort...
3 - J'ai dans un deuxième temps fait passer Connection.mode à adModeWrite.
Après avoir fait cette deuxième modif je n'arrive plus à reproduire le
fameux "Catastrophic failure" - Bravo! - le problème semble réglé mais je
ne
saisie pas vraiment cette notion de mode - Je me serais attendu à devoir
utiliser adModeRead ou encore adModeReadWrite ou encore
adModeShareDenyNone
mais pas adModeWrite - si ce n'est pas trop demandé que signifie ce mode,
la
doc ne m'inspire pas vraiment... En quoi le mode adModeWrite permet
l'accès
concurentiel de deux appli excel faisant appel a des connexions ADO sur le
même fichier?
4 - Merci également pour le code d'erreur, je n'ai pas eu le temps de le
mettre en oeuvre à la place du mien mais je le met au chaud pour le
futur...
Mon code d'erreur se résumais à On Error Resume Next encadrant l'ouverture
du recordset mais en fait ne me protégais pas du tout du "Catastrophic
Failure"
5 - Dois-je insiter sur les paramètres additionel du recordset que sont
adLockReadOnly, adCmdText - tu les mentionnes dans ton exemple.
Mon code devient: (sans mention du code d'erreur)Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
"MichDenis" wrote in message
news:Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la
solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
deleur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et
dans
celle de récupéper les données - genre pas bien précisé que je ne
voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Bonjour Alain79,
Le mode .Mode = adModeWrite
Permet d'ouvrir une connexion en mode lecture seulement malgré les
apparences.
Pour obtenir toutes les constantes possibles :
Dim x As ADODB.ConnectModeEnum
x = adModeWrite
Si tu effaces le signe "=" et que tu le retype et que tu appuies après sur
la barre d'espacement, une liste déroulante
devrait apparaître avec la liste des constantes disponibles. Probablement
dans l'aide, tu auras leur signification.
Quant au type de curseur utilisé :
CursorType = adOpenForwardOnly
Effectivement, c'est le curseur le plus rapide et qui demande le moins de
ressource système. Par contre, tu ne pourras
utiliser la méthode RecordCount de ton recordset car la valeur renvoyé
sera toujours égale à -1 . De plus, comme son nom
l'indique, le curseur se déplace de l'enregistrement 1 au dernier ... le
curseur va toujours de l'avant et ne recule pas
....! Mais si l'objectif est de collé le recordset dans une feuille excel,
c'est suffisant ... enfin, encore une fois,
il doit y avoir quelque chose dans l'aide !
Je te suggère d'utiliser aussi un bidule comme ceci pour gérer le
recouvrement du recordset.
Bof = Beginning of file -> juste avant le premier enregistrement
Eof = End of file -> juste après le dernier enregistrement.
Rst = recordset
If Rst.BOF = True And Rst.EOF = True Then
MsgBox "Aucun enregistrement trouvé."
Else
'copie le recordset
With Worksheets("Feuil1") 'à déterminer
.Range("A1").CopyFromRecordset Rst
End With
End If
Enfin, les messages d'erreur permettre aiguiller les recherches lorsque
quelque chose ne tourne pas rond.
P.S. Comme je n'évolue pas dans un environnement réseau, les propositions
n'ont pas été testées !
Salutations!
"Alain79" <desaivresanospam@free.fr> a écrit dans le message de news:
cuo5sb$jg1$1@s1.news.oleane.net...
Merci "MichDenis" - Ton intervention me semble providentielle !!! mais je
n'en saisie pas toute la portée, dommage... Un grand merci tout de même
1 - Pour remettre en évidence l'erreur avant de faire des modifications
j'ai
ouvert deux sessions Excel sur ma machine et ai lancé la même fonction sur
les deux instance d'Excel - le fichier "sondé" par l'ADO étant un seul et
même workbook excel situé sur un serveur sur le net => l'erreur se
produisait bien comme espéré
2 - J'ai dans un premier temps forcé le Recordset.CursorType à
adOpenForwardOnly cela a semble t'il eu pour effet d'accélerer
sensiblement
les opérations mais sans empécher pour autant la collision fatale lorsque
je
lançais les deux appli en même temps - En tout cas déjà un bel effort...
3 - J'ai dans un deuxième temps fait passer Connection.mode à adModeWrite.
Après avoir fait cette deuxième modif je n'arrive plus à reproduire le
fameux "Catastrophic failure" - Bravo! - le problème semble réglé mais je
ne
saisie pas vraiment cette notion de mode - Je me serais attendu à devoir
utiliser adModeRead ou encore adModeReadWrite ou encore
adModeShareDenyNone
mais pas adModeWrite - si ce n'est pas trop demandé que signifie ce mode,
la
doc ne m'inspire pas vraiment... En quoi le mode adModeWrite permet
l'accès
concurentiel de deux appli excel faisant appel a des connexions ADO sur le
même fichier?
4 - Merci également pour le code d'erreur, je n'ai pas eu le temps de le
mettre en oeuvre à la place du mien mais je le met au chaud pour le
futur...
Mon code d'erreur se résumais à On Error Resume Next encadrant l'ouverture
du recordset mais en fait ne me protégais pas du tout du "Catastrophic
Failure"
5 - Dois-je insiter sur les paramètres additionel du recordset que sont
adLockReadOnly, adCmdText - tu les mentionnes dans ton exemple.
Mon code devient: (sans mention du code d'erreur)
Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
"MichDenis" <michdenis@hotmail.com> wrote in message
news:ub0cDjdEFHA.3648@TK2MSFTNGP10.phx.gbl...
Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la
solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" <desaivresanospam@free.fr> a écrit dans le message de news:
cun9md$6mq$1@s1.news.oleane.net...
J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
de
leur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et
dans
celle de récupéper les données - genre pas bien précisé que je ne
voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79
Bonjour Alain79,
Le mode .Mode = adModeWrite
Permet d'ouvrir une connexion en mode lecture seulement malgré les
apparences.
Pour obtenir toutes les constantes possibles :
Dim x As ADODB.ConnectModeEnum
x = adModeWrite
Si tu effaces le signe "=" et que tu le retype et que tu appuies après sur
la barre d'espacement, une liste déroulante
devrait apparaître avec la liste des constantes disponibles. Probablement
dans l'aide, tu auras leur signification.
Quant au type de curseur utilisé :
CursorType = adOpenForwardOnly
Effectivement, c'est le curseur le plus rapide et qui demande le moins de
ressource système. Par contre, tu ne pourras
utiliser la méthode RecordCount de ton recordset car la valeur renvoyé
sera toujours égale à -1 . De plus, comme son nom
l'indique, le curseur se déplace de l'enregistrement 1 au dernier ... le
curseur va toujours de l'avant et ne recule pas
....! Mais si l'objectif est de collé le recordset dans une feuille excel,
c'est suffisant ... enfin, encore une fois,
il doit y avoir quelque chose dans l'aide !
Je te suggère d'utiliser aussi un bidule comme ceci pour gérer le
recouvrement du recordset.
Bof = Beginning of file -> juste avant le premier enregistrement
Eof = End of file -> juste après le dernier enregistrement.
Rst = recordset
If Rst.BOF = True And Rst.EOF = True Then
MsgBox "Aucun enregistrement trouvé."
Else
'copie le recordset
With Worksheets("Feuil1") 'à déterminer
.Range("A1").CopyFromRecordset Rst
End With
End If
Enfin, les messages d'erreur permettre aiguiller les recherches lorsque
quelque chose ne tourne pas rond.
P.S. Comme je n'évolue pas dans un environnement réseau, les propositions
n'ont pas été testées !
Salutations!
"Alain79" a écrit dans le message de news:
cuo5sb$jg1$
Merci "MichDenis" - Ton intervention me semble providentielle !!! mais je
n'en saisie pas toute la portée, dommage... Un grand merci tout de même
1 - Pour remettre en évidence l'erreur avant de faire des modifications
j'ai
ouvert deux sessions Excel sur ma machine et ai lancé la même fonction sur
les deux instance d'Excel - le fichier "sondé" par l'ADO étant un seul et
même workbook excel situé sur un serveur sur le net => l'erreur se
produisait bien comme espéré
2 - J'ai dans un premier temps forcé le Recordset.CursorType à
adOpenForwardOnly cela a semble t'il eu pour effet d'accélerer
sensiblement
les opérations mais sans empécher pour autant la collision fatale lorsque
je
lançais les deux appli en même temps - En tout cas déjà un bel effort...
3 - J'ai dans un deuxième temps fait passer Connection.mode à adModeWrite.
Après avoir fait cette deuxième modif je n'arrive plus à reproduire le
fameux "Catastrophic failure" - Bravo! - le problème semble réglé mais je
ne
saisie pas vraiment cette notion de mode - Je me serais attendu à devoir
utiliser adModeRead ou encore adModeReadWrite ou encore
adModeShareDenyNone
mais pas adModeWrite - si ce n'est pas trop demandé que signifie ce mode,
la
doc ne m'inspire pas vraiment... En quoi le mode adModeWrite permet
l'accès
concurentiel de deux appli excel faisant appel a des connexions ADO sur le
même fichier?
4 - Merci également pour le code d'erreur, je n'ai pas eu le temps de le
mettre en oeuvre à la place du mien mais je le met au chaud pour le
futur...
Mon code d'erreur se résumais à On Error Resume Next encadrant l'ouverture
du recordset mais en fait ne me protégais pas du tout du "Catastrophic
Failure"
5 - Dois-je insiter sur les paramètres additionel du recordset que sont
adLockReadOnly, adCmdText - tu les mentionnes dans ton exemple.
Mon code devient: (sans mention du code d'erreur)Set updADOConnection = New ADODB.Connection
With updADOConnection
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
La récup de data se faisant avec:
With recordset
.CursorType = adOpenForwardOnly
.Open Source:=SqlStringSeq, ActiveConnection:=Connection
End With
"MichDenis" wrote in message
news:Bonjour Alain79,
As-tu essayé quelque chose dans le genre :
J'ai ajouté ceci à ta connexion : Mode = adModeWrite
Et j'ai ajouté une gestion d'erreur, peut être nous donnera-t-elle plus
d'informations sur ce qui ne va pas.
Si tu résout la problématique, j'aimerais bien que tu publies la
solution.
'------------------------------------
Sub LaProcedure()
Dim Gestion_Error As String
On Error GoTo Gestion_Erreur
Set updADOConnection = New ADODB.Connection
With updADOConnection
'Users can not write data
.Mode = adModeWrite
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & updRefSourceFile_path & ";" & _
"Extended Properties=Excel 8.0;"
.CursorLocation = adUseClient
.Open
End With
'Pour ce qui est du curseur de ton recordset
'si c'est seulement pour importer des données
'Avant d'ouvrir le recordset
'rst.CursorType = adOpenForwardOnly
'recordset(rst)
Rst.Open [Source], updADOConnection, _
adOpenForwardOnly, adLockReadOnly, adCmdText
'..../....
Rst.Close
updADOConnection.Close
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
Gestion_Erreur:
Dim Erreur As ADODB.Error
For Each Erreur In updADOConnection.Errors
MsgBox "Erreur : " & Erreur.Description
Next
'Pour fermer le Recordset(rst)
If (Rst.State & adStateOpen) Then Rst.Close
'Pour fermer la connexion si elle est ouverte
If (updADOConnection.State & adStateConnecting) Then
updADOConnection.Close
End If
Set Rst = Nothing: Set updADOConnection = Nothing
Exit Sub
End Sub
'------------------------------
Salutations!
"Alain79" a écrit dans le message de news:
cun9md$6mq$J'utilise ADO pour extraire des données d'un Classeur et cela fonctionne
fort bien mais il y a un mais...
Lorsque plusieurs utilisateurs active la fonction en même temps à partir
deleur propre machine, Excel génère des "Catastrophic error" rien que
cela...
Aurais-je loupé quelquechose dans la façon d'établir la connexion et
dans
celle de récupéper les données - genre pas bien précisé que je ne
voulais
faire que de la lecture...
Ou alors est-ce tout simplement innévitable...
Le fichier attaqué est un classeur Excel (partagé) situé sur un serveur
Le code de connexion est le suivant
-> Set updADOConnection = New ADODB.Connection
-> With updADOConnection
-> .ConnectionString = _
-> "Provider=Microsoft.Jet.OLEDB.4.0;" & _
-> "Data Source=" & updRefSourceFile_path & ";" & _
-> "Extended Properties=Excel 8.0;"
-> .CursorLocation = adUseClient
-> .Open
-> End With
La récup de data se faisan avec:
- .Open Source:=SqlStringSeq, ActiveConnection:=Connection
ou SqlStringSeq est une string préparée à l'avance
Merci vous
Alain79