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 :

Problème de variable dans une Requête SQl


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Problème de variable dans une Requête SQl
    Bonjour le forum,

    J'ai un petit souci avec ma requête Sql sous excel VBA.
    Je souhaite faire une recherche dans un classeur fermé.
    L'onglet du classeur se nomme Technique_1.
    Je recherche dans cette table la "Reference" correspondant à la "Designation".

    Tant que j'inscrit dans ma requête la désignation à chercher c'est Ok.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    texte_SQL1 = "SELECT[Designation] FROM [TECHNIQUE_1$] WHERE [Reference] = '01-05355' "
        Set Rst1 = New ADODB.Recordset
        Set Rst1 = Cn.Execute(texte_SQL1)
        RequeteMaticeStd = Rst1.Fields("Reference").Value
    Lorque je passe par une variable il me dit "impossible de trouver l'oblet dans la collection correpondant au nom ou à la référence demandé."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MatriceStd = "01-05355"
        texte_SQL1 = "SELECT[Designation] FROM [TECHNIQUE_1$] WHERE [Reference] = ' " & MatriceStd & " ' "
        Set Rst1 = New ADODB.Recordset
        Set Rst1 = Cn.Execute(texte_SQL1)
        RequeteMaticeStd = Rst1.Fields("Reference").Value
    Je ne vois pas ou est l'erreur, sinon que le format de ma variable n'est pas correct?
    Si quelqu'un à une idée?

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    2 choses a verifier si ce n'est pas juste un probleme de recopie sur le forum

    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_SQL1 = "SELECT[Designation] FROM [TECHNIQUE_1$] WHERE [Reference] = '01-05355 "
    ne manquerait il pas un apostrophe apres 05355

    2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_SQL1 = "SELECT[Designation] FROM [TECHNIQUE_1$] WHERE [Reference] = ' " & MatriceStd & " ' "
    enleve les espaces apres le 1er apostrophe et avant la 2eme

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    En effet pour 1er remarque c'est un problème de recopie.
    Pour la 2nd remarque, non, il y a le même message d'erreur.
    De plus en mode debug il ne m'affiche plus la valeur de ma variable lorsque je passe dessus sur la formule.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    si tu affiches ta requete dans une msgbox ca donne quoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MatriceStd = "01-05355"
    texte_SQL1 = "SELECT[Designation] FROM [TECHNIQUE_1$] WHERE [Reference] = '" & MatriceStd & "' "
    Msgbox texte_SQL1

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Rien, aucun message. juste la message box qui s'affiche.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Etrange effectivement...
    Peux-tu mettre ton le code pour voir?

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    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
    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
    Sub RequeteClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String
        Dim texte_SQL1 As String
        Dim texte_SQL2 As String
        Dim texte_SQL3 As String
        Dim texte_SQL4 As String
        Dim texte_SQL5 As String
     
        Dim Rst1 As ADODB.Recordset
        Dim Rst2 As ADODB.Recordset
        Dim Rst3 As ADODB.Recordset
        Dim Rst4 As ADODB.Recordset
        Dim Rst5 As ADODB.Recordset
     
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\Documents and Settings\qualite.SMCONTACT\Bureau\PR09-001\BaseCDC00003.xls"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "TECHNIQUE_1"
     
        Set Cn = New ADODB.Connection
     
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
         Dim matriceStd As String
     
         matriceStd = "01-05233"
         '-----------------
         'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL1 = "SELECT[Designation] FROM [TECHNIQUE_1$] WHERE [Reference] =  ' " & matriceStd & " ' "
        Set Rst1 = New ADODB.Recordset
        Set Rst1 = Cn.Execute(texte_SQL1)
        'MsgBox text_SLQ1
        RequeteMaticeStd = Rst1.Fields("Reference").Value
     
     
        texte_SQL2 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE [Designation]  =' " & PoinconStd & " ' "
        Set Rst2 = New ADODB.Recordset
        Set Rst2 = Cn.Execute(texte_SQL2)
        'RequetePoinconStd = Rst2.Fields("Reference").Value
     
        texte_SQL3 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE [Designation] =' " & BlocdecoupeStd & " ' "
        Set Rst3 = New ADODB.Recordset
        Set Rst3 = Cn.Execute(texte_SQL3)
        'RequeteBlocdecoupetd = Rst3.Fields("Reference").Value
     
     
        texte_SQL4 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE [Designation] =  '" & EnclumeStd & "' "
        Set Rst4 = New ADODB.Recordset
        Set Rst4 = Cn.Execute(texte_SQL4)
        'RequeteEnclumeStd = Rst4.Fields("Reference").Value
     
        texte_SQL5 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE [Designation]  ='" & GuideStd & "' "
        Set Rst5 = New ADODB.Recordset
        Set Rst5 = Cn.Execute(texte_SQL5)
        'RequeteGuideStd = Rst5.Fields("Reference").Value
     
     
        '--- Fermeture connexion ---
     
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Depuis une autre routine je définie les différentes variables MatriceStd,..., dont je fait la rêquete dans ce 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
    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
     
    Public RequeteMaticeStd
    Public RequetePoinconStd
    Public RequeteBlocdecoupetd
    Public RequeteEnclumeStd
    Public RequeteGuideStd
     
    Public matriceStd
    Public PoinconStd
    Public BlocdecoupeStd
    Public EnclumeStd
    Public GuideStd
     
    Dim matriceSdt As String
     
    Sub outilstd()
     
    With ActiveSheet
    '** Test si la cellule de la feuille active E9 n'est pas égale à rien **
    If ActiveSheet.Range("E9") = "" Then
    MsgBox "Attention : il manque une valeur"
        Else: A1 = ActiveSheet.Range("E9").Value
    End If
     
    '** Test si la cellule de la feuille active F9 n'est pas égale à rien **
    If ActiveSheet.Range("F9") = "" Then
    MsgBox "Attention : il manque une valeur"
        Else: A2 = ActiveSheet.Range("F9").Value
    End If
     
    '** Test si la cellule de la feuille active G9 n'est pas égale à rien **
    If ActiveSheet.Range("G9") = "" Then
    MsgBox "Attention : il manque une valeur"
        Else: A3 = ActiveSheet.Range("G9").Value
    End If
     
    '** Test si la cellule de la feuille active H9 n'est pas égale à rien **
    If ActiveSheet.Range("H9") = "" Then
    MsgBox "Attention : il manque une valeur"
        Else: A4 = ActiveSheet.Range("H9").Value
    End If
     
    '** Test si la cellule de la feuille active I9 n'est pas égale à rien **
    If ActiveSheet.Range("I9") = "" Then
    MsgBox "Attention : il manque une valeur"
        Else: A5 = ActiveSheet.Range("I9").Value
    End If
     
    '** Test si la cellule de la feuille active J9 n'est pas égale à rien **
    'If ActiveSheet.Range("J9") = "" Then
    'MsgBox "Attention : il manque une valeur"
    'End If
    End With
     
    'Définition du nom des composants depuis la définition des outils.
    matriceStd = "MATRICE 1M" & A2 & A1 & "-" & A3
    PoinconStd = "POINCON 1P" & A1 & "-" & A3 & "-" & A5
    BlocdecoupeStd = "BLOC DE COUPE 1BC" & A1
    EnclumeStd = "ENCLUME 1EN" & "-" & A3
    GuideStd = "GUIDE 1G" & A1 & "-" & A3
     
    Call RequeteClasseurFerme
    MsgBox RequeteMaticeStd
     
    End Sub

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Eh ben oui, ton SQL te retourne le champs Designation et tu veux recuperer le champs reference donc ca coince
    change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RequeteMaticeStd = Rst1.Fields("Reference").Value
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RequeteMaticeStd = Rst1.Fields("Designation").Value
    Et n'oubli pas d'enlever les apostrophes comme je l'avais indiqué plus haut dans ta requete.

    EDIT: j'etais passe completement a cote...

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Ok désolé mais je test le code depuis ce matin et à force je m'embrouille dans les champs à récupérer.

    J'ai modifié et testé le code comme demandé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    MatriceStd = "AIMANT"
         '-----------------
         'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL1 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE [Designation] =' & MatriceStd & ' "
        Set Rst1 = New ADODB.Recordset
        Set Rst1 = Cn.Execute(texte_SQL1)
        RequeteMaticeStd = Rst1.Fields("Reference").Value
    En remplacant le champs "designation" par référence. il me donne le code suivant BOF ou EOF est égal à True ou l'enregistrement actuel à été supprimé.
    Ce qui correspond pour moi au fait qu'il ne trouve la la valeur recherché dans la base. Sauf que si je tape la requête comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    texte_SQL1 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE [Designation] ='AIMANT' "
    Il me renvoie bien la référence associée au champs "AIMANT".

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    la c'est juste un probleme de synthaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_SQL1 = "SELECT[Reference] FROM [TECHNIQUE_1$] WHERE [Designation] ='" & matriceStd & "' "
    sinon tu recherches & matriceStd & 'et pas AIMANT

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Ok merci ça fonctionne très bien

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

Discussions similaires

  1. Problème de variable dans une requête SQL
    Par Namzicos dans le forum SQL
    Réponses: 2
    Dernier message: 27/01/2010, 14h38
  2. [SQL] Utilisation de variables dans une requête SQL
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/09/2006, 22h38
  3. Passer une variable dans une requête SQL
    Par Remedy dans le forum C++
    Réponses: 2
    Dernier message: 11/05/2006, 16h48
  4. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02

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