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 :

Clause 'WHERE' d'un SQL qu'il ne veut pas [XL-2010]


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
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 226
    Par défaut Clause 'WHERE' d'un SQL qu'il ne veut pas
    Bonjour à tous,

    Je suis dans de l'incompréhension

    Je suis modéliste et je construis différents projets comme une locomotive et un avion de la seconde guerre mondiale.
    Par curiosité, j'aimerais savoir combien de vis j'ai installé sur ces projets en fonction de leurs type

    Vu le nombre de type de vis différentes pour les différents projets, c'est trop compliqué de mettre à jour les données.
    Car ces projets, se sont des fascicules que j'achète en magasin. Jusqu'à 140 pour certain d'entre eux.

    Alors, j'essaie d'utiliser le SQL. C'est très facile.
    (En théorie)

    En pratique, il accepte sans rien dire "SELECT * FROM [Vis$]" et cela fonctionne
    Par contre, si je lui demande "SELECT * FROM [Vis$] WHERE projet = 'Locomotive' " Il y a une erreur

    "No value given for one or more required parameters" ...

    Alors ...
    Commençons par les explications pour comprendre:

    Sur une feuille Excel s'appelant "Vis", il y a un tableau comme celui que je montre ci-dessous

    La première ligne de la feuille Excel sont les titres. Dans l'exemple ci-dessous, se sont les mêmes titres que le vrai document.

    Projet Fascicule AP BP
    Locomotive 001 7 4
    Locomotive 002 0 2
    Locomotive 003 8 6
    AM6 Zero 001 4 0
    AM6 Zero 002 2 6
    AM6 Zero 003 2 2

    Le code:

    A) La connexion:

    J'ai écris une procédure pour ouvrir une connexion

    l'appel:
    ouvre_connection("modelisme.xlsm")

    status:
    conn.state = 1 (connexion ouverte)
    conn.state = 0 (connexion fermée)

    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
     
     
    ' Variable publique:
    Public conn As ADODB.Connection
     
    Sub ouvre_connection(srcFile As String)
        ' srcFile : nom du fichier Excel
        Dim str As String
        Set conn = New ADODB.Connection
     
        If Len(srcFile) > 0 Then
     
            srcFile = Replace(srcFile, "http://", "\\")
            srcFile = Replace(srcFile, "/", "\")
     
            str = "Provider=Microsoft.ACE.OLEDB.12.0;"
            str = str & "Data Source=" & srcFile & ";"
            str = str & "Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";"
     
     
            conn.ConnectionString = str
            conn.CursorLocation = adUseClient
     
            If conn.State = 0 Then
                conn.Open
            End If
        End If
    End Sub
    Rien de sorcier. Cela fonctionne très bien

    B - Accéder à l'information

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub test()
        Dim IndexArr, compteur
        Dim nom_fichier As String
     
        nom_fichier = "modélisme.xlsm"
     
        ouvre_connection (nom_fichier)
     
        GetData "Locomotive", "001", "BP", 5, False, outArr, compteur
     
    End Sub
    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
    Function GetData(Project As String, Fascicule As String, Vis_Type As String, QT_reçus As Integer, TTL As Boolean, outArr As Variant, compteur As Variant)
        ' IN:
        '     Project: Nom du projet contenant les différentes vis
        '   Fascicule: N° du fascicule à mettre à jour
        '    Vis_Type: Type de vis (majuscule)
        '    QT_reçus: Nombre de vis reçue
        
        Dim myRS As ADODB.Recordset
        
        Dim RS_n As Integer
        Dim RS_f As Integer
        
        Dim nbLigne As Integer
        Dim nbColonne As Integer
        
        Dim Arr
        Dim ct(1, 2) As Integer
    
        Set myRS = New ADODB.Recordset
        
       ' Le problème est ici:'
       ' Si je retire la clause WHERE, cela fonctionne
       ' Autrement, le code s'arrête avec l'erreur: "No value given for one or more required parameters"
    
        sqlstr = "SELECT * FROM [Vis$] WHERE Projet = " & Chr(34) & Project & Chr(34)
        myRS.Open sqlstr, conn, adOpenStatic, adLockReadOnly, adCmdText
        
        nbLigne = myRS.RecordCount
        nbColonne = myRS.Fields.Count
        
        If Not myRS.EOF Then
            ReDim Arr(1 To nbLigne, 1 To nbColonne)
            Do While Not myRS.EOF
                For RS_n = 1 To myRS.RecordCount 'lignes
                    For RS_f = 0 To myRS.Fields.Count - 1 'colonnes
                        valeur = myRS.Fields(RS_f).Value
                        Arr(RS_n, RS_f + 1) = valeur
                    Next
                    myRS.MoveNext
                Next
            Loop
        End If
        
        myRS.Close
        
        Set myRS = Nothing
        
            ct(1, 1) = nbLigne
            ct(1, 2) = nbColonne
        
        outArr = Arr
        compteur = ct
    
    End Function
    Pour information, j'ai déjà regardé sur votre site la formation que vous donnez sur le SQL et je l'ai essayé. Sans succès
    J'ai également regardé dans ce forum les différentes discussion qui traite le SQL ... Sans succès.
    Je me suis promené sur "stackoverflow" et autre forum Excel. Sans succès.

    Où se trouve mon erreur, je ne la voie pas !
    Peut être que quelqu'un parmis vous la voyez !

    Merci d'avance de votre aide.
    André

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonsoir, il me semble avoir rencontré un problème similaire il y a bien longtemps et je crois me souvenir m'être emmêlé les pinceaux avec les guillemets simples et doubles. Sans être vraiment sûr, teste quelque chose comme ceci: sqlstr = "SELECT * FROM [Vis$] WHERE Projet = '" & Project & "'"

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 226
    Par défaut Ne fonctionne pas
    Bonsoir

    Je viens de l'essayer... Sans succès

    Merci 'Franc' pour ton exemple
    Désolé

    André

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir,

    Je pense que le plus simple est le mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlstr = "SELECT * FROM [Vis$] WHERE Projet = " & Project

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 226
    Par défaut ne fonctionne pas
    Bonsoir,

    Je viens de l'essayer... ne fonctionne pas

    J'ai changé le nom de la feuille aussi.
    Je l'ai appelé : Consomables
    J'ai même essayé en changeant les titres

    Je me suis dit que "Projet" serait peut être un mot réservé ... mais non !

    Je me pose une question:

    est-ce que la connexion string est-elle correcte?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=modélisme.xlsm;Extended Properties="Excel 12.0;HDR=No;IMEX=1";
    Je ne sais pas si cela à avoir

    Egalement:
    J'ai activé (dans les références) la librairie: Microsoft ActiveX Data Objects 6.1 Library

    Ai-je choisi la bonne?

    Merci anasecu de ton aide
    Désolé
    André

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    Bonjour,
    Il faut lui dire que la première ligne c'est le nom des champs.
    Properties="Excel 12.0;HDR=Yes;Pour ce qui concerne les champs string il faut encadrer le texte avec des simples cote.
    "where champ ='" & me.textbox1 & "' And champ2='toto' Or etc.."

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 226
    Par défaut Cela fonctionne
    Bonjour,

    Effectivement, le problème viens de la chaine de connexion.
    J'ai mis "HDR=Yes;" et cela a fonctionné.

    En ce qui concerne la requête SQL ... Le standard.

    Soit : SELECT * FROM [Consomable$] WHERE Modèles = 'Locomotive';

    Merci à Thumb down pour votre aide.

    Merci à tous

    André

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    Citation Envoyé par dede_bo Voir le message
    Bonjour,

    Effectivement, le problème viens de la chaine de connexion....

    André
    Je sais 😂

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

Discussions similaires

  1. Utiliser un alias de colonne dans une clause Where MS SQL
    Par sir dragorn dans le forum Langage SQL
    Réponses: 11
    Dernier message: 12/10/2011, 09h31
  2. [PL/SQL Oracle] Syntaxe dans clause where
    Par Misdrhaal dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 13h33
  3. [Oracle / Sql] clause where avec resultat d'une requete
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 31/01/2006, 09h37
  4. [SQL] clause Where sur un booléen
    Par mosquitout dans le forum Access
    Réponses: 3
    Dernier message: 21/12/2005, 21h29
  5. État, Requète et clause Where(SQL)
    Par Philippe299 dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2005, 00h22

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