Excel exec procédure stockée SQL
Fermé
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
-
4 juin 2009 à 09:29
Ludivine50 Messages postés 114 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 1 février 2016 - 8 juin 2009 à 14:11
Ludivine50 Messages postés 114 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 1 février 2016 - 8 juin 2009 à 14:11
A voir également:
- Excel exec procédure stockée SQL
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
- Comment calculer la moyenne sur excel - Guide
5 réponses
NicoDisso
Messages postés
230
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
22 août 2009
32
8 juin 2009 à 12:27
8 juin 2009 à 12:27
Dans un module, VBA place ce qui est en gras
Dans le menu outils/références de VBA, selectionne Mircrosoft ActiveX Data Objets 2.? Library ou le ? depends de ce que tu as sur ton PC
Les 2 procedures ci-dessous, parcourt la feuille passer en parametre dans
call Exporte_SQL("feuill1").
Cela ecrit dans SQL les tranchesa et tranchesB des salaires ainsi que le nom d'utilisateur selon les trimestres ( c'est du code que j'avais tapé, donc c'est juste pour exemple )
Private DataBase_Commande As String 'COMMANDE A EFFECTUER SUR LA BASE DE DONNNES
Private DataBase_Connection As ADODB.Connection 'CONNECTION A LA BASE DE DONNEES
Private DataBase_ConnectionString As String 'CHAINE DE CONNECTION A LA BASE DE DONNEES
Private DataBase_ResultatCommande As ADODB.Recordset 'TABLEAU DE DONNEES RENVOYEES PAR LA REQUETE
Public Sub Exporte_SQL(Feuille As Worksheet)
Dim Ligne As Long
Ligne = 2
Do Until Feuille.Cells(Ligne, 20).Value = "" 'exporte jusqu'a ce que la cellule de la colonne 20 soit vide
Call Recap_SQL(Feuille.Cells(Ligne, 20).Value, Feuille.Name, Feuille.Cells(Ligne, 18).Value, Feuille.Cells(Ligne, 19).Value) 'exporte les cellules des colonnes 20,18,19 de la ligne en cours
Ligne = Ligne + 1
Loop
MsgBox "Exportation Terminée", vbInformation, "Nicolas : Information"
End Sub
Public Sub Recap_SQL(Fk_Employe As Integer, Periode As String, Tranche_A As Double, Tranche_B As Double)
Dim Requete As String
DataBase_ConnectionString = "Provider=SQLOLEDB.1;Password=motdepasse;Persist Security Info=True;User ID=sa;Initial Catalog=database;Data Source=serveur"
Select Case Periode
'-----------------------------
'-----------------------------
Case "1er Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_01_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_01_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
Case "2 Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_02_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_02_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
Case "3 Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_03_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_03_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
Case "4 Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_04_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_04_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
'-----------------------------
'-----------------------------
Case "1er Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_01_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_01_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
Case "2 Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_02_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_02_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
Case "3 Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_03_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_03_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
Case "4 Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_04_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_04_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
'-----------------------------
'-----------------------------
End Select
Set DataBase_Connection = New ADODB.Connection 'NOUVELLE CONNECTION A LA BASE DE DONNEES
On Error Resume Next 'MISE EN PLACE DE LA GESTION D'ERREUR
With DataBase_Connection 'TRAVAILLE DIRECTEMENT AVEC LA CONNECTION
.ConnectionTimeout = 5 'DELAI DE DECONNECTION SI ERREUR
.ConnectionString = DataBase_ConnectionString 'CHAINE DE CONNECTION A LA BASE DE DONNEES D'INTERFACE
.Open 'OUVRE LA CONNECTION
End With 'ARRETE DE TRAVAILLER DIRECTEMENT AVEC LA CONNECTION
If Err.Number = 0 Then 'SI ERREUR LORS DE LA CONNECTION A LA BASE DE DONNEES
Call DataBase_Connection.Execute(Requete) 'RESULAT DE LA COMMANDE
If Err.Number = 0 Then 'SI ERREUR
DataBase_Connection.Close
Set DataBase_Connection = Nothing
Else
DataBase_Connection.Close
Set DataBase_Connection = Nothing
MsgBox Err.Description, vbExclamation, "Nicolas : Avertissement"
End If
Else
DataBase_Connection.Close
Set DataBase_Connection = Nothing
MsgBox Err.Description, vbExclamation, "Nicolas : Avertissement"
End If
On Error GoTo 0 'ARRET DE LA GESTION D'ERREUR
End Sub
et voila...
Dans le menu outils/références de VBA, selectionne Mircrosoft ActiveX Data Objets 2.? Library ou le ? depends de ce que tu as sur ton PC
Les 2 procedures ci-dessous, parcourt la feuille passer en parametre dans
call Exporte_SQL("feuill1").
Cela ecrit dans SQL les tranchesa et tranchesB des salaires ainsi que le nom d'utilisateur selon les trimestres ( c'est du code que j'avais tapé, donc c'est juste pour exemple )
Private DataBase_Commande As String 'COMMANDE A EFFECTUER SUR LA BASE DE DONNNES
Private DataBase_Connection As ADODB.Connection 'CONNECTION A LA BASE DE DONNEES
Private DataBase_ConnectionString As String 'CHAINE DE CONNECTION A LA BASE DE DONNEES
Private DataBase_ResultatCommande As ADODB.Recordset 'TABLEAU DE DONNEES RENVOYEES PAR LA REQUETE
Public Sub Exporte_SQL(Feuille As Worksheet)
Dim Ligne As Long
Ligne = 2
Do Until Feuille.Cells(Ligne, 20).Value = "" 'exporte jusqu'a ce que la cellule de la colonne 20 soit vide
Call Recap_SQL(Feuille.Cells(Ligne, 20).Value, Feuille.Name, Feuille.Cells(Ligne, 18).Value, Feuille.Cells(Ligne, 19).Value) 'exporte les cellules des colonnes 20,18,19 de la ligne en cours
Ligne = Ligne + 1
Loop
MsgBox "Exportation Terminée", vbInformation, "Nicolas : Information"
End Sub
Public Sub Recap_SQL(Fk_Employe As Integer, Periode As String, Tranche_A As Double, Tranche_B As Double)
Dim Requete As String
DataBase_ConnectionString = "Provider=SQLOLEDB.1;Password=motdepasse;Persist Security Info=True;User ID=sa;Initial Catalog=database;Data Source=serveur"
Select Case Periode
'-----------------------------
'-----------------------------
Case "1er Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_01_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_01_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
Case "2 Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_02_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_02_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
Case "3 Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_03_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_03_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
Case "4 Trim 2008"
Requete = "UPDATE Tb_Employe SET Trim_04_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_04_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2008 AU 31/12/2008')"
'-----------------------------
'-----------------------------
Case "1er Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_01_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_01_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
Case "2 Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_02_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_02_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
Case "3 Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_03_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_03_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
Case "4 Trim 2009"
Requete = "UPDATE Tb_Employe SET Trim_04_Tranche_A =" & Replace(Tranche_A, ",", ".") & ", Trim_04_Tranche_B =" & Replace(Tranche_B, ",", ".") & " WHERE Fk_Employe =" & Fk_Employe & " AND (Periode = 'DU 01/01/2009 AU 31/12/2009')"
'-----------------------------
'-----------------------------
End Select
Set DataBase_Connection = New ADODB.Connection 'NOUVELLE CONNECTION A LA BASE DE DONNEES
On Error Resume Next 'MISE EN PLACE DE LA GESTION D'ERREUR
With DataBase_Connection 'TRAVAILLE DIRECTEMENT AVEC LA CONNECTION
.ConnectionTimeout = 5 'DELAI DE DECONNECTION SI ERREUR
.ConnectionString = DataBase_ConnectionString 'CHAINE DE CONNECTION A LA BASE DE DONNEES D'INTERFACE
.Open 'OUVRE LA CONNECTION
End With 'ARRETE DE TRAVAILLER DIRECTEMENT AVEC LA CONNECTION
If Err.Number = 0 Then 'SI ERREUR LORS DE LA CONNECTION A LA BASE DE DONNEES
Call DataBase_Connection.Execute(Requete) 'RESULAT DE LA COMMANDE
If Err.Number = 0 Then 'SI ERREUR
DataBase_Connection.Close
Set DataBase_Connection = Nothing
Else
DataBase_Connection.Close
Set DataBase_Connection = Nothing
MsgBox Err.Description, vbExclamation, "Nicolas : Avertissement"
End If
Else
DataBase_Connection.Close
Set DataBase_Connection = Nothing
MsgBox Err.Description, vbExclamation, "Nicolas : Avertissement"
End If
On Error GoTo 0 'ARRET DE LA GESTION D'ERREUR
End Sub
et voila...
NicoDisso
Messages postés
230
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
22 août 2009
32
4 juin 2009 à 10:13
4 juin 2009 à 10:13
peux tu afficher ta chaine de connection à ton serveur en masquant les parties serveur, utilisateur et mdp.
Je pense que c'est ton provider qui fait que tu as l'erreur.
Je pense que c'est ton provider qui fait que tu as l'erreur.
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
4 juin 2009 à 14:19
4 juin 2009 à 14:19
Bonjour NicoDisso et merci pour ta réponse,
J'utilise la chaîne de connexion suivante:
Dans le module CONNEXION:
Dans le module DELTA:
J'utilise la chaîne de connexion suivante:
Dans le module CONNEXION:
Public cN As ADODB.Connection Public Sub conNect() Set cN = New ADODB.Connection dbPath = Path cN.ConnectionString = "Provider=SQLOLEDB;Data Source=XXXXXXX;Initial Catalog=XXXXXXX; User ID=XXXXX;Password=XXXXXXXX;" cN.Open End Sub
Dans le module DELTA:
Sub TEST() CONNEXION.conNect cN.Execute ("exec PS_TEST") End Sub
NicoDisso
Messages postés
230
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
22 août 2009
32
4 juin 2009 à 19:12
4 juin 2009 à 19:12
alors la je ne comprends pas poruquoi dans ton message d'erreur du as du "Jet" alors que tu lui dis bien que tu fait du "SQLOLEDB" ...
tu as essayé de t'y connecter avec l'utilsateur SA et faire la manip ?
tu as essayé de t'y connecter avec l'utilsateur SA et faire la manip ?
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
5 juin 2009 à 18:14
5 juin 2009 à 18:14
Bonjour NicoDisso,
je n'ai pas encore pu tester avec "sa" car la personne qui a le mot de passe n'était pas dispo. Je vais tester lundi. Pour le "Jet", j'ai peut-être un indice. Ma procédure SQL crée un nouveau serveur lié à chaque exécution (car le fichier source change). Et j'utilise donc le code:
Mais si ma procédure ne contient que ce bout de code, l'exécution de ma procédure s'exécute bien par excel (blocage sur le INSERT).
A noter que je n'ai aucun problème pour exécuter ma procédure directement dans SQL.
je n'ai pas encore pu tester avec "sa" car la personne qui a le mot de passe n'était pas dispo. Je vais tester lundi. Pour le "Jet", j'ai peut-être un indice. Ma procédure SQL crée un nouveau serveur lié à chaque exécution (car le fichier source change). Et j'utilise donc le code:
-- Déclaration du lien avec Excel Exec sp_addlinkedserver @Excel_conso_tel_liste_fichiers, 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', '\\10.5.5.5\Telecom\!ExportSql.xls', Null, 'Excel 5.0'
Mais si ma procédure ne contient que ce bout de code, l'exécution de ma procédure s'exécute bien par excel (blocage sur le INSERT).
A noter que je n'ai aucun problème pour exécuter ma procédure directement dans SQL.
NicoDisso
Messages postés
230
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
22 août 2009
32
5 juin 2009 à 19:12
5 juin 2009 à 19:12
Je suis désolé, mais je ne peut pas t"aider la dessus.
Par contre elle fait quoi ta procedure, si c'est pour exporter dans excel, il y a les lots DTS...
Par contre elle fait quoi ta procedure, si c'est pour exporter dans excel, il y a les lots DTS...
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
6 juin 2009 à 19:49
6 juin 2009 à 19:49
Bonjour NicoDisso, ce n'est pas pour exporter dans excel, c'est à l'inverse pour exporter les données du fichier excel dans SQL SERVER.
A partir du fichier excel, on lance une procédure SQL SERVER qui importe le fichier excel.
Au départ, j'utilisais un "travail" sous SQL SERVER, mais les users voudraient qu'on puisse exporter vers sql server dès qu'on le souhaite, et pas attendre le soir que le travail SQL se soit exécuté.
A + et merci de ton aide.
A partir du fichier excel, on lance une procédure SQL SERVER qui importe le fichier excel.
Au départ, j'utilisais un "travail" sous SQL SERVER, mais les users voudraient qu'on puisse exporter vers sql server dès qu'on le souhaite, et pas attendre le soir que le travail SQL se soit exécuté.
A + et merci de ton aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
NicoDisso
Messages postés
230
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
22 août 2009
32
8 juin 2009 à 10:58
8 juin 2009 à 10:58
Ok Alors pourquoi ne pas faire une macro dans excel qui "ecrive" dans SQL et non pas sql qui va lire dans excel ?
Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7
8 juin 2009 à 12:00
8 juin 2009 à 12:00
Parce que je ne sais pas faire lol! Et ma procédure SQL est déjà écrite... C'est dommage de devoir la jeter et tout recommencer, mais j'ai l'impression de ne pas avoir d'autres solutions effectivement.
Est-ce que c'est compliqué d'écrire de Excel vers SQL? Peux-tu me conseiller un tuto simple?
Merci
Est-ce que c'est compliqué d'écrire de Excel vers SQL? Peux-tu me conseiller un tuto simple?
Merci
8 juin 2009 à 14:11