Détecter un accès internet à l'ouverture,et si des MAJ du fichier sont online sur ftp

Tonino7

XLDnaute Occasionnel
Voilà, en fait, je voudrais ajouter une macro à un fichier excel.
Donc , à l'ouverture du fichier, il faudrait détecter si le pc utilisé possède une connexion internet. Si oui, alors il faudrait détecter si des nouvelles mises à jour du fichier sont disponible sur mon espace web de lycos.
Pour détecter les mises à jours, je ferai en sorte d'appeler les "mises à jour" toujours par le meme nom sur mon ftp. Exemple : FichierUpdate1.xls , FichierUpdate2.xls , FichierUpdate3.xls ...etc

donc en gros, la macro devrait détecter si le fichier utilisé est plus ancien que la derniere update, et ce, gràce au numéro situé apres "update". Apres , il y aura surement un problème au cas où le fichier utilisé est renommé. Donc là y'aurait peut-etre des possibilités de comparer les dates de créations du fichier utilisé avec la date de création de la derniere update en ligne.

Puis, la suite logique, c'est que si un update est détecter , ben un MSGBOX indique à l'utilisateur qu'une mise à jour du fichier est en ligne et qu'il peut la télécharger à telle url. Pourquoi pas mettre un autre msgbox pour lui demander s'il veut la télécharger maintenant.

Voilà. Celui qui me trouvera une solution aura le droit à toute mon estime lol

merci d'avance.
 

MichelXld

XLDnaute Barbatruc
Re : Détecter un accès internet à l'ouverture,et si des MAJ du fichier sont online sur ftp

BONJOUR

testé avec WinXP & Excel2002 & FTP perso
il restera à voir si la connexion ne se referme pas avant la fin du téléchargement pour les fichiers volumineux

ps
pour l'instant, cet exemple ne prend pas en compte les dates de création (ou modification) du fichier, mais uniquement l'index indiqué dans le nom du classeur.

bonne lecture ...


Code:
Option Explicit

Private Declare Function InternetOpen Lib "wininet.dll" Alias _
"InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, _
ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal _
lFlags As Long) As Long


Private Declare Function InternetConnect Lib "wininet.dll" Alias _
"InternetConnectA" (ByVal hInternetSession As Long, _
ByVal sServerName As String, ByVal nServerPort As Integer, _
ByVal sUsername As String, ByVal sPassword As String, ByVal _
lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" _
    (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _
    ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, _
    ByVal dwContext As Long) As Boolean

Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias _
    "FtpFindFirstFileA" _
    (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
    lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, _
    ByVal dwContent As Long) As Long

Private Declare Function InternetFindNextFile Lib "wininet.dll" _
    Alias "InternetFindNextFileA" _
    (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long

Private Declare Function InternetCloseHandle Lib "wininet.dll" _
    (ByVal hInet As Long) As Integer

Private Declare Function IsNetworkAlive Lib "SENSAPI.DLL" _
    (ByRef lpdwFlags As Long) As Long


Const MAX_PATH = 260


 Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type

Type WIN32_FIND_DATA
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
End Type



Sub Test()
Dim lngINet As Long
Dim lngINetConn As Long
Dim pData As WIN32_FIND_DATA
Dim lngHINet As Long
Dim intError As Integer
Dim strTemp As String
Dim blnRC As Boolean
Dim nomFichier As String
Dim ItUpdate As Integer, x As Integer
Dim Reponse As String

Select Case IsNetworkAlive(0)
    Case 0
    MsgBox "Vous n'etes pas connecté"
    Exit Sub
    'Case 1
    'MsgBox "connected to LAN"
    'Case 2
    'MsgBox "connected to WAN"
    'Case Else
    'MsgBox "connected to other network"
End Select

lngINet = InternetOpen("Controle FTP", 1, vbNullString, vbNullString, 0)

lngINetConn = InternetConnect(lngINet, "ftp.Provider.fr", 0, _
    "MonProfil", "MotDePasse", 1, 0, 0)


pData.cFileName = String(260, 0)

lngHINet = FtpFindFirstFile(lngINetConn, "*.xls", pData, 0, 0)

If lngHINet = 0 Then
    intError = Err.LastDllError
    
Else
    nomFichier = Left(pData.cFileName, _
    InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
    x = Val(Mid(nomFichier, 14))
    If x > ItUpdate Then ItUpdate = x
    
    Do
        pData.cFileName = String(260, 0)
        blnRC = InternetFindNextFile(lngHINet, pData)
        
        If Not blnRC Then
            intError = Err.LastDllError
            If intError = 18 Then Exit Do
        Else
            nomFichier = Left(pData.cFileName, _
            InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
            x = Val(Mid(nomFichier, 14))
            If x > ItUpdate Then ItUpdate = x

        End If
    Loop
End If

Reponse = MsgBox("L'index  du dernier update est = " & ItUpdate & vbCrLf & _
        "Voulez vous télécharger ce fichier?", vbYesNo)

If Reponse = vbYes Then
    blnRC = FtpGetFile(lngINetConn, "FichierUpdate" & ItUpdate & ".xls", _
        "C:\FichierUpdate" & ItUpdate & ".xls", 0, 0, 1, 0)
    
    DoEvents
End If

InternetCloseHandle lngINetConn
InternetCloseHandle lngINet
End Sub


bon apres midi
MichelXld
 
Dernière édition:

Tonino7

XLDnaute Occasionnel
Re : Détecter un accès internet à l'ouverture,et si des MAJ du fichier sont online sur ftp

Fiouuu, c'est pas du code de seconde classe ça alors...

C'est super gentil, j'vais tester. Mais ça m'enerve car je comprends rien lol

Finalement, j'ai trouvé une parade dans le cas où l'utilisateur renommerait le fichier:
Il ne faudrait pas comparer le nom de fichier avec les fichiers mis en ligne sur le ftp, mais plutot comparer une cellule verrouillée du fichier (où j'aurais préalablement inscrit la version du fichier) , avec les fichiers sur le ftp.
Comme ça il n'y aurait aucun problème.
est-il possible de m'indiquer la modification à effectuer dans le code ?...merci

deuxième chose , ce code ci : Select Case IsNetworkAlive(0)
Case 0
MsgBox "Vous n'etes pas connecté"
Exit Sub
'Case 1
'MsgBox "connected to LAN"
'Case 2
'MsgBox "connected to WAN"
'Case Else
'MsgBox "connected to other network"
End Select


c'est normal qu'il y ait une apostrophe devant les dernières lignes?
 

MichelXld

XLDnaute Barbatruc
Re : Détecter un accès internet à l'ouverture,et si des MAJ du fichier sont online sur ftp

bonjour

commence par faire fonctionner cet exemple ...


c'est normal qu'il y ait une apostrophe devant les dernières lignes?

oui car les autres options ne sont pas utiles chez moi. Il te reste à l'adapter en fonction de ton poste de travail ( présence de réseaux internes...etc...)


bonne soirée
MichelXld
 

Discussions similaires

Statistiques des forums

Discussions
312 240
Messages
2 086 515
Membres
103 239
dernier inscrit
wari