[vbs] ADODB Excel - Comment se positionner sur cellule avec HDR=NO

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 16 févr. 2008 à 12:18
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 17 févr. 2008 à 14:24
 Bonjour à tous,

Pour du reporting, j'ouvre un fichier Excel avec ADODB.

Avec un fichier comportant des headers, j'arrive à extraire des informations à partir d'une recherche.
Ex:
sFile = "D:\JMO\BEL\BSS\Bible BSS.xls"
sSearch = InputBox("Mettre la session recherchée",,"FKTS")

Set oConn = CreateObject("ADODB.Connection")
oConn.Open ("provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" _
      & sFile & "; " & "Extended Properties=""Excel 8.0;HDR=YES;""")

Set oRs = CreateObject("ADODB.Recordset")
'1=adOpenKeyset, 3=adLockOptimistic

MaQuery = "Select [Session], [Nom des BSS] from [Feuil1$] Where " &_
          "Instr(1,[Session],""" & sSearch & """)"
MsgBox MaQuery
oRs.Open MaQuery, oConn, 1, 3

Do Until oRs.EOF
   sList = sList &vbcrlf& "
"""& oRs.Fields(0) _
                 &vbTab&vbTab& oRs.Fields(1) & """
"
   oRs.MoveNext
Loop

Mon problème, j'ai un fichier Excel avec HDR=NO, et je n'arrive pas à trouver la syntaxe pour me positionner sur une cellule souhaitée.
Suis-je obligé de préciser une plage de cellules ???

Avec sCells = "A260:N430" , la requête se positionne bien sur la cellule A260.
Problème, si ajout de server(s) dans le fichier, j'ai tout faux !!!
 
Mon tableau aHostName comportera le nom de chaque server, pour lesquels je devrais me positionner dans le .xls et modifier le contenu de certaines cellules en fonction du mois.

Mon script provisoire:

'Description File Excel
'Header=No
'Colonne A: 
'Nom des servers (cellules fusionnées sur 5 lignes)
'
'
'          Colonne A            Colonne B       Colonne C    Colonne D ... Colonne N
'ligne 14                                        Janvier      Février       Décembre
'                                               
'ligne 260 SRV_CVS              Capacité en Go    0,09
'ligne 261 /dev/cciss/c0d0p1    Utilisé en Go     0,01
'ligne 262 /boot                % utilisé         11,24%
'ligne 263
'ligne 264                                        
'ligne 265 SRV_CVS              Capacité en Go    6,80                                                   
'ligne 266 /dev/cciss/c0d0p5    Utilisé en Go     9,20
'ligne 267 /boot                % utilisé        73,91%
'ligne 268
'ligne 269    

Dim oConn, oRs, oIE
Dim sFile, sSearch, sList
sFile = "D:\JMO\Bureau\Test_Reporting_Unix.xls"

'Table servers/folder Unix
Dim aHostName(3)
aHostName(0) = "SRV_CVS/dev/cciss/c0d0p1/boot"
aHostName(1) = "SRV_CVS/dev/cciss/c0d0p5"
aHostName(2) = "SRV_CVS/dev/cciss/c0d0p6/projets/"
aHostName(3) = "SRV-BDDP/dev/cciss/c0d0p1/boot"
'
'For i=0 To UBound(aHostName)
' Lancement query pour aHostName(i)
'Next

Set oConn = CreateObject("ADODB.Connection")
oConn.Open ("provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" _
      & sFile & "; " & "Extended Properties=""Excel 8.0;HDR=NO;""")

Set oCmd = CreateObject("ADODB.Command")
oCmd.ActiveConnection = oConn

sNameSheet = "Espaces disques"
sCells = "A260:N430"  

oCmd.CommandText = "SELECT * from `" & sNameSheet & "$" & sCells & "`"

Set oRs = CreateObject("ADODB.Recordset")
oRs.Open oCmd, , 1, 3  '1=adOpenKeyset, 3=adLockOptimistic

MsgBox oRs.Fields(0) &vbCrLf& oRs.Fields(1) &vbCrLf& oRs.Fields(2)

'Update last row
oRs(2).Value = 12  'information à extraire d'un fichier
oRs.Update
MsgBox oRs.Fields(0) &vbCrLf& oRs.Fields(1) &vbCrLf& oRs.Fields(2)
'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRs = Nothing

Merci d'avance pour vos suggestions.
jean-marc

1 réponse

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
17 févr. 2008 à 14:24
 Bonjour à tous,

Problème résolu.

IMEX=1 pour les valeurs numériques
"SELECT [F1], [F" & Month(Date)+1 & "] "
F1 représente la colonne A , utile si HDR=NO
"[F" & Month(Date)+1 & "]" retourne la colonne C dans mon cas (2+1) = F3

Evidemment, j'ai du procéder autrement, puisque
Set oConn = CreateObject("ADODB.Connection")
oConn.Open ("provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" _
      & sFile & "; " & "Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;""")

sSearch1 = "SRV_CVS"
sSearch2 = "SRV-BDDP"
MsgBox "[F" & Month(Date)+1 & "]"
MyQuery = "SELECT [F1], [F" & Month(Date)+1 & "] " &_
          "FROM [Espaces disques$] " &_
          "WHERE Instr(1,[F1],""" & sSearch1 & """) OR Instr(1,[F1],""" & sSearch2 & """)"
'MsgBox MyQuery
Set oRs = CreateObject("ADODB.Recordset")
oRs.Open MyQuery, oConn, 1, 3  '1=adOpenKeyset, 3=adLockOptimistic
selectionne seulement les enregistrements si la condition F1 est remplie.

J'arrive donc à uptader mon fichier avec:
Option Explicit
Dim oConn, oCmd, oRs
Dim sFile, sNameSheet, sCells
Dim i, cpt

sFile = "D:\JMO\Bureau\Test_Reporting_Unix.xls"
sNameSheet = "Espaces disques"
sCells = "A260:N428"

Set oConn = CreateObject("ADODB.Connection")
oConn.Open ("provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" _
      & sFile & "; " & "Extended Properties=""Excel 8.0;HDR=NO;""")

Set oCmd = CreateObject("ADODB.Command")
oCmd.ActiveConnection = oConn

oCmd.CommandText = "SELECT * from `" & sNameSheet & "$" & sCells & "`"

Set oRs = CreateObject("ADODB.Recordset")
oRs.Open oCmd, , 1, 3  '1=adOpenKeyset, 3=adLockOptimistic

cpt = 1
For i = 0 To oRs.RecordCount-1
    Select Case cpt
       Case 1
            oRs(3).Value = 80  'cette valeur sera extraite d'un txt
            oRs.Update
            cpt = cpt +1
       Case 2
            oRs(3).Value = 40  'cette valeur sera extraite d'un txt
            oRs.Update
            cpt = cpt +1
       Case 3, 4 , 5            If cpt 5 Then cpt 0
            cpt = cpt +1
    End Select
    oRs.MoveNext
Next

'Close the connection
oConn.Close
Set oConn = Nothing
Set oCmd = Nothing
Set oRs = Nothing

Je reste, évidemment, réceptif à toutes propositions concernant
le remplacement de sCells = "A260:N428", de même pour toutes améliorations de ce code.
Merci.

jean-marc
3
Rejoignez-nous