IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Ouverture index.html présent dans multiples répertoires


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut Ouverture index.html présent dans multiples répertoires
    Bonjour à tous.

    J'ai une base de données faisant référence à des dossiers photos (une multitude de répertoires avec noms différents de lieux et de dates). Pour chacun d'eux, j'ai créé un fichier index.html afin de les visualiser dans un navigateur. Selon l'enregistrement sur lequel je me trouve, j'aimerais ouvrir le fichier Index.html correspondant à l'aide d'un bouton
    Novice en VBA, je sais néanmoins mettre en place des boutons, adapter des sections de codes selon mes besoins, utiliser les méthodes GetFile, shell ect... Mais dans ce cas de figure, je n'y parviens pas. Peut-être ai-je mal cherché (ou ne sais-je pas chercher), je n'ai rien trouvé ni dans le forum, ni dans les FAQ sur les manipulations de fichiers une réponse à mon problème.
    Il y a certes la méthode créer un champ lien hypertexte référencant chacun des fichiers Index.html, mais trop long et fastidieux vu le nb de dossiers que j'ai.
    Si quelqu'un pouvait m'aider ou ne serait-ce que m'aiguiller sur le code à mettre en place, merci.

  2. #2
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Bonjour,

    Effectivement, la fonction Shell est la plus adaptée pour ouvrir un fichier avec son application hôte.

    Voici un exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Declare Function ShellExec Lib "shell32.dll" _
        Alias "ShellExecuteA" _
        (ByVal hwnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) _
        As Long
     
    Public Enum TypeOpen
        Hide = 0
        Normal = 1
        Minimized = 2
        Maximized = 3
        Restore = 9
    End Enum
     
    Public Enum OP
        OpExecute = 1
        OpPrint = 2
    End Enum
     
    Private Const ERROR_SUCCESS = 32&
    Private Const ERROR_NO_ASSOC = 31&
    Private Const ERROR_OUT_OF_MEM = 0&
    Private Const ERROR_FILE_NOT_FOUND = 2&
    Private Const ERROR_PATH_NOT_FOUND = 3&
    Private Const ERROR_BAD_FORMAT = 11&
     
    Function OuvrirFichier(FileName As String, _
        Optional Window As TypeOpen = Maximized _
        , Optional Operation As OP = OpExecute _
        ) As Variant
     
        Dim lRet As Long
        Dim varTaskID As Variant
        Dim stRet As String
     
    If Dir(FileName, vbHidden) = "" Then 'Recherche si le fichier existe _
                (vbHidden permet de le retrouver même s'il est caché)
     
        MsgBox "Le fichier " & FileName & " n'existe pas.", vbOKOnly + vbInformation, "Information"
        Exit Function
    End If
     
        lRet = ShellExec(hWndAccessApp, _
            IIf(Operation = OpPrint, "print", "open"), _
            FileName, vbNullString, vbNullString, _
            Window)
     
        If lRet > ERROR_SUCCESS Then
            stRet = vbNullString
            lRet = -1
        Else
            Select Case lRet
                Case ERROR_NO_ASSOC:
                    varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
                        & FileName, 1)
                    lRet = (varTaskID <> 0)
                Case ERROR_OUT_OF_MEM:
                    stRet = "Erreur: Pas assez de mémoire pour exécuter"
                Case ERROR_FILE_NOT_FOUND:
                    stRet = "Erreur : Fichier non trouvé"
                Case ERROR_PATH_NOT_FOUND:
                    stRet = "Erreur : Chemin non trouvé"
                Case ERROR_BAD_FORMAT:
                    stRet = "Erreur : Type de fichier inconnu"
                Case Else:
            End Select
        End If
        OuvrirFichier = lRet & _
            IIf(stRet = "", vbNullString, ", " & stRet)
    End Function
    Pour appeler la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call OuvrirFichier("CheminDuFichier")

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut
    Merci pour la réponse.
    Si le code fonctionne, il ne correspond pas à ce que je souhaite. Je l'ai adapté, en partie, à ma base et par défaut, il m'ouvre "Mes Documents" le seul fichier "index.html" s'y trouvant.
    J'ai un formulaire, chacun de mes enregistrements correspond à un dossier genre (Arromanches commémorations 1994, Arromanches commémorations 2004, et bientôt 2014... etc...) Dans chacun de ces dossiers, j'y ai créé un sous-dossier nommé Web dans lequel j'y ai créé des pages web. Chaque première page est nommée index.html et je ne peux pas la renommer. J'aimerais intégrer dans mon formulaire un bouton qui appelle par exemple E:\jmp\sauvegarde\NomDuDossier\Web\index.html, sachant que NomDuDossier varie à chaque enregistrement. A défaut, j'ai créé un champ hyperlien dans j'y entre chaque chemin spécifique, mais c'est long, très long.

    Cordialement

  4. #4
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Bonsoir,

    Dans ce cas là, il faudrait que "NomDuDossier" correspondent à une valeur unique que tu aurais pour chaque enregistrement, par exemple la valeur de ton numéro automatique.
    Avec cette solution, tu pourrais générer automatiquement la chaine du chemin du fichier en fonction de ton enregistrement courant.
    Evidemment, cela va impliquer de renommer chaque dossier en fonction de chaque enregistrement, mais là tu n'auras pas le choix, c'est un défaut de conception au départ.
    Autre solution, stocker le chemin dans une table.
    Eventuellement, si cela est possible, donnes moi ta base que j'y jette un coup d'oeil.
    Attention, à compter de lundi je serais en déplacement pour 2 semaines.
    Pas sur, que je puisses étudier ta base d'ici demain soir.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut
    Bonjour et encore merci de l'attention portée à mon problème. Ensuite, oui, c'est sans doute un défaut de structure de la base, mais à l'origine , je n'avais pas prévu et pensé de créer pour chaque dossier des fichiers html. Je me doutais que cela n'était pas gagné.
    En attendant, j'ai contourné le probléme en important tous les fichiers index.html en procédant ainsi:
    Avec le code si dessous, j'ai listé tous les dossiers et fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir /b /s E:\jmp\sauvegarde > E:\jmp\sauvegarde\liste_e.txt
    Dans Excel, j'ai importé le fichier texte en utilisant le séparateur "\" contenu dans chaque chemin et ensuite avec le système de filtre du tableur, je suis parvenu à isoler tous les "index.html" qui m’intéressaient (et il y en a !). J'ai inséré de nouveau le séparateur avec de nouvelles colonnes et enfin tout remis en ordre avec la formule "=E:&\&jmp&\&Sauvegarde&\&jmp&\&web&\&index.html"
    C'est un peu tiré par les cheveux mais efficace pour l'avoir déjà fait en d'autres circonstances. L'ordre alphabétique de mes enregistrements et de mes dossiers étant le même, je n'ai plus eu qu'à importer les données de la feuille dans un champ hyperlien de mon formulaire créé pour le cas.

    Merci, et s'il y a une solution pour mon problème en VBA, je suis toujours preneur.

    Cordialement

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/02/2012, 16h16
  2. .htaccess pas présent dans le répertoire www de Wamp
    Par skunkies dans le forum Apache
    Réponses: 3
    Dernier message: 24/11/2009, 17h12
  3. Excel - Lister fichiers présents dans un répertoire
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/11/2006, 13h24
  4. Comment indexer et rechercher dans des répertoires ?
    Par elitost dans le forum Windows XP
    Réponses: 2
    Dernier message: 18/07/2006, 21h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo