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 :

Des requetes sql en code vba de l'excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut Des requetes sql en code vba de l'excel
    Bonjour,

    J'ai une question à poser à propos de vba de l'excel

    Quelle est la formule correspondante en vba qu'on peut utiliser si on veut effectuer cette requette

    "select column A from mon tableau"?

    Et mon tableau est dans une feuille en excel,

    Sans faire appelle à une base de données parce que je vais tout travailler sur mon tableau qui est dans la feuille
    et Merci

  2. #2
    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
    Tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("NomDetaFeuille").Range("A:A").Select

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    apres select j'ecris ma requete?

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    Bonjour

    Une base de données et un tableau de tableur sont 2 choses différentes.

    Même si dans quelques cas on peut utiliser des requêtes sur un tableau Excel, ce n'est pas le cas le plus "normal".

    Il vaudrait mieux expliquer ce que tu veux faire concrètement de cette colonne A...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut voila ce qui est demandé plus precisement
    Comparer la désignation de l’item avec la Base critère

    - Comparer les Intervalles de tolérance

    - Comparer la valeur relevée avec les bornes de la base critère

    - Renseigner la sanction

    - Renseigner le commentaire suivant le sens de la Hors Tolérances

    o Commentaire de gauche si la valeur est inférieure à la valeur nominale

    o Commentaire de droite si la valeur est supérieure à la valeur nominale

    o Le commentaire s’il n’y en a qu’un seul.



    au faite j'ai deux fichier un pour le pointage = base critère et l’autre pour le remplissage

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    Bonjour

    Sur le principe, même en requête sur une base de données, il faudrait un ID commun pour établir une relation et comparer les autres champs...

    Ici tu dis que tu as deux fichiers, chacun avec un tableau dont on ne connait pas la structure. Commentaire de gauche et Commentaire de droite paraissent nébuleux en l'état...

    Tu peux consulter cela http://silkyroad.developpez.com/VBA/ClasseursFermes/ mais a priori il faudrait plutôt ouvrir le second fichier et comparer par une boucle...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code Avec titre de colonnes : 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
    Sub testHDR_Yes()
    Dim Cn As Object, Rs As Object, Sql As String
    Set Cn = CreateObject("Adodb.connection")
    With Cn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;"""
            Sql = "select [EnteteColonne1]  from [Nomonglet$]"
            Set Rs = CreateObject("Adodb.RecordSet")
           .Open
            Rs.Open Sql, Cn
            Rs.Close
            Set Rs = Nothing
            .Close
        End With
        Set Cn = Nothing
    End Sub
    Code Sans titre de colonnes : 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
    Sub testHDR_No()
    Dim Cn As Object, Rs As Object, Sql As String
    Set Cn = CreateObject("Adodb.connection")
    With Cn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=1;"""
            Sql = "select [F1]  from [Nomonglet$]" '[F1] collonne A
            Set Rs = CreateObject("Adodb.RecordSet")
           .Open
            Rs.Open Sql, Cn
            Rs.Close
            Set Rs = Nothing
            .Close
        End With
        Set Cn = Nothing
    End Sub

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    J'ai réussi à faire la connexion entre mon tableau et sql
    J'ai excute la requete select * from mafeuille
    Mais comment faire pour faire select colonneA from mafeuille where macolonneB=macolonneC
    Et merci pour votre aide

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    je t'es donnée la réponse au poste #7!

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    J ai essayé la methode de F1 ca marchée mais par exemple poue la colonne B qu'est ce que je dois mettre

  11. #11
    Invité
    Invité(e)
    Par défaut
    F1=A;F2=B; etc...

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Oui c'est réussi merci pour votre aide

    j'essaie à manipuler deux fichier depuis la même sub
    Mais j'ai un message d'erreur https://scontent-mad1-1.xx.fbcdn.net...19&oe=57980F33

    voila 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
    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
    Sub TestConnection_V1()
        Dim Cn As ADODB.Connection
        Dim Cn2 As ADODB.Connection
        Dim Fi1, Fi2 As String
        Dim client, safran As String, SQL As String
        Dim Rst As ADODB.Recordset
     
        Fi2 = "C:\Users\admin\Desktop\nouveau travail\safran.xlsm"
        Fi1 = "C:\Users\admin\Desktop\nouveau travail\Copie de FormIDD_DERX189100_RETOUR_SES.xlsm"
        client = "Description_et_Decision_Techn"
        safran = "Feuil1"
        Set Cn = New ADODB.Connection
     
        '--- Connexion ---
     
        With Cn
             Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fi1 & _
                      ";Extended Properties=""Excel 12.0;HDR=No;"";"
        End With
        With Cn2
                Cn2.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fi2 & _
                      ";Extended Properties=""Excel 12.0;HDR=No;"";"
        End With
     
        'Définit la requête.
     SQL = "Select [" & client & "$].[F5] as a , [" & safran & "$].[F2] as b from [" & client & "$],[" & safran & "$] where a=b"
     
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Range("A135").CopyFromRecordset Rst
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
      Cn2.Close
        Set Cn2 = Nothing
     
     
    End Sub
    Desole je sais pas comment l'afficher comme un code

  13. #13
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Cn As New ADODB.Connection
     Dim Cn2 As New ADODB.Connection
    Pour formater ton code, tu le grise avec la souris et tu click sur l'icône #

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    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
    Sub TestConnection_V1()
        Dim Cn As ADODB.Connection
        Dim Cn2 As ADODB.Connection
        Dim Fi1, Fi2 As String
        Dim client, safran As String, SQL As String
        Dim Rst As ADODB.Recordset
     
        Fi2 = "C:\Users\admin\Desktop\nouveau travail\safran.xlsm"
        Fi1 = "C:\Users\admin\Desktop\nouveau travail\Copie de FormIDD_DERX189100_RETOUR_SES.xlsm"
        client = "Description_et_Decision_Techn"
        safran = "Feuil1"
        Set Cn = New ADODB.Connection
        Set Cn2 = New ADODB.Connection
        '--- Connexion ---
     
        With Cn
             Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fi1 & Fi2 & _
                      ";Extended Properties=""Excel 12.0;HDR=No;"";"
     
        End With
         With Cn2
             Cn2.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fi2 & _
                      ";Extended Properties=""Excel 12.0;HDR=No;"";"
     
        End With
        'Définit la requête.
     SQL = "Select [" & client & "$].[F5] as a from [" & client & "$] where [" & safran & "$].[F2]=[" & client & "$].[F5]"
     
        ', [" & safran & "$].[F2] as b from [" & client & "$],[" & safran & "$] where a=b"
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Range("A135").CopyFromRecordset Rst
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
      Cn2.Close
        Set Cn2 = Nothing
     
     
     
    End Sub

    j'ai essaye mais il me donne
    https://scontent.xx.fbcdn.net/v/t34....86&oe=5799038A
    l'erreur est ici https://scontent-mad1-1.xx.fbcdn.net...18&oe=57992399
    j'ai tout essayé

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu n'as pas l'impression de concaténer les deux fichier?
    Là je suis sur mon téléphone portable mais dès que je retrouve mon ordinateur on va revoir tous!

    Je suis un des meilleurs didacticiel que tu pourras trouver sur le sujet et en plus interactif!

    Maintenant que j'ai évaluer ton niveau on va pouvoir passer au choses séreuses.
    Dernière modification par Invité ; 26/07/2016 à 08h33.

  16. #16
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Je suis debutante

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nisrine hammout Voir le message
    Je suis debutante
    j'ai bien remarqué!

    Quand tu utilise les variable de type DODB.Connection tu es obligé de bricoler les références ce qui te brides à utiliser la même version de Windows et/ou Excel !

    Je préconise d’utiliser CreateObject qui t’affranchis de cette corvée et ton application reste compatible toutes versions !

    Diviser pour régner.
    Il nous est souvent utile d’exécuter les mêmes actions. Il est de ce fait important de factoriser nos actions sous forme procédure et de fonctions.

    Avantage c’est également de centraliser nos actions, ainsi il devient possible d’enrichir un fichier de log retracent l’historique de nos action.

    Nous allons implémenter les différentes actions utiles pour notre traitement.

    On verra par la suite que tu n’a pas besoin de faire plusieurs connections qu’il est possible d’utiliser une connexion à un fichier et faire une requête sur un autre fichier Excel ! Il faut noter qu’une requête permet un traitement de masse sur une base de données (Excel en l’occurrence) mais le temps de connexion reste relativement lent et on s’affranchira dans la mesure du possible de multiplier les connexions ! On verra qu’il est possible de faire des liaisons externe vers d’autres fichiers Excel dans une requête. On pourra même faire des jointures entre onglets de fichiers différents.

    Voila à quoi pourrait ressembler ton 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
    Sub Test()
    Dim Cn As Object, Rst As Object, Sql As String, Fi1 As String, Fi2 As String,client  as String,safran   as String
    Fi2 = "C:\Users\admin\Desktop\nouveau travail\safran.xlsm"
    Fi1 = "C:\Users\admin\Desktop\nouveau travail\Copie de FormIDD_DERX189100_RETOUR_SES.xlsm"
    client = "Description_et_Decision_Techn"
    safran = "Feuil1"
    Set Cn = OpenConnetion(Fi1, False)
    If TypeName(Cn) = "Nothing" Then Exit Sub
    Sql = "Select Frm1.[F5]  from [" & client & "$] as  Frm1 inner join   (Select * from [" & safran & "$] in '" & Fi2 & "'  'excel 8.0;HDR=no;IMEX=1;' )as frm2 on frm2.[F2]=frm1.[F5]"
    Set Rst = OpenRecordSet(Sql, Cn)
    If TypeName(Rst) = "Nothing" Then Exit Sub
    Range("A135").CopyFromRecordset Rst
    Rst.Close: Cn.Close
    Set Rst = Nothing: Set Cn = Nothing
    End Sub
     
    Public Function OpenConnetion(FichierXls As String, AvecTitre As Boolean) As Object
    On Error Resume Next
    Dim HDR
    If Dir(FichierXls) = "" Then MsgBox FichierXls & vbCrLf & "Pas trouvé": Exit Function
    HDR = Array("No", "Yes")
    Set OpenConnetion = CreateObject("ADODB.Connection")
    With OpenConnetion
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = "Data Source=" & FichierXls & ";Extended Properties=""Excel 12.0 Xml;HDR=" & HDR(Abs(AvecTitre)) & ";IMEX=1;"""
            .Open
            If Err Then
                MsgBox Err.Description
                Set OpenConnetion = Nothing
            End If
            Err.Clear
            On Error GoTo 0
    End With
    End Function
    Public Function OpenRecordSet(Sql, Cn As Object) As Object
    'Retourne un RecordeSet
    On Error Resume Next
    Set OpenRecordSet = CreateObject("ADODB.Recordset")
    OpenRecordSet.Open Sql, Cn, 1, 3
    If Err Then
        MsgBox Err.Description
    Set OpenRecordSet = Nothing
    End If
    Err.Clear
    On Error GoTo 0
    End Function
    Dernière modification par Invité ; 26/07/2016 à 13h09.

  18. #18
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Select Frm1.[10]  from [" & client & "$] as  Frm1 inner join   (Select * from [" & safran & "$] in '" & Fi2 & "'  'excel 8.0;HDR=no;IMEX=1;' )as frm2 on frm2.[F2]=frm1.[F5]"
    vous m'avez fourni ce code
    Mais, quand on a étudié le langage de base de données on travaille seulement comme le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " select  [" & client & "$].[F10] from [" & client & "$] , [" & safran & "$] where [" & safran & "$].[F2]=[" & client & "$].[F5] and [" & safran & "$].[F8]=[" & client & "$].[F9] and [" & safran & "$].[F7]=[" & client & "$].[F8]"
    Ma question est la suivante est ce que vba comprend seulement votre méthode car je l'ai vu aussi dans un tuto ?
    si oui comment faire pour mettre plusieurs conditions dans le where qui est equivaut à on dans votre code?

    et Merci

  19. #19
    Invité
    Invité(e)
    Par défaut
    Oui bien que vba comprend mon code . Si tu copy Cole le code dans un module vba et que tu testes la sub test tu me diras.

    On ne t'as jamais appris qu'il était possible de renommer un from?
    select frm.* from mytable as frm

  20. #20
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    le trucs que je suis pas habitué c'est inner join on

Discussions similaires

  1. requete sql et code vba concatenation champs par date
    Par elhaissoufi dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 13/12/2009, 02h33
  2. requete sql dans code vba
    Par kernel57 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2008, 16h30
  3. [VBA][SQL] code pour requete sql update en vba
    Par titocv723 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 24/10/2006, 18h45
  4. Aide requete SQL ou fonction VBA
    Par nykola7 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/03/2006, 18h51
  5. Recuperer les erreurs des requetes sql en asp
    Par emile13 dans le forum ASP
    Réponses: 3
    Dernier message: 01/04/2004, 14h49

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