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 :

automatiser la selection de cellules spécifiques et les intégrer dans une requête sous microsoft query


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 61
    Points
    61
    Par défaut automatiser la selection de cellules spécifiques et les intégrer dans une requête sous microsoft query
    Voilà 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
    Range("B2:B7").Select
        Range("B7").Activate
        Selection.Copy
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
            "ODBC;DSN=MS Access Database;DBQ=C:\Documents and Settings\G502249\Bureau\Liste des collaborateurs et leurs caractéristiques.accdb;De" _
            ), Array( _
            "faultDir=C:\Documents and Settings\Bureau;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _
            )), Destination:=Range("$S$19")).QueryTable
            .CommandText = Array( _
            "SELECT C.Nom,C.Prénom  FROM Collaborateur C   where C.ID in   ('S23'," & Chr(13) & "" & Chr(10) & "'S5'," & Chr(13) & "" & Chr(10) & "'S8'," & Chr(13) & "" & Chr(10) & "'S1'," & Chr(13) & "" & Chr(10) & "'S60'," & Chr(13) & "" & Chr(10) & "'SE0'" & Chr(13) & "" & Chr(10) & ");" _
            )
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = "Tableau_Requête_n°3"
            .Refresh BackgroundQuery:=False
        End With
    Je veux juste que la requête soit appliquée à des ID qui différent, pas toujours les mêmes. Normalement elles se trouvent dans la colonne B.

    Moi dans mon exemple c'est de B2 à B7. et les ID sont ceux là:
    S23, S5, S8, S1, S60, SE0.

    Donc si c'es possible répondez moi.

    Cdt,
    SKIP

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Je ne manipule pas les requêtes mais à priori ça devrait donner un truc de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT C.Nom,C.Prénom  FROM Collaborateur C   where C.ID in   (" & Cells(2, 2) & "," & Chr(13) & "" & Chr(10) & Cells(3, 2) & "," & Chr(13) & "" & Chr(10) & Cells(4, 2) & "," & Chr(13) & "" & Chr(10) & Cells(5, 2) & "," & Chr(13) & "" & Chr(10) & Cells(6, 2) & "," & Chr(13) & "" & Chr(10) & Cells(7, 2) & Chr(13) & "" & Chr(10) & ");"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Il y 'a une erreur qui s'affiche c'est l'erreur d'exécution "1004": Erreur de syntaxe SQL et quand je clique sur déboguage, c'est cette ligne de code qui est en jaune :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Refresh BackgroundQuery:=False
    Tu ne sais pas quel est la cause de l'erreur?

    cdt,
    SKIP

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Bonjour,
    Si le code est comme ceci,et on veut appliquer la requête pour des valeurs qui existent dans la colonne B, c'est à dire de B2 à Bx avec x la dernière ligne qu'il y'a dans le tableau. En précisant bien sûr que B2 correspond à S2 dans la requête et B3 à S42 etc...
    Avec S2 et S42 les noms dont on veut appliquer la requête.
    Comme vous le voyez ci-dessous:

    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
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
            "ODBC;DRIVER={MySQL ODBC 5.1 Driver};UID=user;PASSWORD=****;SERVER=host;DATABASE=db1;PORT=3306;" _
            , Destination:=Range("$S$14")).QueryTable
            .CommandText = Array( _
            "select h.name,a.tag, h.userid from accountinfo a  inner join hardware h  on a.hardware_id = h.id  where h.NAME in  (  'S2','S42','P15','E41','ER01" _
            , _
            "41','M98','SE31','SE31','SE59','S02','SR76','S995','SP95','S32');" _
            )
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = "Tableau_Requête_n°2"
            .Refresh BackgroundQuery:=False
        End With
    Merçi d'avance d'une réponse
    cdt,
    SKIP

Discussions similaires

  1. Eviter les doublons dans une requête.
    Par Smint dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/03/2017, 16h17
  2. Réponses: 8
    Dernier message: 23/02/2015, 09h20
  3. Réponses: 1
    Dernier message: 01/08/2006, 14h58
  4. Réponses: 3
    Dernier message: 04/05/2006, 13h00
  5. Comment eviter les doubons dans une requête?
    Par jyms2006 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/03/2006, 14h08

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