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
|
Private Sub Lecture()
Dim Chaine1$, NbOccurrences As Integer, Mat(), RSmarq As Recordset, RSgene As Recordset
Dim i As Integer, Pos As Integer, ListeChaines, j As Integer
Dim c As Range, cSuivant As Range, cAutre As Range
' Chaîne permettant de repérer le nombre de fiches et le nom du marqueur
Chaine1 = "Nom des marqueurs"
NbOccurrences = WorksheetFunction.CountIf(Range("A:A"), Chaine1 & "*")
' Adapatation de Mat(), utilisée pour stocker les données à reporter dans la base.
ReDim Mat(NbOccurrences - 1, 7)
' On initialise "c" comme la dernière cellule utilisée en colonne A. En effet, la méthode "Find" d'un objet "Range" (une plage de cellules) commence
' après la cellule indiquée comme référence. Si "c" était en ligne 1, c'est la seconde fiche qui serait trouvée en premier.
Set c = Range("A" & ActiveSheet.UsedRange.Rows.Count + 1)
' RSmarq pour la table "tbl_marqueurs", RSgene pour "tbl_gene"
Set RSmarq = DB.OpenRecordset("tbl_marqueurs")
Set RSgene = DB.OpenRecordset("tbl_genes")
'boucle permettant de passer par toutes les fiches
For i = 0 To NbOccurrences - 1
RSmarq.AddNew
If RSmarq.RecordCount = 0 Then RSmarq!id_marqueur = 1
' Détermination de la cellule correspondant au début de chaque fiche, grâce à l'argument "After:=c"
Set c = Cells.Find(What:=Chaine1, After:=c, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
Set cSuivant = Cells.FindNext(c)
Pos = InStr(1, c, ":", vbTextCompare)
Mat(i, 0) = Mid(c, Pos + 1 + IIf(Asc(Mid(c, Pos + 1, 1)) = 32 Or Asc(Mid(c, Pos + 1, 1)) = 160, 1, 0))
RSmarq!mar_nom = Mat(i, 0)
Set cAutre = Cells.Find(What:="Nom du gène", After:=c)
If MemeFiche(c, cSuivant, cAutre) Then
Pos = InStr(1, cAutre, ":", vbTextCompare)
Mat(i, 1) = Mid(cAutre, Pos + 1 + IIf(Asc(Mid(cAutre, Pos + 1, 1)) = 32 Or Asc(Mid(cAutre, Pos + 1, 1)) = 160, 1, 0))
RSgene.AddNew
RSgene!gen_nom = Mat(i, 1)
' incrémente les deux bases et les mets en relation
RSmarq!id_gene = RSgene!id_gene
End If
....
Set cAutre = Cells.Find(What:="Position de cartographie génétique", After:=c)
If Not cAutre Is Nothing Then
If MemeFiche(c, cSuivant, cAutre) Then
Pos = InStr(1, cAutre, ":", vbTextCompare)
If Pos <> Len(cAutre) Then
Mat(i, 6) = Mid(cAutre, Pos + 1 + IIf(Asc(Mid(cAutre, Pos + 1, 1)) = 32 Or Asc(Mid(cAutre, Pos + 1, 1)) = 160, 1, 0))
RSgene.Fields("CartoGen").Value = Mat(i, 6) & cAutre.Offset(1)
End If
End If
End If
RSgene.Update
RSmarq.Update
Next
End Sub |
Partager