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 :

SQL sous MS EXCEL


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut SQL sous MS EXCEL
    Bonjour tout le monde !!
    j'ai une question à propos de la possibilité de l'utilisation des requêtes SQL sous MS EXCEL ?
    J'ai des tableaux disperser sur plusieurs feuilles (selon leurs secteur d’activités)
    et je voudrais créer un menu de recherche à base de VBA afin de simplifier le processus de recherche
    le UserForm est illustré comme suite :

    |--------------------------------|
    | VILLE     |_____________|      |
    |                                |
    | QUARTIER  |_____________|      |
    |                                |
    | ACTIVITE  |_____________|      |
    |                                |
    |                 Rechercher     |
    |--------------------------------|
    les champs du classeur sont organisé comme ci-dessous :

            A               B
    _ |_____________|____________________
    1 |REF		| i1
    2 |Ville	| XXXX
    3 |QUARTIER	| YYYYY
    4 |ACTIVITE	| INFORMATIQUE 
    5 |	
    6 |Entreprise	| ZZZZZ
    7 |Decideur	|
    8 |Poste	|  	
    9 |Adresse	| XY EEEEEEEEEE
    10|TEL		| 00 00 00 00 00
    11|FAX		|
    12|Mobile	|	
    13|Email 	|	
    14|Web		| www.site.com
    15|AUTRE	| 	
    16|
    17|REF		| i2
    18|Ville	|......
    ...
    ......etc


    J'ai essayé le code suivant mais ça n'a pas marché, vu que mes données sont inséré horizontalement

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
    'Les données sont dans les colonnes A à D, d'un onglet nommé "Base".
    'La procédure effectue un remplissage conditionnel des Combobox en fonction de
    'ce qui est sélectionnée dans le contrôle précédent:
    'La sélection du ComboBox1 (données colonne A) définit le contenu du ComboBox2 (données colonne B) ,
    'La sélection du ComboBox2 définit le contenu du ComboBox3 (données colonne C) …etc...
    '
     
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Base")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = CStr(Ws.Range("A65536").End(xlUp).Row)
     
        'Remplissage du ComboBox1
        Alim_Combo 1
     
    End Sub
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
    End Sub
     
     
    'Procédure pour alimenter les ComboBox
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
        'Définit le ComboBox à remplir
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
        'Supprime les anciennes données
        Obj.Clear
     
        'alimente le Combobox initial (Combobox1)
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = CStr(Ws.Range("A" & j))
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem CStr(Ws.Range("A" & j))
            Next j
        Else
            'Alimentation conditionnelle des autres Combobox en fonction de
            'ce qui est sélectionnée dans le contrôle précédent:
            '(La sélection du ComboBox1 définit le contenu du ComboBox2,
            'La sélection du ComboBox2 définit le contenu du ComboBox3 …etc...)
            For j = 2 To NbLignes
                If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = CStr(Cible) Then
                    Obj = CStr(Ws.Range("A" & j).Offset(0, CbxIndex - 1))
                    If Obj.ListIndex = -1 Then Obj.AddItem CStr(Ws.Range("A" & j).Offset(0, CbxIndex - 1))
                End If
            Next j
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub
    Ma Question : est ce que je pourrais me servir de langage SQL pour sélectionner les données que je voulus récupérer

    Bonne Journée à vous tous !

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Bonjour,

    Je pense qu'il faudra que tu mettes tes entêtes de champs en ligne 1 pour que ça fonctionne avec SQL et non pas en colonne A...

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    Merci pour Votre réponse
    mais c'est exactement mon souci ! toutes les données du classeur (30 feuilles ) sont insérer horizontalement , les entêtes des champs sont en colonne A au lieu ligne 1
    une feuille contient environ 40 tableau pareil à celui illustré en haut
    ça serais difficile voir pénible à réécrire tous ces données

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Transpose, tu connais?

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    Merci EngueEngue pour votre réponse et votre intérêt
    non , Je viens de le découvrir , mais selon l'explication trouvée "TRANSPOSE function is used to transfer data located in a row into a column or data located in a column into a row"

    mais.. moi .. je devrais garder l'organisation du classeur tel quel est (édité par mon boss)

    la création de cette outil de recherche me parait difficile voire impossible (en gardant l'organisation du classeur )

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Peut-être une petite macro qui te "transposerait" tes tableaux ?

    Par contre, pour pouvoir utiliser SQL, les données d'une feuille doivent être positionnées correctement, c'est-à-dire avec les entêtes en haut et les données dessous, comme une table Access.

    Si tu as 40 tableaux par feuille, ça me paraît impossible, mais je n'ai pas vu le classeur...

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    Merci Bien Parmi pour votre éclaircissement
    mes tableaux sont positionné comme suite :

    x |A            |B
    _ |_____________|____________________
    1 |REF		| i1
    2 |Ville	| XXXX
    3 |QUARTIER	| YYYYY
    4 |ACTIVITE	| INFORMATIQUE 
    5 |	
    6 |Entreprise	| ZZZZZ
    7 |Decideur	|Monsieur X
    8 |Poste	| Gérant
    9 |Adresse	| XY EEEEEEEEEE
    10|TEL		| 00 00 00 00 00
    11|FAX		|
    12|Mobile	|	
    13|Email	|	
    14|Web		| www.site.com
    15|AUTRE	| 
    16|___________________________
    17|REF		| i2
    18|Ville	|......
    ...
    ......etc

    je vous joins un exemple sur fichier excel
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Si je me fie au fichier joint, ceci pourrait faire le travail.
    Il resterait à supprimer les colonnes originales


    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
    Sub Transposer()
        Dim I As Long
        Dim nbLignes As Long, Ligne As Long
        Dim Feuille As Worksheet
        Dim Debut As Long
     
        For Each Feuille In Worksheets
            Feuille.Activate
            Ligne = 2
            nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
     
            'Recherche du début
            If Range("A1") <> "REF" Then
                Debut = Columns("A").Find("REF", LookIn:=xlValues, LookAt:=xlWhole).Row
            Else
                Debut = 1
            End If
     
            'Copie des entêtes
            Range("A" & Debut & ":A" & Debut + 14).Copy
            Range("D1").PasteSpecial xlPasteValues, Transpose:=True
     
            'Copie des détails
            For I = Debut To nbLignes Step 16
                Range("B" & I & ":B" & I + 14).Copy
                Range("D" & Ligne).PasteSpecial xlPasteValues, Transpose:=True
                Ligne = Ligne + 1
            Next
        Next
    End Sub

Discussions similaires

  1. Requete Access sql sous vba Excel
    Par titeZ dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/04/2008, 12h02
  2. recuperer une requete SQL sous forme de tableau EXCEL
    Par skillipo dans le forum VBA Access
    Réponses: 0
    Dernier message: 06/12/2007, 17h45
  3. Problème de récupération de données d'une base SQL sous Excel en VBA
    Par seba57_r dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/11/2007, 18h03
  4. [VBA-E] Requete SQL sous Excel
    Par climz dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2006, 14h05

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