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

Langage SQL Discussion :

Transformer une macro VBA en SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Secrétaire
    Inscrit en
    Avril 2020
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 53
    Points : 46
    Points
    46
    Par défaut Transformer une macro VBA en SQL
    Bonjour,

    Je suis novice en sql et je tente de transformer une macro VBA Excel 2016 en SQL pour qu'elle s'execute sur un fichier Excel fermé.

    Voici la macro VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    cherche = Cells(Target.Row, 10).Value
        x = WorksheetFunction.CountIf(Worksheets("Base NOI").Range("a:a"), cherche)
        If x = 1 Then
            Set ou = Worksheets("Base NOI").Range("a:a").EntireColumn
            Set noi = ou.Find(cherche, ou.Range("a1"), , xlWhole, xlByRows, xlNext, False)
            nomnoi = noi.Offset(0, 1).Value
            Cells(Target.Row, 11).Value = nomnoi
            Cells(Target.Row, 12).Select
        End If
    En fait je veux faire une recherche verticale d'une valeur "cherche" dans un fichier Excel d'une seule feuille "Base NOI" et deux deux colonnes A et B.
    Je cherche ma valeur dans la colonne A et je veux récupérer celle de la colonne B (les valeurs dans A sont unique)

    Voici ce que j'écris, mais cela ne fonctionne pas...
    J'ai essayé avec SELECT FROM WHERE ou SELECT LIKE mais bon il me dit soit qu'il ne trouve pas la feuille soit que la table est plus grande que celle défini, alors que je ne défini rien...
    Je me suis inspiré d'autre forum...
    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
     
    Sub RequeteClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        Cellule = Cells(5, 10).Value
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\Users\e.finet1\Desktop\NOI.xlsx"
        'Nom de la feuille dans le classeur fermé
        Feuille = "Rapport 1"
     
        Set Cn = New ADODB.Connection
     
            '--- Connection ---
        With Cn
            .Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & Base & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .ConnectionString = "Data Source=" & Fichier & ";Extended Properties=Excel 12.0;"
            .Open
        End With
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Cn
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Cn.Select("[" & Feuille & Cellule & "]")
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Merci pour votre aide

  2. #2
    Membre du Club
    Homme Profil pro
    Secrétaire
    Inscrit en
    Avril 2020
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    J'ai eu la réponse sur le forum Excel

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cn As String, cherche As Object, Sql As String
    Cn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\NOI.xlsx;Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""
    If Target.Column = 10 And Target.Row > 1 And CStr(Target) <> "" Then
    Sql = "select * from [Rapport 1$] where [NOI]='" & Target.Text & "'"
       Set cherche = CreateObject("AdoDb.Recordset")
      cherche.Open Sql, Cn
      If Not cherche.EOF Then
        Target.Offset(, 1) = cherche("Description")
      End If
    '    x = WorksheetFunction.CountIf(Worksheets("Base NOI").Range("a:a"), cherche)
    '    If x = 1 Then
    '        Set ou = Worksheets("Base NOI").Range("a:a").EntireColumn
    '        Set noi = ou.Find(cherche, ou.Range("a1"), , xlWhole, xlByRows, xlNext, False)
    '        nomnoi = noi.Offset(0, 1).Value
    '        Cells(Target.Row, 11).Value = nomnoi
    '        Cells(Target.Row, 12).Select
    '    End If
    End If
    End Sub

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 734
    Points
    39 734
    Billets dans le blog
    9
    Par défaut
    Bonjour Progeric

    Attention, votre requête comporte un SELECT *, ce qui est très dangereux.

    Voyez pourquoi dans cet article de blog ICI

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

Discussions similaires

  1. [OpenOffice][Tableur] Transformer une macro VBA pour l'utiliser avec LibreOffice
    Par harsss dans le forum OpenOffice & LibreOffice
    Réponses: 12
    Dernier message: 02/07/2016, 16h53
  2. [XL-2013] Validation de données via une macro VBA/SQL
    Par Yoriko dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2016, 23h13
  3. Transformer une macro VBA en .exe ?
    Par panda78 dans le forum Général VBA
    Réponses: 2
    Dernier message: 09/12/2012, 16h36
  4. Transformer une macro VBA en .exe ?
    Par BBe8127 dans le forum Général VBA
    Réponses: 4
    Dernier message: 05/03/2009, 11h36
  5. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47

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