Vba copie de données selon différents critères sql

creal69360

XLDnaute Junior
Bonjour,

Dans le cadre de mon stage, je dois réaliser une analyse qui me permettrait grâce à une BDD contenant des données RH ( retards ....) de réaliser une requete. cette requete me créeraient une nouvelle BDD que je copierai dans une nouvelle feuille. je pourrais alors faire des statistiques selon différents critères ( date, unité ....). pour se faire j'ai écrit ce code qui doit normalement copier les données selon les critères dans un onglet de ma feuille.
Voici le code :
Public Sub analyse()

End Sub
Dim Cn As ADODB.Connection

Dim nomfeuille As String, SQL_analyseunite As String
Dim RST As ADODB.Recordset
Dim fichier1 As String


nomfeuille = "Feuil1"
fichier1 = "C:\Mathieu\2011-ANOMS TOUTES UNITES maj.xlsx"
Set Cn = New ADODB.Connection

Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & fichier1 & ";Extended Properties=Excel 8.0;"

SQL_analyseunite = "Select * from [" & nomfeuille & "$] "where " & date messa & "> #dtmin.value# and & date
' dtmin. value et dtmax.value sont tirés du formulaire qui permettrait de réaliser cette analyse
messa & " < #dtmax.value# " and "& Libellé US & " =unite.value;"



Set RST = New ADODB.Recordset
Set RST = Cn.Execute(SQL_analyseunite)
For i = 0 To RST.Fields.Count - 1
Cells(1, i + 1) = RST.Fields(i).Name
Next i
Sheets("analyse unite").Select
' c'est la feuille dans laquelle je veux que mes données issues de la requete se copient
Range("a2").CopyFromRecordset RST




Cn.Close
Set Cn = Nothing

End Sub

c'est a partir de la requete sql que l'erreur se presente. je tiens a preciser que les données que je gere sont confidentielles donc je pourrais pas vous envoyez lintegralité de la BDD.
Merci de m'aider ^^
 

david84

XLDnaute Barbatruc
Re : Vba copie de données selon différents critères sql

Re
j'aimerais maintenant que ces données présentes dans la 3e feuille se mettent à la suite de la feuille BDD, pour enfin recopié la feuille BDD dans mon fichier BDD. Merci de m'éclairer.
Je te donne la marche à suivre sans t'écrire la macro. Essaie de la mettre en oeuvre et dis-moi à quelle étape tu bloques pour que je puisse t'aider (il n'y a que comme cela que tu progresseras).

1) Dans la 3ème feuille, tu définis la zone contenant tes lignes à recopier en utilisant CurrentRegion par exemple (cf. différentes possibilités ici).
Tu peux t'inspirer de la manière dont j'ai délimité PL1 ou Pl2. Tu peux appeler cette plage Pl3.
Si tu bloques à ce stade, définies-la en "dur" (Set Pl3= sheets("Feuil3").Range("A1:X..."), tu y reviendras plus tard.
2) Dans la feuille BDD, tu recherches la dernière ligne non vide de la colonne A :
- tu déclares une variable appelée DerLig typée en Long
- tu lui attribues la dernière ligne non vide (regarde des exemples sur le lien) à laquelle tu rajoutes 1 pour repérer la 1ère ligne vide
- tu copies Pl3 à partir de DerLig (de la même manière que j'ai copié le tableau T dans la feuille BDD_Maj)
A+
 

creal69360

XLDnaute Junior
Re : Vba copie de données selon différents critères sql

re , j'ai essayé avec ce code mais j'y arrive pas :
Public Sub recuperation_données_nouvelles_feuilleBDD()
Dim DerLig As Long

Dim Pl3 As Range
Set Pl3 = Sheets("BDD_maj").Range("A1;z100000").CurrentRegion
Do While Cells(DerLig, 1) <> SpecialCells(xlCellTypeLastCell) ' c'est ici que sa bloque
DerLig = DerLig + 1
Loop
With Sheets("BDD")
.Range("cells (derlig+1, 1),1") = Pl3

End Sub
 

david84

XLDnaute Barbatruc
Re : Vba copie de données selon différents critères sql

Re

As-tu regardé avec attention le lien communiqué ?
Les infos qui s'y trouvent te permettent de faire beaucoup de choses (rechercher la dernière ligne, la dernière colonne, CurrentRegion, resize,...)

Code:
Public Sub recuperation_données_nouvelles_feuilleBDD()
Dim DerLig As Long
Dim Pl3 As Range
Set Pl3 = Sheets("BDD_maj").Range("A1:X1000") 'zone définie en dur pour l'instant
With Sheets("BDD")
    '2 possibilité parmi d'autres de rechercher la 1ère ligne non vide
    'DerLig = .Range("A" & Rows.Count).End(xlUp).Row + 1
    DerLig = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row + 1 'DerLig te ramène la dernière ligne non vide et +1 pour cerner la ligne du dessous
    .Cells(DerLig, 1).Resize(Pl3.Rows.Count, Pl3.Columns.Count) = Pl3.Value
End With
End Sub

.Cells(DerLig, 1) indique la 1ère ligne vide colonne A.
A partir de là tu dois dimensionner ta plage à coller. Pour cela tu utilises resize(nbre de lignes, nbre de colonnes).
Le nombre de lignes et de colonnes te sont données par les propriétés rows et columns de Pl3 : Rows.Count te ramène de nombre total de lignes et Columns.Count le nombre total de colonnes.
A+
 

creal69360

XLDnaute Junior
Re : Vba copie de données selon différents critères sql

Salut david,

Je souhaite te remercier pour l'aide que tu m'as apporté( je n'ai pas eu le temsp de le dire avant car j'ai été tres occuper pour finir ce projet) , maintenant mon programme marche super bien et mon maitre de stage est satisfait. Je suis actuellement en train de voir pour faire une analyse statistique, mon maitre de stage ne connait pas bien la création de graphiques sous vba et moi non plus. C'est pourquoi j'ai crée un nouveau sujet sur le forum, merci encore. a+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 611
Messages
2 111 144
Membres
111 051
dernier inscrit
MANUREVALAND