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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| Sub GenereSQL()
On Error GoTo X_ERR
Dim SQLDEB As String
Dim SQL_VAL As String
Dim CptChamp As Integer
Dim SQL_LIGNE As String
Dim SQL_TMP As String
'''On efface les données SQL Précédentes
Sheets("SQL").Activate
Columns("A:A").Select
Selection.ClearContents
Sheets("TABLE").Activate
''Initialise la ligne de démarrage dans la table
CptChamp = 2
'Création du début du sql
SQLDEB = "INSERT INTO " & Cells(1, 1).Value & " ("
Do While Cells(CptChamp, 1) <> ""
If Range("I" & CptChamp) = "" Then
SQLDEB = SQLDEB & Cells(CptChamp, 1).Value & IIf(Cells(CptChamp + 1, 1) = "", "", ",")
End If
CptChamp = CptChamp + 1
Loop
SQLDEB = IIf(Right(SQLDEB, 1) = ",", Left(SQLDEB, Len(SQLDEB) - 1), SQLDEB)
SQLDEB = SQLDEB & ") VALUES ("
''Balaye toutes les lignes de la feuille données
For i = 2 To 10000
SQL_LIGNE = SQLDEB
'''Génération de la partie values de la ligne de SQL
CptChamp = 2
Do While Cells(CptChamp, 1) <> "" 'continue pour balayer tous les champs de la table et teste la présence du dernier champ de la table
If Range("I" & CptChamp) = "" Then ''La colonne est utilisée dans le SQL
If Range("D" & CptChamp) <> "" Then SQL_TMP = SQL_TMP & IIf(Range("D" & CptChamp) = "$$", i, Range("D" & CptChamp)) & " "
If Range("E" & CptChamp) <> "" Then SQL_TMP = SQL_TMP & ChercheValeur("DONNEES", Range("E" & CptChamp) & i, Range("B" & CptChamp)) & " "
If Range("F" & CptChamp) <> "" Then SQL_TMP = SQL_TMP & Range("F" & CptChamp) & " "
If Range("G" & CptChamp) <> "" Then SQL_TMP = SQL_TMP & ChercheValeur("DONNEES", Range("G" & CptChamp) & i, Range("B" & CptChamp))
If Left(Range("B" & CptChamp), 7) = "VARCHAR" Then
SQL_TMP = Range("C" & CptChamp) & Trim(SQL_TMP) & Range("H" & CptChamp)
End If
If SQL_VAL <> "" Then SQL_VAL = SQL_VAL & ", "
SQL_VAL = SQL_VAL & SQL_TMP
SQL_TMP = ""
End If
CptChamp = CptChamp + 1
Loop
''On vérifie que sqlval ne se termine pas par une virgule
If Right(sqlval, 1) = "," Then
'MsgBox "a" & SQL_VAL
SQL_VAL = Left(SQL_VAL, Len(SQL_VAL) - 1)
'MsgBox "b" & SQL_VAL
End If
SQL_LIGNE = SQL_LIGNE & SQL_VAL & ");" & vbCrLf
'MsgBox SQL_LIGNE
Sheets("SQL").Cells(i, 1) = SQL_LIGNE
SQL_VAL = ""
If Sheets("DONNEES").Range("A" & i + 1).Value = "" Then
MsgBox "SQL Généré" & vbCrLf & i & " lignes", vbOKOnly + vbInformation, "Fin de traitement"
Exit Sub
End If
Next i
SORTIR:
Exit Sub
X_ERR:
MsgBox Err.Number & " " & Err.Description
ChangeFileOpenDirectory = Feuil8.Range("B3").Value
SaveAs Filename:=Feuil8.Range("B2").Value & ".txt"
Resume SORTIR
End Sub |
Partager