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 :

Retourner le résultat d'une requête SQL Server [Débutant(e)] [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 107
    Par défaut Retourner le résultat d'une requête SQL Server
    Bonjour à tous , j'ai un petit problème avec l’exécution de ma macro , en fait je souhaite retourner un résultat d'une requête mais à condition qu'elle me teste sur le contenu de certains cellules de mon classeur . du coup je crois que je me suis trompé sur l’intégration du code vba dans la requête SQL pour mieux comprendre je vous intègre mon 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
    Function update()
     
    Dim query As String
    Dim Target As Range
    Dim conString As String
     
        query = "UPDATE [MMFIN].[dbo].[F_DRECOUVREMENTIV] SET [IV_Raison] = 'sms ok " & "ws.Range(""T1"" & Dl)" & " ...' WHERE DR_Num='ws.Range(""A1"" & Dl)' and ES_No= (select distinct(a.es_no) from [MMFIN].[dbo].[F_DRECOUVREMENTIV] a,[MMFIN].[dbo].[F_ESCENARIO] b where a.ES_No=b.ES_No and a.DR_Num='ws.Range(""A1"" & Dl)' and b.ES_Intitule like( 'ws.Range(""P1"" & Dl)') and IV_Date = 'ws.Range(""T1"" & Dl)')"
     
            Set Target = ThisWorkbook.Worksheets("DATA").Range("V1")
     
            Select Case ImportSQLtoRange(conString, query, Target)
                Case 1
                    MsgBox "Import database data error 2", vbCritical
                Case Else
            End Select
     
    End Function
    je ne reçois pas de messages d'erreur mais que le MsgBox que je mis au dernier .
    je serai très reconnaissant s quelqu'un pourrait m'aider SVP.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    On se demande "étudiant en quoi..."

    Ca devrait quand même te venir à l'idée que ce qui pose problème, c'est la fonction ImportSQLtoRange dont tu ne donnes évidemment pas le code, ce serait bien sûr trop simple...

    De plus, je ne sais pas ce que cette fonction est censée renvoyer, mais il serait judicieux de le mettre dans une variable pour pouvoir étudier le résultat, parce que comme c'est écrit là, il n'y a aucune façon de savoir ce que le Select Case évalue.

    C'est encore codé à la bourrin par quelqu'un qui n'a rien compris ou qui n'a pas suivi le cours ou que le cours était mal donné ou qu'il n'a pas suivi le cours qui était mal donné.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 107
    Par défaut
    Bonjour. merci pour ta réactivité. je suis étudiant en informatique et je suis en stage .
    voici le code du IMPORTSQLTORANGE
    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
    60
    Function ImportSQLtoRange(ByVal conString As String, ByVal query As String, _
        ByVal Target As Range) As Integer
     
        On Error Resume Next
     
        ' Object type and CreateObject function are used instead of ADODB.Connection,
        ' ADODB.Command for late binding without reference to
        ' Microsoft ActiveX Data Objects 2.x Library
     
        ' ADO API Reference
        ' http://msdn.microsoft.com/en-us/library/ms678086(v=VS.85).aspx
     
        ' Dim con As ADODB.Connection
        Dim con As Object
        Set con = CreateObject("ADODB.Connection")
     
        con.ConnectionString = conString
     
        ' Dim cmd As ADODB.Command
        Dim cmd As Object
        Set cmd = CreateObject("ADODB.Command")
     
        cmd.CommandText = query
        cmd.CommandType = 1         ' adCmdText
     
        ' The Open method doesn't actually establish a connection to the server
        ' until a Recordset is opened on the Connection object
        con.Open
        cmd.ActiveConnection = con
     
        ' Dim rst As ADODB.Recordset
        Dim rst As Object
        Set rst = cmd.Execute
     
        If rst Is Nothing Then
            con.Close
            Set con = Nothing
     
            ImportSQLtoRange = 1
            Exit Function
        End If
     
        Dim ws As Worksheet
        Dim col As Integer
     
        Set ws = Target.Worksheet
     
        ' Data from Recordset
        ws.Cells(Target.Row, Target.Column).CopyFromRecordset rst
     
        rst.Close
        con.Close
     
        Set rst = Nothing
        Set cmd = Nothing
        Set con = Nothing
     
        ImportSQLtoRange = 0
     
    End Function
    Merci encore.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 107
    Par défaut retourner le résultat d'une requête SQL Server
    je viens de modifier mon code et j'ai pu l'améliorer un peu , mon problème actuel c'est que il me colle la requête comme elle est par contre moi je souhaite qu'il me retourne la valeur , je me demande est ce qu'il y a une expression spécifique pour cette action voici le 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
     
    Function update()
     
    Dim query As String
    Dim Target As Range
    Dim conString As String
    Dim cpt As Long
     
    conString = chaine_connexion
     
    'Boucle de création des requêtes d'update
    Dl = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    For cpt = 1 To Dl
    ws.Range("V" & cpt) = "UPDATE [MMFIN].[dbo].[F_DRECOUVREMENTIV] SET [IV_Raison] = 'sms ok (" & Format(Now, "dd/mm/yyyy") & ") " & Left(ws.Range("Q" & cpt), 49) & "' WHERE DR_Num='" & ws.Range("A" & cpt) & "' and ES_No= (select distinct(a.es_no) from [MMFIN].[dbo].[F_DRECOUVREMENTIV] a,[MMFIN].[dbo].[F_ESCENARIO] b where a.ES_No=b.ES_No and a.DR_Num='" & ws.Range("A" & cpt) & "' and b.ES_Intitule like( '" & ws.Range("P" & cpt) & "') and IV_Date = '" & ws.Range("T" & cpt) & "') and IV_Date = '" & ws.Range("T" & cpt) & "'"
     
    'envoi de la requête
        query = ws.Range("V" & cpt)
            Set Target = ThisWorkbook.Worksheets("DATA").Range("V1")
     
            Select Case ImportSQLtoRange(conString, query, Target)
                Case 1
                    MsgBox "Import database data error 2", vbCritical
                Case Else
            End Select
     Next cpt
     
    End Function
    merci d'avance

  5. #5
    Invité
    Invité(e)
    Par défaut
    bonjour,
    en fait on ne peut pas t'aider, nous ne savons pas si conString contient une chêne de connexion conforme , si query est une requête sql bien formulée et de plus tu as mis un on error resume next qui inhibe les message d'erreur!
    Ca devrait quand même te venir à l'idée que ce qui pose problème, c'est la fonction ImportSQLtoRange dont tu ne donnes évidemment pas le code, ce serait bien sûr trop simple...
    en fait c'est le code qui nous permettrait de te donner la solution au problème!
    bonne chance!

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Mauvaise utilisation de On Error Resume Next évidemment, puisqu'à aucun moment il n'y a de test sur l'erreur. Cette ligne fait en sorte que le code ne s'arrête pas lorsqu'il rencontre une erreur et continue "comme si de rien n'était"...

    Vire cette ligne qui n'a aucun sens sans gestion de l'erreur derrière. Tu y verras plus clair car lorsqu'une erreur sera générée, le VBE s'arrêtera sur la ligne qui pose problème et la surlignera en jaune. Il sera intéressant alors d'avoir le message d'erreur récupéré à ce moment-là.

    La gestion des erreurs avec des On Error... (l'équivalent des try/catch/finally d'autres langages), ce sera pour plus tard. Car si tu masques les erreurs à coup de On Error Resume Next, tes journées de débogage vont être longues...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ta requête est une requête UPDATE... Comment veux-tu tester ce qu'elle te retourne puisque, par définition, elle ne retourne rien. Clarifie ton propos et tes besoins puis reviens nous voir
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 107
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Ta requête est une requête UPDATE... Comment veux-tu tester ce qu'elle te retourne puisque, par définition, elle ne retourne rien. Clarifie ton propos et tes besoins puis reviens nous voir
    c'est bon résolu . merci beaucoup grâce a vos aides j'ai pu y arriver .
    merci cordialement.

  9. #9
    Invité
    Invité(e)
    Par défaut
    c'est merveilleux , même si j'ai l'impression que nous ne t'avons apporté aucune aide!

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    c'est merveilleux , même si j'ai l'impression que nous ne t'avons apporté aucune aide!


    Les voies de l'informatique sont impénétrables...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2015, 12h46
  2. Une Fonction SQL qui retourne le résultat d'une requête
    Par kamacho25 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/09/2007, 10h44
  3. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07
  4. Réponses: 4
    Dernier message: 14/12/2004, 14h34
  5. Résultat d'une requète SQL
    Par camino dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2004, 15h22

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