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 :

Excel / Access - Problème requete SQL avec 2 clause WHERE


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Excel / Access - Problème requete SQL avec 2 clause WHERE
    Bonjour,

    J'aurais besoin d' un petit coup de main pour terminer un projet ...


    En partant d'excel en VBA, je souhaiterais qu'un enregistrement se fasse dans une table ACCESS avec 2 paramètres WHERE ... (voir détail dans le fichier joint)

    J'ai essayé mais il me manque des connaissances en sql à priori ... car tantot ca m'efface des lignes ou alors j'ai des messages d'erreur en tout genre.

    Je joint les 2 fichiers (excel et BDD ACCESS)

    J'espere que quelqu'un pourra m'aider


    Merci Beaucoup


    Archive.zip

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Comme tu es nouveau, prends le temps de lire les règlements...
    D'une part tu n'es pas dans le forum de macros.
    D'autre part, la plupart des gens n'ouvriront pas de fichiers joints, encore moins avec macros...

    Est-ce que tu peux écrire la requête que tu essaies de mettre en place avec quelques explications sur ce qui ne fonctionne pas?
    MPi²

  3. #3
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    La solution envisagée n'est pas des meilleurs pour ton problème:
    Je cite "En partant d'excel en VBA, je souhaiterais qu'un enregistrement se fasse dans une table ACCESS avec 2 paramètres Where"

    Je recommande d'aller dans Access, importer la bonne feuille dans une table (appelons la "Tbl"), puis utiliser une requête ACCESS sur Tbl, tenant compte de tes critères dans la clause WHERE.

  4. #4
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour,

    Ton exposé est déjà assez étonnant:
    • Une requête SQL ne peut avoir qu'une clause WHERE. Cela dit, il est évidemment possible que cette clause contienne plusieurs conditions, grâce à AND et OR;
    • Une requête qui enregistrerait une donnée ( = INSERT INTO) ne contient pas de clause WHERE, car il n'y a pas de condition à l'insert;
    • Une requête ne peut pas ajouter ou supprimer des lignes, car il n'est pas possible de réaliser un INSERT dans une même requête qu'un UPDATE ou qu'un DELETE. Dans UNE requête, tu ne peux réaliser qu'une seule de ces trois opérations.



    Il serait donc intéressant que tu exprimes mieux ton problème et que tu nous montre la requête que tu utilises.
    "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...
    ---------------

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    En fait j'ai changé mon fusil d'épaule, je n'update que la ligne active du tableau ce qui m'évite des complications niveau langage SQL (que, comme vu l'avez compris, je ne maitrise pas bien).

    Pour vous donner plus de contexte, l'idée de départ était de créer un fichier de travail excel collaboratif mis à jour en temps reel et ou tous les collaborateurs peuvent travailler en meme temps.

    J'ai procédé comme ceci en VBA, avec une BDD Access :
    -
    dans Worksheet_Change j'update chaque fois uniquement la ligne entière correspondant à la cellule modifié (pour ne pas overwriter les potentielles modif d'autres utilisateurs sur la BDD sur d'autres lignes)
    dans worksheet_Selection Change je lance un refresh des données de la BDD Access au cas ou un autre utilisateurs y a apporté des modifs, de cette manière je les vois en temps réelles.

    Sur chaque poste de travail le meme fichier excel pour ecrire / et lire la BDD.

    Voilà en gros l'idee du projet.

    Je sais que c'est certainement du bidouillage et pas très orthodoxe mais j'apprend tout seul dans mon coin (et grace à l'aide de gens sympas comme vous) et ca a le mérite de marcher...


    Un extrait de mon code en Worksheet_Change si un jour ca sert à quelqu'un ...

    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
    'Macro RecordAcliveRow dans ACCESS
     
    Dim Plage As Range
    Dim Array1 As Variant
    Dim x As Variant
    Dim Db1 As Database
    Dim Rs1 As Recordset
    Dim Sql As String
    Dim Exist As String
     
    ' permet la validation en cas de cellule normale ou cellule contenant une liste de validation
    If ActiveCell.Row <> Target.Row Then 
    Set Plage = ActiveSheet.ListObjects(1).ListRows(ActiveCell.Row - 2).Range 
    Else
    Set Plage = ActiveSheet.ListObjects(1).ListRows(ActiveCell.Row - 1).Range
    End If 
     
        Array1 = Plage.Value
        'Ouverture de la base de donnée BaseAccess.accdb
     
        Set Db1 = DBEngine.OpenDatabase("\\PC-ACCUEIL-DROI\Users\Public\BaseAccess.accdb")
        For x = 1 To UBound(Array1, 1)
     
            'Requête sur la table Salarie
            Sql = "SELECT * FROM Salarie where ID=" & Array1(x, 1) & ";"
            Set Rs1 = Db1.OpenRecordset(Sql)
            Exist = Rs1.RecordCount
            If Exist = 0 Then
                Set Rs1 = Db1.OpenRecordset("Salarie", dbOpenDynaset)
                    With Rs1
                        .AddNew
                        .Fields("ID") = Array1(x, 1)
                        .Fields("Nom") = Array1(x, 2)
                        .Fields("Prenom") = Array1(x, 3)
                        .Update
                    End With
            Else
                With Rs1
                    .Edit
                    .Fields("Nom") = Array1(x, 2)
                    .Fields("Prenom") = Array1(x, 3)
                    .Update
                End With
            End If
        Next
        Db1.Close
     
    enderror:
     
     
     
    Call Refresh 'appelle macro qui synchronise excel avec la BDD Access
     
     
    End Sub

    Merci à tous de votre intérêt en tout cas !

Discussions similaires

  1. Problème sur Dcount avec une clause where
    Par robyseb dans le forum VBA Access
    Réponses: 9
    Dernier message: 18/08/2011, 22h39
  2. [Access] Transformer Requete SQL avec le générater d'expression
    Par rgdu86 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/02/2008, 10h43
  3. Problème requete SQL avec hibernate
    Par kakahn dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/01/2008, 12h08
  4. [Excel/VBA] Requete SQL avec clause sur une suite de Cellule
    Par Myogtha dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/02/2007, 17h36
  5. Requete SQL avec une clause FROM variable
    Par aCe_GiK dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 11/04/2006, 13h45

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