Bonjour Mercatog,
tuas raison sur toute la ligne, mais , honte sur moi, comme je n'ai jamais codé le traitement de données filtrées (eh non
) et que je n'avais vraiment pas le temps, j'ai fait comme je connaissais.
Le but est le suivant
Tout se passe depuis Access.
Je doit récupérer les scores d'étudiants sur un site de testing de compétence et les insérer dans ma DB Access.
4 problèmes :
1) Le site de compétence comprend des infos périmées (ex test d'années précédentes)
2) le site de compétence travaille à l'email comme clé et donc si plusieurs étudiants dans la même famille, écrasement des résultats et ... rien à en tirer.
3) On n'est jamais certains qu'il y ai des info à récupérer pour chaque étudiant
4) Quand je vais importer juste après les données dans Access, je ne veux que la sélection des enregistrement qui collent avec le critère de date.
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, From_Table, document, True, Import_data_Sheet & "!"
Qwazerty m'a constitué un code génial pour lire le site Web et extraire les info sous excel.
.
Cet extract reprend aussi les données périmées car dans l'SQL de lecture du site, la date de sélection n'est pas prévnue.
Donc, je me suis mis à faire la sélection comme suit :
1) Je passe à mon code d'import sous excel entre autres parms, la date de sélection, et le nom de la zone qui le contient.
2) Je copie les données rapatriées dans une feuille Draft vers la feuille finale si le critère de date est respecté (>= date limite)
Voici la partie du code qui fait ceci :
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
| 'Copy Titres
Sheet_Found.Rows(1).Copy _
Destination:=Sheet_final.Rows(1)
'Recherche de la colonne de la zone de date de sélection
With Sheet_Found.Range("A1:" & Cells(1, Sheet_Found.Columns.Count).End(xlToLeft).Address)
Set c = .Find(What:=Ws_Tool.Range("A4").Value, LookIn:=xlValues)
If Not c Is Nothing Then
Ws_Tool.Range("A10") = c.Address
Sel_column = c.Column
'Copy Reportings with date >= date Limite vers feuille final results
IFinal = 2
'Copy details
For ILine = 2 To iOffsetL - 1
If Sheet_Found.Cells(ILine, Sel_column) >= Ws_Tool.Range("A3") Then
Sheet_Found.Rows(ILine).Copy _
Destination:=Sheet_final.Rows(IFinal)
IFinal = IFinal + 1
End If
Next ILine
Else
Ws_Tool.Range("A10") = "Not found " & Ws_Tool.Range("A4").Value & " " & Cells(1, Sheet_Found.Columns.Count).End(xlToLeft).Address
End If
End With |
Ce code est dans un Userform dont j'ai besoin pour me logger sur le site qui est sécurisé.
la feuille "draft" est Sheet_Found
la feuille "finale" est Sheet_Final
la feuille avec la date limite est "A3" et la zone de sélection de la limite en "A4" est Ws_tool
Partager