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 :

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
Cette variable serait je suppose avec la ligne
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