Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Base Donnée ouvert par Excel et VB [ Archives Visual Basic / Bases de données ] (Charlie)

lundi 15 juillet 2002 à 15:54:57 | Base Donnée ouvert par Excel et VB

Charlie

Allo...

J'utilise une base de donnée qui est ouverte a la fois par Excel et VB. Mon problème est que je ne sais pas comment couper la connexion a ma BD en Excel.

Car VB ouvre ma BD, par la suite c'est Excel pour retourner vers VB. Toutefois, quand j'essai de retourner vers VB il me marque un message d'erreur car la BD est déja ouverte. Mais une fois que j'ai importé mes données dans excel, j'ai pu besoin du lien mais je dois garder Excel ouvert.

Quoi faire a part sauvegarder le fichier et le ré-ouvrir???

Merci

mardi 16 juillet 2002 à 17:47:45 | Re : Base Donnée ouvert par Excel et VB

skrol29

Si tu donnait un peu + d'info peut être qu'on pourrait t'aider.
Quelle est cette base de donnée qui n'accepte qu'une seule connexion (Access ?).
Quelle méthode est utilisée pour lier Excel et la base ?

--------------------
Skrol 29
www.skrol29.com
--------------------


-------------------------------
Réponse au message :
-------------------------------

Allo...

J'utilise une base de donnée qui est ouverte a la fois par Excel et VB. Mon problème est que je ne sais pas comment couper la connexion a ma BD en Excel.

Car VB ouvre ma BD, par la suite c'est Excel pour retourner vers VB. Toutefois, quand j'essai de retourner vers VB il me marque un message d'erreur car la BD est déja ouverte. Mais une fois que j'ai importé mes données dans excel, j'ai pu besoin du lien mais je dois garder Excel ouvert.

Quoi faire a part sauvegarder le fichier et le ré-ouvrir???

Merci

mardi 16 juillet 2002 à 18:03:34 | Re : Base Donnée ouvert par Excel et VB

Charlie

Allo... je me débrouille pas si mal en C++ mais je commence en VB la... Alors, je ne connais pas encore tout les termes!


Mon programme VB utilise un controleur ADO pour ouvrir une base de donnée ACCESS...


Voici la déclaration de l'ouverture qui plante...
message d'erreur: Couldn't use "; file already in use.

Cat.ActiveConnection = "provider=microsoft.jet.oledb.3.51;" & "Data source =" & link & ";"

ou link= le chemin d'acces et Private Cat As New ADOX.Catalog

c'est ici que ca plante...

par la suite, j'active les tables comme ca:

cmdado.ActiveConnection = Cat.ActiveConnection
cmdado.CommandText = " select * from Project"

rsProject.CursorLocation = adUseClient
rsProject.CursorType = adOpenDynamic
rsProject.LockType = adLockOptimistic
rsProject.Open cmdado

Private cmdado As New ADODB.command
Private rsProject As New ADODB.Recordset


Pour lire excel... je fais l'équivalent de cliquer sur: Données, Données Externes, Importer des données... (cette fonction n'est pas valide en Excel97...)

Voici ce qu'il fait...
project.pname=== chemin d'acces de ma BD

Dim Excel97 as Excel.application

With excel97.Application.ActiveWorkbook
.Sheets.Add
.ActiveSheet.Name = "All Class"
With .Sheets("All Class")


With .QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\" & Project.pName & ";Mode=Share Deny Write;Extended Properti" _
, _
"es="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=4;Jet OLEDB:D" _
, _
"atabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=" _
, _
""""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLED" _
, "B:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"), Destination:= _
Range("C5"))
.CommandType = xlCmdTable
.CommandText = Array("Data")
.Name = Project.pName
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = Project.pPath & Project.pName
.Refresh BackgroundQuery:=False
End With
end with



Voila, j'espère avoir été clair...

-------------------------------
Réponse au message :
-------------------------------

Si tu donnait un peu + d'info peut être qu'on pourrait t'aider.
Quelle est cette base de donnée qui n'accepte qu'une seule connexion (Access ?).
Quelle méthode est utilisée pour lier Excel et la base ?

--------------------
Skrol 29
www.skrol29.com
--------------------


-------------------------------
Réponse au message :
-------------------------------

Allo...

J'utilise une base de donnée qui est ouverte a la fois par Excel et VB. Mon problème est que je ne sais pas comment couper la connexion a ma BD en Excel.

Car VB ouvre ma BD, par la suite c'est Excel pour retourner vers VB. Toutefois, quand j'essai de retourner vers VB il me marque un message d'erreur car la BD est déja ouverte. Mais une fois que j'ai importé mes données dans excel, j'ai pu besoin du lien mais je dois garder Excel ouvert.

Quoi faire a part sauvegarder le fichier et le ré-ouvrir???

Merci


mardi 16 juillet 2002 à 18:19:48 | Re : Base Donnée ouvert par Excel et VB

skrol29

Ton problème vient du fait que Access n'est pas client/serveur. Il est obligé de gérer le multi-utilisateur par des vérrous de fichier.

Je vois 2 moyens pour te dépatouiler :

1/ modifier la chaîne de connexion Excel pour spécifier une lecture seule. Y'a des paramètres pour ça mais je sais plus lequel 'sorry).

2/ + propre : supprime le code généré par Excel et pilote le transfert de données en pilotant Excel depuis ton prog VB (avec OLE).

Explications : Excel utilise une connexion spéciale qui est ouverte et maintenue tant que le classeur est ouvert. C'est pratique pour un utilisateur neuneu, mais crée des complications pour les programmeurs.
Sous VB, tu peux créer une instance du moteur Excel (voir CreateObject), et piloter Excel avec un nouveau classeur ou un classeur déjà existante, exactement comme le faisait le code sous Excel. C'est le même language. Quand le job est fini, tu détruit l'instance.

--------------------
Skrol 29
www.skrol29.com
--------------------


-------------------------------
Réponse au message :
-------------------------------

Allo... je me débrouille pas si mal en C++ mais je commence en VB la... Alors, je ne connais pas encore tout les termes!


Mon programme VB utilise un controleur ADO pour ouvrir une base de donnée ACCESS...


Voici la déclaration de l'ouverture qui plante...
message d'erreur: Couldn't use "; file already in use.

Cat.ActiveConnection = "provider=microsoft.jet.oledb.3.51;" & "Data source =" & link & ";"

ou link= le chemin d'acces et Private Cat As New ADOX.Catalog

c'est ici que ca plante...

par la suite, j'active les tables comme ca:

cmdado.ActiveConnection = Cat.ActiveConnection
cmdado.CommandText = " select * from Project"

rsProject.CursorLocation = adUseClient
rsProject.CursorType = adOpenDynamic
rsProject.LockType = adLockOptimistic
rsProject.Open cmdado

Private cmdado As New ADODB.command
Private rsProject As New ADODB.Recordset


Pour lire excel... je fais l'équivalent de cliquer sur: Données, Données Externes, Importer des données... (cette fonction n'est pas valide en Excel97...)

Voici ce qu'il fait...
project.pname=== chemin d'acces de ma BD

Dim Excel97 as Excel.application

With excel97.Application.ActiveWorkbook
.Sheets.Add
.ActiveSheet.Name = "All Class"
With .Sheets("All Class")


With .QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\" & Project.pName & ";Mode=Share Deny Write;Extended Properti" _
, _
"es="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=4;Jet OLEDB:D" _
, _
"atabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=" _
, _
""""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLED" _
, "B:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"), Destination:= _
Range("C5"))
.CommandType = xlCmdTable
.CommandText = Array("Data")
.Name = Project.pName
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = Project.pPath & Project.pName
.Refresh BackgroundQuery:=False
End With
end with



Voila, j'espère avoir été clair...

-------------------------------
Réponse au message :
-------------------------------

Si tu donnait un peu + d'info peut être qu'on pourrait t'aider.
Quelle est cette base de donnée qui n'accepte qu'une seule connexion (Access ?).
Quelle méthode est utilisée pour lier Excel et la base ?

--------------------
Skrol 29
www.skrol29.com
--------------------


-------------------------------
Réponse au message :
-------------------------------

Allo...

J'utilise une base de donnée qui est ouverte a la fois par Excel et VB. Mon problème est que je ne sais pas comment couper la connexion a ma BD en Excel.

Car VB ouvre ma BD, par la suite c'est Excel pour retourner vers VB. Toutefois, quand j'essai de retourner vers VB il me marque un message d'erreur car la BD est déja ouverte. Mais une fois que j'ai importé mes données dans excel, j'ai pu besoin du lien mais je dois garder Excel ouvert.

Quoi faire a part sauvegarder le fichier et le ré-ouvrir???

Merci



mardi 16 juillet 2002 à 18:27:30 | Re : Base Donnée ouvert par Excel et VB

Charlie

Allo...

CE que tu me parle, avec le OLE... c'est d'ajouter une feuille excel dans une de mes forms...

Si c'est ca, ca cause un petit probleme car mon but est de convertir ma base de donné en fichier Excel pour faire plein de calculs et de stat et de tracer des graphs...

Alors, je ne peux pas vraiment ne pas utiliser excel dans toute sa puissance! C'est qu'il calcul pas mal plus vite que si je le ferais faire par mon programme par ailleurs.

Bye!



-------------------------------
Réponse au message :
-------------------------------

Ton problème vient du fait que Access n'est pas client/serveur. Il est obligé de gérer le multi-utilisateur par des vérrous de fichier.

Je vois 2 moyens pour te dépatouiler :

1/ modifier la chaîne de connexion Excel pour spécifier une lecture seule. Y'a des paramètres pour ça mais je sais plus lequel 'sorry).

2/ + propre : supprime le code généré par Excel et pilote le transfert de données en pilotant Excel depuis ton prog VB (avec OLE).

Explications : Excel utilise une connexion spéciale qui est ouverte et maintenue tant que le classeur est ouvert. C'est pratique pour un utilisateur neuneu, mais crée des complications pour les programmeurs.
Sous VB, tu peux créer une instance du moteur Excel (voir CreateObject), et piloter Excel avec un nouveau classeur ou un classeur déjà existante, exactement comme le faisait le code sous Excel. C'est le même language. Quand le job est fini, tu détruit l'instance.

--------------------
Skrol 29
www.skrol29.com
--------------------


-------------------------------
Réponse au message :
-------------------------------

Allo... je me débrouille pas si mal en C++ mais je commence en VB la... Alors, je ne connais pas encore tout les termes!


Mon programme VB utilise un controleur ADO pour ouvrir une base de donnée ACCESS...


Voici la déclaration de l'ouverture qui plante...
message d'erreur: Couldn't use "; file already in use.

Cat.ActiveConnection = "provider=microsoft.jet.oledb.3.51;" & "Data source =" & link & ";"

ou link= le chemin d'acces et Private Cat As New ADOX.Catalog

c'est ici que ca plante...

par la suite, j'active les tables comme ca:

cmdado.ActiveConnection = Cat.ActiveConnection
cmdado.CommandText = " select * from Project"

rsProject.CursorLocation = adUseClient
rsProject.CursorType = adOpenDynamic
rsProject.LockType = adLockOptimistic
rsProject.Open cmdado

Private cmdado As New ADODB.command
Private rsProject As New ADODB.Recordset


Pour lire excel... je fais l'équivalent de cliquer sur: Données, Données Externes, Importer des données... (cette fonction n'est pas valide en Excel97...)

Voici ce qu'il fait...
project.pname=== chemin d'acces de ma BD

Dim Excel97 as Excel.application

With excel97.Application.ActiveWorkbook
.Sheets.Add
.ActiveSheet.Name = "All Class"
With .Sheets("All Class")


With .QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\" & Project.pName & ";Mode=Share Deny Write;Extended Properti" _
, _
"es="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=4;Jet OLEDB:D" _
, _
"atabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=" _
, _
""""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLED" _
, "B:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"), Destination:= _
Range("C5"))
.CommandType = xlCmdTable
.CommandText = Array("Data")
.Name = Project.pName
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = Project.pPath & Project.pName
.Refresh BackgroundQuery:=False
End With
end with



Voila, j'espère avoir été clair...

-------------------------------
Réponse au message :
-------------------------------

Si tu donnait un peu + d'info peut être qu'on pourrait t'aider.
Quelle est cette base de donnée qui n'accepte qu'une seule connexion (Access ?).
Quelle méthode est utilisée pour lier Excel et la base ?

--------------------
Skrol 29
www.skrol29.com
--------------------


-------------------------------
Réponse au message :
-------------------------------

Allo...

J'utilise une base de donnée qui est ouverte a la fois par Excel et VB. Mon problème est que je ne sais pas comment couper la connexion a ma BD en Excel.

Car VB ouvre ma BD, par la suite c'est Excel pour retourner vers VB. Toutefois, quand j'essai de retourner vers VB il me marque un message d'erreur car la BD est déja ouverte. Mais une fois que j'ai importé mes données dans excel, j'ai pu besoin du lien mais je dois garder Excel ouvert.

Quoi faire a part sauvegarder le fichier et le ré-ouvrir???

Merci




mardi 16 juillet 2002 à 18:51:10 | Re : Base Donnée ouvert par Excel et VB

skrol29

>CE que tu me parle, avec le OLE... c'est d'ajouter >une feuille excel dans une de mes forms...

Non, non. Pas de l'OLE incorporée. Pas de feuille Excel dans tes forms. Beark caca.

Il s'agit de l'instruction
AppExcel = CreateObject("excel.application")

Tu peux aussi ajouter la Référence 'Microsoft Excel' à ton project, et le code suivant dans ta proc :
Dim AppExcel as Excel.Application
...
Set AppExcel = New Excel.Application 'charge Excel
...
Set AppExcel = Nothing 'décharge Excel

En ajoutant la référence, c'est + facile à programmer car l'environnement de prog te liste des propritétés et méthode d'Excel.

Maintenant, ta variable AppExcel contient un instance de la classe Excel entière. C'est à dire que tu peux faire depuis ton appli tout ce que tu faisait sous Excel, exctement de la même manière.
Par exemple :
AppExcel.ActiveWorkbook.Sheets.Add

Il te reste à remplir les cellules une par une.

Ha oui au fait : les graph existent aussi déjà sous Access. Ce sont les mêmes graph que sous Excel.
C'est peut être + simple.

--------------------
Skrol 29
www.skrol29.com
--------------------



mardi 16 juillet 2002 à 19:12:36 | Re : Base Donnée ouvert par Excel et VB

Charlie

C'est exactement de cette facon que je procède...

Au départ, j'ouvrais ma BD avec VB et je copiais les infos dans excel mais je me suis rendu compte que c'était beaucoup plus rapide (1min de moins) d'ouvrir la BD avec Excel meme si j'avais a interchanger des colonnes.

Faire une boucle qui parcours ma BD et qui acceder a mes recordset étais tres lent... 1min environ. Maintenant, j'importe mes données et je fais tout mes traitements en 45sec... Alors, le gain de temps est énorme!



-------------------------------
Réponse au message :
-------------------------------

>CE que tu me parle, avec le OLE... c'est d'ajouter >une feuille excel dans une de mes forms...

Non, non. Pas de l'OLE incorporée. Pas de feuille Excel dans tes forms. Beark caca.

Il s'agit de l'instruction
AppExcel = CreateObject("excel.application")

Tu peux aussi ajouter la Référence 'Microsoft Excel' à ton project, et le code suivant dans ta proc :
Dim AppExcel as Excel.Application
...
Set AppExcel = New Excel.Application 'charge Excel
...
Set AppExcel = Nothing 'décharge Excel

En ajoutant la référence, c'est + facile à programmer car l'environnement de prog te liste des propritétés et méthode d'Excel.

Maintenant, ta variable AppExcel contient un instance de la classe Excel entière. C'est à dire que tu peux faire depuis ton appli tout ce que tu faisait sous Excel, exctement de la même manière.
Par exemple :
AppExcel.ActiveWorkbook.Sheets.Add

Il te reste à remplir les cellules une par une.

Ha oui au fait : les graph existent aussi déjà sous Access. Ce sont les mêmes graph que sous Excel.
C'est peut être + simple.

--------------------
Skrol 29
www.skrol29.com
--------------------






Cette discussion est classé dans : base, vb, donnée, excel, ouvert


Répondre à ce message

Sujets en rapport avec ce message

Base Donnée ouvert par Excel et VB [ par Charlie ] Allo...J'utilise une base de donnée qui est ouverte a la fois par Excel et VB. Mon problème est que je ne sais pas comment couper la connexion a ma BD vb + base de donnée Excel [ par hamid_raf ] Salut mes amis,je suis entrain de réaliser dans le cadre d'un stage, une application VB plus Excel, l'interface en VB et la base de donnée est sous Ex Création d'une base de donnée excel en vb.net [ par toxjamescook ] bonjourVoila j'ai comme projet de faire en programme une base de donnée sous forme de tableau le but étant de pouvoir ouvrir cette base de donnée sur base de donnée excel avec VB [ par elvis78 ] bonjour a tous.j'aimerai savoir comment on peut a partir de VB de creer une feuille excel.je pense que l'on peut car ce sont tous les deux des produit Création d'une Base de donnée Excel [ par cdrique ] Cdrique Je suis un grand débutant du VB doublé d'un trés trés petit devellopeur. Je souhaite récupérer des données numériques inclusent dans des case lier une base de donnée excel a combobox vb6 [ par UrbanSyphon ] Bonjour,J' ai une feuille excel appelé engins qui appartient au classeur nommé compacteurs_vm . Je voudrai utiliser les valeurs de la colonne 2 pour l vb et excel [ par Fabian26 ] J'ai fait un programme qui capte des données sur le Port série. Ensuite je dois envoyer ces données dans un tableau Excel. Le problème est que je reco Compacter base de donnée vb access [ par manhino ] bonjour,J'ai un petit soucis car je voudrai compacter une table de ma base de donnée par programmation vba.J'ai une base de donnée dans laquelle j'ai modification d'une base de donnée [ par orzhov54 ] bonjour, je suis entrain de faire un logiciel en Visual Basic sous VB 2005, qui doit aller chercher des informations dans une base de donnée grace a u lier vb à une base de données en excel [ par oliboukou ] je suis en train de faire une application vb mais il me faut aller prendre des données dans une base excel, et ensuite les utiliser dans des formules;


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.