Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Bonjour
J'arrive très facilement à récupérer le contenu de ma base de données microsoft sur mon fichier Excel.
Cependant il faudrai que je fasse l'opération inverse.
CaD:
Pouvoir écrire, remplacer voir supprimer des écritures dans ma base de données directement depuis Excel.
le but est que les utilisateurs du fichier Excel puissent modifier simplement les données de la base.
J'ai vue qu'il existait plusieurs techniques (ADO oledb, ADO jet4.0, micro Query,etc.)
Malheureusement je n'ai aucune connaissance de ces outils.
Pour débuter, il faut comprendre le fonctionnement des opérations :
1/ Je crée ma connexion / me connecte à une bdd
2/ Je génère du code sql en vba (une variable string) => ce code SQL doit évidemment être testé sur MySql avant
3/ J'envoie mon SQL [si on est en Select, on travaillera sur les données sélectionnées]
4/ Je me déconnecte / détruit ma connexion
Une fois qu'on a compris cela, c'est plus facile pour tenter de comprendre les pages de ce type :
Pour débuter, il faut comprendre le fonctionnement des opérations :
1/ Je crée ma connexion / me connecte à une bdd
2/ Je génère du code sql en vba (une variable string) => ce code SQL doit évidemment être testé sur MySql avant
3/ J'envoie mon SQL [si on est en Select, on travaillera sur les données sélectionnées]
4/ Je me déconnecte / détruit ma connexion
Une fois qu'on a compris cela, c'est plus facile pour tenter de comprendre les pages de ce type :
Oui effectivement je travaille avec microsoft server 2008 R2 et non MySQL mais je pense que le principe reste le même.
avez un exemple de code à me fournir afin de comprendre le fonctionnement?
D'avance merci
Oui merci j'ai lu ce lien cette après midi:
Cependant ca reste très vague pour un novice comme moi.
Faut-il utiliser Micro Query ou ADO oledb?
et j'aimerai bien comprendre ce que je fais
Je ne sais même pas ou il faut inserrer ce code dans VBA, créer un module, le mettre dans la feuille1,2
voila l'appli actuel.(sans encore la possibilité d'écrire dans la base)
Je ne vois pas ce que je pourrais dire de plus que l'exemple du lien donné plus haut, qui est assez exhaustif.
A toi de potasser, faire tes tests et éventuellement de revenir avec des questions sur des points plus précis.
Sachant qu'excel ne sera jamais l'équivalent d'un SGBD.
A+
Non je ne le prend pas mal c'est simplement la réalité.
Oui je débute en VBA mais j'ai déja fais deux trois truc simplet comme tu px le voir si tu ouvre mon fichier excel.
Ok je vais commencer par la.
Qu'est ce que tu entend par il faudra au mieux coller une fonction de connexion et de déconnexion?
tu vx dire faire un bouton (command buton) avec lesquel tu te connecte à la base et un autre pour ce déconnecter?
Une procédure de travail??? c'est quoi? (lol reste calme?)
Merci déja pour ces infos.
Oui je vais faire des tests et revenir si j'ai des questions plus précise.
Cependant je ne savais même pas ou tester ce code avant que poulpor78 me le dise.
Je suis totalement conscient que excel n'est pas une SGDB.
Le but est juste de pouvoir écrire dans la base depuis excel. je ne vais pas faire de excel une SGDB.
Un peu plus de détail sur mon application:
Je récupère des état machine grace a un automate Wago (en prod, en panne, en attente, etc.)
Ses état son envoyer sur un serveur.
Puis le but est qu'une personne puisse utiliser le fichier excel pour faire des analyses des temps machine afin de dire:
tel J la machine était en production pendant 20h et en panne pendant 4h.
Cependant pour être juste dans nos anlayses, il faut pouvoir soustraire les temps de rebuts des pièces (soit suite à une faute d'usinage ou au fourniseur de fonderie, porosité ,etc.)
C'est pour cela que j'ai besoin d'écrire dans MsSQL depuis Excel. (car je ne px pas récupérer ses signaux depuis mon automate)
Afin que le responsable de sa machine puisse remplacer les heures de "en production" par "en rebut".
Je ne suis pas du tout énervé. Je n'ai pas de problème avec ça. Le truc, c'est qu'on s'attaque à une chose pas évidente. Quand on a un peu d'expérience en vba, ça évite de tout reprendre à la base; et je me demandais où tu en étais.
Donc, une fonction commence par function(), Une procédure commence par Sub()
Les deux se collent habituellement dans des modules. Ce qui existe dans le module1 du fichier Analyse. donc tu le savais déjà.
On écrit le code généralement dans une procédure. Mais on peut avoir des morceaux de code qu'on répète plusieurs fois (par exemple connexion/déconnexion à une bdd). Il peut donc être utile de placer ces morceaux de code dans des fonctions et de faire appel à ces fonctions.
Pour du MS SQL, mes fonctions sont :
Code:
Public DBCon As ADODB.CONNECTION
Function ConnexionBase()
TheDatabase = "TOTO"
DBCon.ConnectionTimeout = 20
DBCon.ConnectionString = "Driver={SQL Server};Server=####;Database=" & TheDatabase & ";Trusted_Connection=True;"
DBCon.Open
End Function
où "TOTO" est le nom de la BDD
où #### est le serveur SQL
Et :
Code:
Function FermetureBase()
If Not DBCon Is Nothing Then
If DBCon.State = adStateOpen Then DBCon.Close
Set DBCon = Nothing
End If
End Function
Déjà, essaie de faire fonctionner correctement ces deux fonctions. Pour cela, il faut t'assurer d'avoir les bonnes variables de connexion et d'avoir cocher dans outil/Références les bonnes références (voir mon précédent post)
L'utilisation exemple dans mon cas (c'est un select car je ne me permets jamais d'écrire dans une base sql d'entreprise) :
Code:
Sub Montest()
On Error GoTo Err:
Dim MonSql As String
Dim rstcomptes As New ADODB.Recordset
Dim i As Integer
CONNECTION.ConnexionBase
MonSql = "SELECT F_COMPTET.CT_Num, F_COMPTET.CT_Intitule,F_COMPTET.CT_Sommeil FROM F_COMPTET WHERE F_COMPTET.CT_Type=0 AND F_COMPTET.CT_Sommeil=0 ORDER BY F_COMPTET.CT_Num;"
rstcomptes.Open MonSql, DBCon, adOpenDynamic, adLockOptimistic
rstcomptes.MoveFirst
i = 1
While Not rstcomptes.EOF
ActiveSheet.Cells(i, 1).Value = rstcomptes("CT_Num")
i = i + 1
rstcomptes.MoveNext
Wend
CONNECTION.FermetureBase
Err:
If Err.Number <> 0 Then
CONNECTION.FermetureBase
MsgBox "Erreur : " & Err.Number & Chr(13) & Err.Description
End If
End Sub
C'est juste une requête dans une base comptable SAGE où je vais chercher des numéros de comptes et je vais les rapatrier dans ma feuille excel.
A noter : CONNECTION.ConnexionBase et CONNECTION.FermetureBase sont des appels à mes fonctions que j'ai placé dans une module nommé CONNECTION
Ainsi, dans mon classeur, chaque fois que je veux me connecter à la base, je n'ai qu'une seule ligne à mettre, ce qui rend mon code plus visible.
Je te conseille donc de commencer par tester si tu arrives à te connecter (parfois ce n'est pas si évident), à tester une requête Select (ça ne détruira rien !). Une fois cela assimilé, il faut foncer vers des liens qui indiquent comment exécuter du sql.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.