Macro VBA

Bonjour,

Je souhaiterais créer une instruction Sql via une macro à partir d'un tableau.

Description dans le fichier.

Un grand merci d'avance

15intruction-sql.xlsx (14.31 Ko)

Bonjours,

il n'est pas possible de faire des instruction SQL dans un tableur excel, cependant si vous avez acces il et tout à fait possible de crée une base de donnée dessus puis de faire des instruction vers cette base de donné dans excel.

De même si vous disposer de n'importe quelle autre type de base de donnée type postgres, mysql, ou oracle. Il et possible de faire le lien sur excel.

Voici le code pour par exemple se connecter à une base de donnée access.

'--------------------------------'
'Declaration des Variable de BDDD'
'--------------------------------'
Dim conn As ADODB.Connection
Dim RecSet As ADODB.recordset
Dim returnedRows As Integer
Dim strDbPath As String
Dim strConnectString As String

'=============================Definition Du String De Connection============================='
strDbPath = "X:\BDD\uneBDD.accdb"
strConnectString = "Provider = Microsoft.ACE.OLEDB.12.0; data source=" & strDbPath & ";"
'============================================================================================'

'=========Instansiation des objets========='
Set RecSet = New ADODB.recordset 'objet de récupération des résultat
Set conn = New ADODB.Connection 'objet de connection
'=========================================='

'===========Connection à la base==========='
conn.ConnectionString = strConnectString
conn.Open
'=========================================='

'==============================================================='
'                  EXEMPLE DE REQUET DE SELECTION       '
'==============================================================='

RecSet.Open "SELECT Utilisateur.* FROM Utilisateur;", conn, adOpenForwardOnly, adLockReadOnly, adCmdText

If (Not RecSet.EOF) Then 'Test si il y à au moin un enregistrement
    myarray = RecSet.GetRows() 'recupération des ligne

    For r = 0 To UBound(myarray, 2) 'parcour de toute les ligne
        msgbox myarray(0, r) 'myarray correspond au tableau '0' correspond au numéros de colone et 'r' au numéro de ligne
    next
End If
RecSet.close 'permet de fermer la connexion pour executer de nouvelle requet

'==============================================================='
'                  EXEMPLE DE REQUET D'INSERTION'
'==============================================================='

'Pour la requet d'insertion le recset.open sufi.
RecSet.Open "INSERT INTO Utilisateur VALUES('un nom', 'un prenom', 'un login ', 'un mdp')", conn, adOpenForwardOnly, adLockReadOnly, adCmdText

Merci pour votre retour,

Je ne souhaite pas faire une vrai instruction Sql, je cherche à obtenir la syntaxe afin de l’intégrer à SQL.

Merci pour l'info d'Access, je vais essayer de regarder de ce coté. Je ne connais pas Access.

Bonne journée

L’intègres a SQL, vous souhaiter faire un complément excel pour émuler un SGBD sur excel ?

Oui tout à fait.

Je vous souhaite donc bonne chance, j'ai pour ma part tenter l’expérience il y a deux moi avant de me rendre compte à quelle point ce n'est pas fait pour.

Car pour parcourir vos ligne et colonne pour effectuer une requête de sélection, vous allez devoir faire des boucle for. Ors dans excel pour obtenir de le contenue d'une case il faut la sélectionner puis accéder à la propriété de contenu. Le souci c'est que lorsque le nombre de ligne est supérieur à environ 200 enregistrement le temps d’exécution explose et dépasse la seconde.

Je pense que c'est peut être possible, mais pas en vba. Je pense qu'il faut descendre d'une couche applicative en développent par exemple un complément excel.

Je vous souhaite donc bonne chance

La chance est comme le vent, elle peut tourner.

Par exemple, j'ai retrouvé une vieille procédure qui devrait produire un petit zéphyr, certains autres que je ne citerai pas en ont fait une chanson.

Voici :

Public Function SQLFormula(T As String)
Dim S As String
Dim i As Integer
Dim form As String
Dim str As String
Dim Col As String

Application.Volatile True
S = "INSERT INTO " & T & " ("
i = 2
While Not Range("C" & i).Cells.Value = ""
  If i > 2 Then S = S + ", "
  S = S & Range("C" & i).Cells.Value
  i = i + 1
Wend

  S = S & Range("C" & i).Cells.Value & ") VALUES ("

i = 2
While Not Range("C" & i).Cells.Value = ""
  If i > 2 Then S = S + ", "
  Select Case Range("I" & i).Cells.Value ' Format
    Case "T":
        form = ""
        str = "'"
        Col = "F"
    Case "N":
        form = ""
        str = ""
        Col = "G"
    Case "D":
        form = "yyyymmdd"
        str = "'"
        Col = "H"
  End Select
  S = S & str & Format(Range(Col & i).Cells.Value, form) & str
  i = i + 1
Wend
  S = S & ")"
  SQLFormula = S
End Function

Cette prémisse devait récupérer en colonne C les noms des champs, puis en colonne I, il faut spécifier le type de données afin de construire les bons typages. Avec un peu de finesse d'esprit, on devrait pouvoir s'en sortir ! Bon courage !

Merci Oxydum pour ton aide, mais mes connaissances en VBA ne me permettent pas d'utiliser ce code.

Codialement

Rechercher des sujets similaires à "macro vba"