Requêtes sql select from where en VBA excel

misswise

XLDnaute Nouveau
Bonjour;
J'ai un répertoire comportant 75 fichiers excel de même structure, je veux les récupérer dans un seul fichier mais ne sélectionner que les lignes dont le champ catégorie comporte la valeur 6.

J'ai effectuer une connexion adob avec une requête sql de type select from table(nom de la feuille ou se trouve les données) mais je sais pas comment excel renomme un champs et comme on introduit la condition .

Merci pour votre
 

Pièces jointes

  • exemple.xlsx
    8.3 KB · Affichages: 415
  • exemple.xlsx
    8.3 KB · Affichages: 479
  • exemple.xlsx
    8.3 KB · Affichages: 516

misswise

XLDnaute Nouveau
Re : Requêtes sql select from where en VBA excel

Merci pour ton intérêt;
Voilà le code que j'ai trouvé sur un site internet, ce code me permets de fusionner toutes les feuilles de mon répertoire dans une seule feuille mais je ne veux que les lignes qui portent la valeur 6 au niveau de la colonne catégorie. Je dois donc modifier au niveau de Cible = "SELECT * FROM [" & Feuille & "];" et ajouter where condition mais je sais pas comment excel reconnu un champs variable..


'Nécessite d'activer la référence
'Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim xConnect As String, Cible As String
Dim Fichier As String, Dossier As String, Feuille As String
Dim i As Long

'nom du répertoire contenant les classeurs à regrouper
Dossier = "C:\nom dossier"
'Nom de la feuille dans les classeurs fermés
'Ne pas oublier le symbole $ après le nom de la feuille
Feuille = "Feuil1$"
i = 2

Fichier = Dir(Dossier & "\*.xls")
'boucle sur les fichiers du repertoire
Do While Len(Fichier) > 0
xConnect = "DRIVER={Microsoft Excel Driver (*.xls)};" & _
"ReadOnly=1;DBQ=" & Dossier & "\" & Fichier
'connection classeur
Set Cn = New ADODB.Connection
Cn.Open xConnect

'Requete
Cible = "SELECT * FROM [" & Feuille & "];"



Set Rs = New ADODB.Recordset
Rs.Open Cible, xConnect, adOpenStatic, adLockOptimistic, adCmdText

'Ecriture dans la feuille de calcul
If Not Rs.EOF Then Cells(i, 1).CopyFromRecordset Rs
i = Cells(i, 1).End(xlDown).Row + 1

Rs.Close
Cn.Close
Set Cn = Nothing
Set Rs = Nothing
Fichier = Dir()
Loop

MsgBox "Terminé"
 

misswise

XLDnaute Nouveau
Re : Requêtes sql select from where en VBA excel

J'ai déjà essayé mais ça marche pas il connait pas catégorie, pour les accents c'est pas moi qui les ai mises mais les fichiers initiaux sont structurés de telle manière.
En fait je sais pas comment excel reconnu un champs colonne
 

tototiti2008

XLDnaute Barbatruc
Re : Requêtes sql select from where en VBA excel

Re,

Sinon, plutôt que convertir, tu peux traiter les xlsx...

Code:
Fichier = Dir(Dossier & "\*.xlsx")


puis

Code:
xConnect = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"ReadOnly=1;DBQ=" & Dossier & "\" & Fichier
 

misswise

XLDnaute Nouveau
Re : Requêtes sql select from where en VBA excel

Je vous remercie vivement pour ton aide en fait enfin ça marcher.

Pourtant j'ai deux petits problème

*Problème que je comprends pas quand le fichier fusionné ne comprends pas l'entête sous forme de noms de des champs;
* Je dois ajouter à chaque fichier une colonne qui comprends le nom de la ville, le nom de la ville est contenu dans le nom du fichier

Etape1 Extraire le nom de la ville à partir du nom du fichier et le mettre dans une variable

Etape 2 Créer une colonne au sein de la feuille

Etape3 Insérer le nom de la ville et le dupliquer sur les différentes lignes

je dois faire cette tâche pour les 47 fichiers excel fermés


Merci une autre fois je suis vraiment reconnaissante
 

tototiti2008

XLDnaute Barbatruc
Re : Requêtes sql select from where en VBA excel

Re,

à tester

Code:
'Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim xConnect As String, Cible As String
Dim Fichier As String, Dossier As String, Feuille As String, fld as object
Dim i As Long, j as long

'nom du répertoire contenant les classeurs à regrouper
Dossier = "C:\temp"
'Nom de la feuille dans les classeurs fermés
'Ne pas oublier le symbole $ après le nom de la feuille
Feuille = "Feuil1$"
i = 2

Fichier = Dir(Dossier & "\*.xlsx")
'boucle sur les fichiers du repertoire
Do While Len(Fichier) > 0
xConnect = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"ReadOnly=1;DBQ=" & Dossier & "\" & Fichier
'connection classeur
Set Cn = New ADODB.Connection
Cn.Open xConnect


'Requete
Cible = "SELECT [" & Feuille & "].*, '" & Replace(Fichier, ".xlsx", "") & "' as VILLE FROM [" & Feuille & "] where Catégorie = 6;"



Set Rs = New ADODB.Recordset
Rs.Open Cible, xConnect, adOpenStatic, adLockOptimistic, adCmdText

If i = 2 Then
    j = 0
    For Each fld In Rs.Fields
        Cells(1, j + 1).Value = Rs.Fields(j).Name
        j = j + 1
    Next fld
End If
'Ecriture dans la feuille de calcul
If Not Rs.EOF Then Cells(i, 1).CopyFromRecordset Rs
i = Cells(i, 1).End(xlDown).Row + 1

Rs.Close
Cn.Close
Set Cn = Nothing
Set Rs = Nothing
Fichier = Dir()
Loop

MsgBox "Terminé"
 
Dernière édition:

misswise

XLDnaute Nouveau
Re : Requêtes sql select from where en VBA excel

En fait le nom des fichiers du répertoire et de la forme suivante ventes_lyon; ventes_Marseille,....ce qu'il me faut faire c extraire le nom de la ville du nom de fichier et l'insérer dans une colonne de la feuille correspondante avant de fusionner les fichiers du repertoire car au moment de la fusion je perds la donnée relative à la ville .
Merci une autre fois pour ton soutien c'est vraiment très gentil de ta part
 

tototiti2008

XLDnaute Barbatruc
Re : Requêtes sql select from where en VBA excel

Re,

à tester

Code:
'Microsoft ActiveX Data Objects x.x Library
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim xConnect As String, Cible As String
Dim Fichier As String, Dossier As String, Feuille As String, fld as object
Dim i As Long, j as long

'nom du répertoire contenant les classeurs à regrouper
Dossier = "C:\temp"
'Nom de la feuille dans les classeurs fermés
'Ne pas oublier le symbole $ après le nom de la feuille
Feuille = "Feuil1$"
i = 2

Fichier = Dir(Dossier & "\*.xlsx")
'boucle sur les fichiers du repertoire
Do While Len(Fichier) > 0
xConnect = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"ReadOnly=1;DBQ=" & Dossier & "\" & Fichier
'connection classeur
Set Cn = New ADODB.Connection
Cn.Open xConnect


'Requete
Cible = "SELECT [" & Feuille & "].*, '" & Replace(Replace(Fichier,  ".xlsx", ""),"ventes_","") & "' as VILLE FROM [" & Feuille & "] where  Catégorie = 6;"



Set Rs = New ADODB.Recordset
Rs.Open Cible, xConnect, adOpenStatic, adLockOptimistic, adCmdText

If i = 2 Then
    j = 0
    For Each fld In Rs.Fields
        Cells(1, j + 1).Value = Rs.Fields(j).Name
        j = j + 1
    Next fld
End If
'Ecriture dans la feuille de calcul
If Not Rs.EOF Then Cells(i, 1).CopyFromRecordset Rs
i = Cells(i, 1).End(xlDown).Row + 1

Rs.Close
Cn.Close
Set Cn = Nothing
Set Rs = Nothing
Fichier = Dir()
Loop

MsgBox "Terminé"
 

misswise

XLDnaute Nouveau
Re : Requêtes sql select from where en VBA excel

Malheureusement ça marche pas
en fait je pense qu'il faut séparer les deux tâches
Premièrement insérer une colonne dans chaque fichier fermé et récupérer le nom de la ville à partir du nom du fichier pour le remettre dans la colonne.
deuxièment c la première requête pour fusionner tous les fichiers du répertoire dans un seul fichier pour cette dernière j'ai pas de problème car tu m'as aidé
En tout cas merci bien
 

misswise

XLDnaute Nouveau
Re : Requêtes sql select from where en VBA excel

en fait le résultat de la requête est un fichier vide!!
En tout cas je pense qu'il vaut mieux séparer les deux tâches
si vous pouvez me décrire comment insérer une colonne dans un fichier fermé et récapituler le nom de la ville à partir du nom du classer et l'insérer à la colonne je serais très reconnaissante. Je te remercie vivement pour l'effort que t'as fourni :)
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 016
dernier inscrit
Mokson