Bonjour
Avoir avoir créée une table et inséré une variable grace à l'aide ce forum à la rubrique SQL, je bascule dans la rubrique Excel pour poursuivre ce que j'essaie de faire
J'essaie d'insérer dans une variable d'une requete SQL, une liste de donnée issue d'une plage de données Excel.
Ci dessous ma procédure stockée.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 USE [Customer] GO /****** Object: StoredProcedure [dbo].[MAJ_TableCAB] Script Date: 30/08/2022 13:16:04 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /****** Object: StoredProcedure [dbo].[MAJ_TableCAB] Script Date: 30/08/2022 09:50:23 ******/ ALTER PROCEDURE [dbo].[MAJ_TableCAB] -- Creation de la procedure @Nom varchar(50) AS BEGIN SET NOCOUNT ON; IF OBJECT_ID('tempdb..#MyTblCAB') IS NOT NULL DROP TABLE #MyTblCAB -- CREATE TABLE #MyTblCAB ( CAB varchar(30) ) ----Inserer les données dans la table "TblCAB" INSERT INTO #MyTblCAB (CAB) Values(@nom) select* from #MyTblCAB MyTblCAB end
Ce que j'essaie de faire, c'est d'insérer dans la variable @nom, une liste de donnée issue d'une feuille Excel de la cellule A2 jusqu'à la dernier ligne vide de la colonne A exemple :
Cette variable serait je suppose avec la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 With Sheets("NumCAB") Derligne = .Range("A65000").End(xlUp).Row For i = 2 To Derligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part sql = "[Customer].dbo.MAJ_TableCAB" ' je nomme ma procédure stockée
Voici le code VBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 Sub MAJ_InsertionCAB() Dim cn As ADODB.Connection Dim cm As ADODB.Command Dim rs As ADODB.Recordset Dim sql As String Dim GenereCSTRING As String Dim i As Integer Dim lesCols As Range Dim Feuille As Worksheet Set Feuille = Worksheets("test") 'supprimer les annciennes données Set lesCols = Feuille.Range("A1") lesCols.EntireColumn.ClearContents Set cn = New ADODB.Connection sql = "[Customer].dbo.MAJ_TableCAB" ' je nomme ma procédure stockée GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & "MdP & ";Persist Security Info=True;User ID=" & "exploitation" & ";Initial Catalog=" & "NomServeur" & ";Data Source=" & "adresse IP" & " " '* SQLServer2008R2 cn.Open GenereCSTRING 'J'ouvre ma connection. P1 = Sheets("NumCAB").Range("A2") Set cm = New ADODB.Command With cm .ActiveConnection = cn .CommandText = sql .CommandTimeout = 0 'evite que le delai d'attente de requete expire (que la requte bugue) .CommandType = adCmdStoredProc 'invoque une procédure stockée. Le serveur SQL doit savoir où aller chercher la commande, c'est le pourquoi de la ligne qui spécifie le CommandType .Parameters.Append .CreateParameter("P1", adVarChar, adParamInput, 129, Sheets("NumCab").Range("A2")) 'CAB End With Set rs = cm.Execute() With ThisWorkbook.Sheets("test") For i = 0 To rs.Fields.Count - 1 'On place le nom des champs sur la ligne 4 de ma feuille Excel .Range("A1").Offset(0, i) = rs(i).Name Next .Range("A2").CopyFromRecordset rs 'la on copie le résultat de la requête End With End Sub
Partager