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 71 72 73 74 75 76 77
| Public Sub CreateTemplate1()
Dim nfic1 As Variant
Dim nfic2 As Variant
Dim strChar() As Byte 'tableau d'octets de longueur dynamique
Dim nbToRead As Long
Dim nbRead As Long
Dim sDir As String
Const sSubDir As String = "fichiersSDS"
Dim strPlateName As String
Dim i As Byte
Dim dlgBox As MSComDlg.CommonDialog
If Environ("UserName") = "sspouy" Then
sDir = "C:\Applied Biosystems\Template\"
sfichier = "Template.sds"
Else
Set dlgBox = New MSComDlg.CommonDialog
With dlgBox
.DialogTitle = "Please Select a sds file"
.Filter = "SDS File (*.sds)|*.sds"
.InitDir = sDir
.CancelError = False
.ShowOpen
sDir = Replace(.FileName, .FileTitle, vbNullString)
sfichier = .FileTitle
If sfichier = vbNullString Then Exit Sub
End With
End If
Do While True
strPlateName = InputBox("Veuillez saisir ou scanner le nom de la plaque à créer. " & _
"Cette plaque sera copiée dans " & sDir & sSubDir & ".", "Copie du Template", "")
If strPlateName = "" Then Exit Do
nfic1 = 1
nfic2 = 2
Close nfic1
Close nfic2
If Not Dir(sDir & sSubDir & "\" & strPlateName & ".sds", vbNormal) = "" Then
If MsgBox("Le fichier destination existe déjà. Voulez-vous l'écraser ?", vbQuestion + vbYesNo + vbDefaultButton2) = vbNo Then Exit Do
End If
If Dir(sDir & sSubDir, vbDirectory) = "" Then MkDir (sDir & sSubDir)
Open sDir & sfichier For Binary As nfic1
Open sDir & sSubDir & "\" & strPlateName & ".sds" For Binary As nfic2
nbToRead = LOF(nfic1)
'Lors de l'ouverture du fichier d'entrée, La taille du fichier servira à dimensionner la taille définitive du tableau
ReDim strChar(nbToRead)
'lecture du ficheir d'entrée et mise dans un tableau
For nbRead = 1 To nbToRead
Get nfic1, nbRead, strChar(nbRead)
Next nbRead
Close nfic1
'---- traitement de mise à jour des caractères compris entre 30 et 46.
' on se base uniquement surla longueur du nom du platename
' ex : A_123456_ABCDE -> longueur = 15
For i = 30 To (30 + Len(strPlateName)-1)
strChar(i) = Asc(Mid(strPlateName, (i - 29), 1))
Next i
'pavé à rajouter éventuellement si tu dois faire un traitement spécifique sur les caractères compris entre longueur(platname) et 47
If Len(strPlateName) < 17 Then
For i = (30 + Len(strPlateName)) To 46
strChar(i) = 0
Next i
End If
'---- fin du pavé de traitement
'Ecriture dans le fichier de sortie nfic2 à partir du tableau mis à jour
For nbRead = 1 To nbToRead
Put nfic2, nbRead, strChar(nbRead)
Next nbRead
Close nfic2
Loop
End Sub |
Partager