IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Connexion base de donnée SQL via macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut Connexion base de donnée SQL via macro
    Bonjour à tous,
    J'ai une nouvelle question VBA qui concerne aussi SQL.
    Je voudrais que quand je clic sur un bouton, j'envoi des données dans une base de données SQL.

    J'ai trouvé se bout de code sur le site de microsoft qui me permets de me connecter a la base de donnée sauf que ma connexion ne se fait pas par authentification Windows.
    Je ne trouve pas les lignes a utiliser pour renseigner directement les paramétrages de connections avec une authentification sql.
    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
    'Initialisation des variables
        Dim cn As New ADODB.Connection
     
        'Specification du fournisseur OLE DB
        On Error GoTo DisplayErrorInfo
        cn.Provider = "sqloledb"
     
        'Propriétés de la connexion SQLOLEDB
        cn.Properties("Data Source").Value = "APEDBSDDC806"
        cn.Properties("Initial Catalog").Value = "SUIV_BIL_CC"
     
        'Authentification windows
        cn.Properties("Integrated Security").Value = "SSPI"
     
        'Ouverture de la base de données.
        cn.Open
     
     
        'ICI LES DIFFERENTES REQUETES SQL
     
     
        'Fermeture de la connexion
        cn.Close
     
        'Etiquettes de gestion des erreurs
        GoTo DisplayEnd
     
    DisplayErrorInfo:
            MsgBox ("Impossible de se connecter à la base de données")
            GoTo DisplayEnd
    DisplayEnd:
    Je n'ai pas de soucis pour mettre les info de connexion en dur car ils sont utilisé que pour se fichier qui sera verrouillé et utilisé par une seule personne.


    Merci par avance pour vos lumières

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & BASE & ";UID=" & User & ";PWD=" & PassWord & ";"

  3. #3
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    Merci pour ta réponse, malheureusement je n'ai pas réussi à la mettre en application.
    Je pense avoir réussi avec se code:
    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
    Public connexion As ADODB.Connection
     
     
    Sub connectionbdd()
    Set connexion = New ADODB.Connection
    connexion.Provider = "SQLNCLI"
    connexion.Properties("Data Source").Value = "xxxx.xxx.net"
    connexion.Properties("User Id").Value = "user"
    connexion.Properties("Password").Value = "pass"
    connexion.Open
     
    Call MAJ
     
    connexion.Close
     
     
    End Sub
     
     
    Private Sub MAJ()
    MsgBox "yo"
    Dim Sql As String
     
    Sql = "INSERT INTO matable" & _
        "VALUES(&a12&,&b12&,&c12&,&d12&, &e12&,&f12&,&g12&,&h12&,&i12&,&j12&,&k12&,&l12&,&m12&,&n12&,&o12&,&p12&,&q12&,&r12&,&s12&,&t12&,&u12&,&v12&,&w12&,&x12&,&y12&,&z12&,&aa12&,&ab12&,&ac12&,&ad12&, &ae12&,&af12&,&ag12&,&ah12&,&ai12&,&aj12&,&ak12&,&al12&,&am12&);"
    docmd.RunSQL Sql
    End Sub
    j'ai un soucis avec ma macro pour insérer des données. j'ai une erreur sur la ligne docmd.runsql sql
    J’espère également que ma requête sql est bonne.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & BASE & ";UID=" & User & ";PWD=" & PassWord & ";"
    connexion.Open GenereCSTRING
    Code Sql 2005 Express : Sélectionner tout - Visualiser dans une fenêtre à part
     GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server


    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
    Select Case TYPEBASE
        Case ExcelAvecTire
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        Case ExcelSensTire
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";Extended Properties=""Excel 12.0;HDR=no;"""
        Case ACCESS97
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & BASE 
        Case ACCESS2000
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BASE & ";Persist Security Info=False"
        Case ACCESS2012
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BASE & ";"          
        Case ODBC
            GenereCSTRING = "Provider=MSDASQL.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & BASE
        Case ORACLE
            GenereCSTRING = "Provider=OraOLEDB.Oracle.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Data Source=" & BASE
        Case SQLSERVER2005
            GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & BASE & ";Data Source=" & Server
        Case SQLServer2008R2
            GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & BASE & ";UID=" & User & ";PWD=" & PassWord & ";"
        Case SQLite
            GenereCSTRING = "Driver={SQLite ODBC (UTF-8) Driver};Database=" & BASE & ";StepAPI=;Timeout="
        Case SQLite3
            GenereCSTRING = "Driver={SQLite3 ODBC Driver};Database=" & BASE & ";LongNames=0;Timeout=4000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
        Case CSV
            GenereCSTRING = "ODBC;DBQ=" & BASE & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;Extensions=txt,csv,tab,asc;FIL=text;MaxBufferS"
        Case Else
            GenereCSTRING = "PAS ASSEZ DE PARAMETRES RENSEIGNES !!!"
    End Select
    Dernière modification par Invité ; 26/05/2016 à 12h34.

  5. #5
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    generecstring doit être déclaré comme sa?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public GenereCSTRING As ADODB.connection
    Je ne comprends pas le dernier bloc de code avec select case type base.

  6. #6
    Invité
    Invité(e)
    Par défaut
    nom comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim GenereCSTRING  as string,BASE   as string,User  as string,PassWord  as string
     
    BASE = "xxxx.xxx.net"
    User   = "user"
    PassWord   = "pass"
     
    GenereCSTRING = "Provider=SQLNCLI;Server=" & Server & ";Database=" & BASE & ";UID=" & User & ";PWD=" & PassWord & ";"
     
    connexion.Open GenereCSTRING

  7. #7
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    Merci, la connexion est bonne, j'arrive à envoyer mes donn et à les récupérer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set rs = New ADODB.Recordset
    rs.Open ("SELECT * " & _
            "FROM recup " & _
            "order by Date"), cn
    Range("a2").CopyFromRecordset rs
    Sa me permet de récupérer dans un fichier si besoin le contenu de ma table.
    Est-il possible de lui demander de copier la 1ère colonne de ma table dans la colonne de mon tableau qui s'appelle toto et ainsi de suite?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si j'ai bien compris!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim MesCells As Range
    Set MesCells = Range("toto")
    MesCells (1, 1).CopyFromRecordset rs
     
    Range("toto").Cells(1, 1).CopyFromRecordset rs
    End Sub

  9. #9
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    En gros, ma colonne de ma table s'appel "Nom coulée" la colonne de mon tableau s'appel "coulée" idem pour d'autres colonnes qui ne se suivent pas forcement
    Je voudrais que dans mon recordset je récupère la colonne "nom coulée" pour l'afficher dans la colonne de mon tableau "coulée" et ainsi de suite pour toutes les autres colonnes du recordset

    J'ai trouvé sa mais je n'arrive pas à le mettre en application.

    rs("Nom") => le contenu de la colonne "Nom"
    rs.movenext => le recordset navigue vers l'enregistrement suivant.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    rs.Open ("SELECT * " & _
            "FROM recup " & _
            "order by Date"), cn
    dim L as integer
    while rs.eof=false
          with  Range("toto").Cells(1, 1)
           .offset(L,1).value= "" & rs("Nom").value
           .offset(L,5).value= "" & rs("PreNom").value
          end with  
    rs.movenext
    L=L+1
    wend

  11. #11
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    Merci pour ta rapidité de réponse. Le soucis, c'est que si j'ai besoin d’insérer une colonne la macro le suivra pas, c'est pour sa que je voudrais utiliser le nom de ma colonne d'excel

  12. #12
    Invité
    Invité(e)
    Par défaut
    tests ça tu verras que ta colonne va suivre!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Set Nom = Range("B:B")
    Range("A:A").Insert xlLeft
    Nom(1, 1) = "toto"
    End Sub

  13. #13
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    Finalement j'ai trouvé une solution, je vais juste devoir faire se code 39x
    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
    Private Sub MAJexcel()
    Dim sel As Range
    Dim sql As String
     
     
    Set rs = New ADODB.Recordset
    rs.Open ("SELECT * " & _
            "FROM recup " & _
            "order by Date"), cn
     
     
    Set sel = Cells.Find(what:="coulée", LookIn:=xlValues, lookat:=xlWhole)
    sel.Select
    ActiveCell.Offset(1, 0).Select
    While rs.EOF = False
        selection = rs("coulée")
        ActiveCell.Offset(1, 0).Select
        rs.MoveNext
     
    Wend
     
     
     
    End Sub
    Je sait, il y a des select, c'est vraiment pas beau mais sa fonctionne c'est déjà sa.

    Ton code que tu m'as envoyé me créé une nouvelle colonne.
    Je pense que je m'exprime mal, j'en suis désolé.
    Ma macro s’exécute à l'ouverture du fichier excel mais j'ai d'autres colonnes que celles de ma table (des colonnes de calcul).
    Si je met en dur dans la macro le numero de colonne où insérer les données de ma base, je ne peut pas insérer une nouvelle colonne après (clic droit inséré) et enregistrer sinon tout sera décalé à la prochaine ouverture.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set sel = Cells.Find(what:="coulée", LookIn:=xlValues, lookat:=xlWhole)
    dim L as integer
    with sel
    While rs.EOF = False
    L=L+1
          .Offset(L)= rs("coulée")
     
        rs.MoveNext
     
    Wend
    end with

  15. #15
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    C'est plus sympa merci

    pour faire de même avec la colonne suivante de ma table, je doit relancer la requête?

    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
    Private Sub MAJexcel()
    Dim sel As Range
    Dim sql As String
    Dim L As Integer
     
     
    Set rs = New ADODB.Recordset
    rs.Open ("SELECT * " & _
            "FROM recup " & _
            "order by Date"), cn
     
    Set sel = Cells.Find(what:="coulée", LookIn:=xlValues, lookat:=xlWhole)
    With sel
    While rs.EOF = False
    L = L + 1
          .Offset(L) = rs("coulée")
         rs.MoveNext
    Wend
    L = Empty
    End With
     
     
    Set rs = New ADODB.Recordset
    rs.Open ("SELECT * " & _
            "FROM recup " & _
            "order by Date"), cn
    Set sel = Cells.Find(what:="nuance", LookIn:=xlValues, lookat:=xlWhole)
    With sel
    While rs.EOF = False
    L = L + 1
          .Offset(L) = rs("nuance")
         rs.MoveNext
    Wend
    L = Empty
    End With
    Si je ne la relance pas, sa fonctionne pas

  16. #16
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if rs.eof=false then
    Set sel = Cells.Find(what:="coulée", LookIn:=xlValues, lookat:=xlWhole)
    t = rs.GetRows(Fields:="coulée")
    sel.Offest(1).Resize(UBound(t)) = WorksheetFunction.Transpose(t)
    end if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub MAJexcel()
    Dim sel As Range
    Dim sql As String
     
    Set rs = New ADODB.Recordset
    rs.Open ("SELECT [coulée] " & _
            "FROM recup " & _
            "order by Date"), cn
     
    Set sel = Cells.Find(what:="coulée", LookIn:=xlValues, lookat:=xlWhole)
    sel.Offset(1).CopyFromRecordset  rs
     
    End Sub
    Citation Envoyé par tequillaman Voir le message
    pour faire de même avec la colonne suivante de ma table, je doit relancer la requête?
    Si je ne la relance pas, sa fonctionne pas
    Ou
    Dernière modification par AlainTech ; 28/05/2016 à 14h20. Motif: Fusion de 2 messages

  17. #17
    Membre confirmé Avatar de tequillaman
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2016
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 116
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connexion base de donnee sql via VB.NET
    Par haifa28 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/11/2007, 11h49
  2. Connexion base de données SQL server
    Par t1marlartiste dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/05/2007, 11h54
  3. connexion Base de Données sql
    Par 4seb5 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 07/05/2007, 00h12
  4. Probleme connexion base de données (SQL Server 2005 Express)
    Par GuileIzback dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 13/11/2006, 01h46
  5. Pbm : Connexion base de donnée SQL 2005 dans Visual Studio C#
    Par vampyrx dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/05/2006, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo