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

Macros et VBA Excel Discussion :

Ouvrir un document WORD via un chemin spécifié, si pas trouvé essaye un autre chemin [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Ouvrir un document WORD via un chemin spécifié, si pas trouvé essaye un autre chemin
    Bonjour, ayant un document WORD à ouvrir et à imprimer suivant son nom inscrit dans une case EXCEL, je cherche un code VBA permettant d'effectuer cette opération.

    Malheureusement, Les documents potentiels se trouve dans un Dossier mais aussi dans des sous-dossiers...

    Afin d'obtenir le bon chemin à indiquer dans la procédure VBA, comment tester si le fichier existe dans un dossier "X" et sous dossier "A", si pas regarder dans le dossier "X" et sous dossier "B", si pas regarder dans le dossier "X" et sous dossier "C", ainsi de suite jusqu'à trouver le fichier et l'imprimer.

    Par sécurité peut être mettre aussi si pas trouvé dans aucuns sous dossier message box avec alerte sonore

    Merci de vos suggestions

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voir dans la FAQ Les macros VBA→Les répertoires et les fichiers

    Personnellement, j'utilise la fonction Dir qui me satisfait amplement.

    J'ai écrit pour cela une fonction générique qui me renvoie dans une table tous les fichiers correspondant à ma recherche

    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
    Function FileList(ByVal LookUpFullName As String) As Variant
      ' Renvoie une liste avec les fichiers présents dans le répertoire défini pas l'argument LookUpFullName
      ' Author  : Philippe Tulliez http://www.magicoffice.be
      ' version : 1.3
      ' Argument
      '   LookUpFullName (String) Répertoire + nom du fichier + extension
      Dim File As String, Counter As Integer, List()
      Counter = -1
      File = Dir(LookUpFullName)
      While Len(File)
           Counter = Counter + 1
           ReDim Preserve List(Counter): List(Counter) = File
           File = Dir
      Wend
      FileList = IIf(Counter > -1, List, Counter)
    End Function
    Exemple de son invocation
    Dans cet exemple, nous cherchons tous documents contenant le mot "offre" dans un sous-répertoire nommé Template du répertoire du classeur où se trouve le code VBA
    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
    Sub TestFileList()
      Const SubFolder As String = "\Template\"
      Dim FileTable As Variant
      Dim appFolder As String
      Dim FullName As String
      Dim Elem As Integer
      Dim msg As String
      appFolder = ThisWorkbook.Path
      FullName = appFolder & SubFolder & "*offre*"
      FileTable = FileList(FullName)
      If IsArray(FileTable) Then
        For Elem = 0 To UBound(FileTable)
         msg = msg & vbCrLf & FileTable(Elem)
        Next
       Else
        msg = "Pas trouvé de document"
      End If
      MsgBox msg
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Merci beaucoup.
    Ce code est il capable de "fouiller" dans des sous dossiers non spécifié dans le code avec seulement le répertoire racine qui lui est indiqué dans le code?

  4. #4
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    pour essayer d'être plus clair ou précis:



    j'ai créer un code VBA me permettant d'ouvrir des documents WORD et de les imprimer après une saisie sur une feuille Excel.


    Mon soucis vient du fait que le dossier racine "x" (dont je ne peux absolument pas modifier l'arborescence) où se trouve tout les documents potentiels comporte des sous-dossiers.
    La difficulté supplémentaire est que certains documents sont dans un dossier racine "X" et un sous dossiers "A" et d'autres documents sont dans le même dossier racine "X" mais dans un autre sous dossier "B".
    Pour à nouveau ne rien simplifier à ma tache, les documents ne comporte pas spécialement le même nombre de sous dossiers composant le chemin à donner dans le code VBA.
    petit exemple:" c:\users\vehicules\groupeA\test1.doc" et un autre c:\users\vehicules\groupeB\sectionA\test2.doc"


    Je ne vois pas de trop comment solutionner ce problème de chemin.
    Je pensais peut être qu'une solution VBA existerait à chercher uniquement sur base de son nom de fichier et son extension (éventuellement le dossier racine "X" qui lui fort heureusement est le même).

    J'ai aussi peur que tout le code inscrit dans la procédure VBA: prendre le nom du fichier, chercher le document, l'ouvrir non visible, l'imprimer en un certain nombre d'exemplaire et fermer le document soit relativement lent. en fait ce petit code permettrait d'imprimer une série de documents à la suite l'un de l'autre via un lecteur code barre, donc encodage assez rapide pour l'utilisateur, trop rapide peut-être même que le code VBA n'arriverai pas à suivre l'envoi des impressions

    Merci de votre aide et suggestions de code
    Ps: je suis hyper débutant VBA Excel

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avez-vous lu les articles de la FAQ que j'ai évoqué dans le Fil #2
    Ce code est il capable de "fouiller" dans des sous dossiers non spécifié dans le code avec seulement le répertoire racine qui lui est indiqué dans le code?
    la fonction Dir permet de chercher des fichiers ou des dossiers à partir d'un répertoire, il n'est pas prévu dans cette fonction de chercher les sous-répertoires. En revanche, il est toujours possible de construire des tables qui les mémorisent mais ne serait-ce pas trop complexes ?
    Comme je ne travaille pas de cette façon, je n'ai rien développé de tel.
    Il existe une possibilité de liste les fichiers contenu dans les dossier et sous-dossiers d'une racine avec FileSystemObject

    Avec Dir et à condition qu'il n'y ait qu'un seul niveau de sous-dossiers dans une racine avec les fichiers présents dans ceux-ci, il est possible de combiner la procédure nommée FolderList ci-dessous avec la procédure nommée FileList publiée dans une procédure précédente
    Code de la procédure FolderList qui renvoie tous les sous-dossiers d'un dossier passé en argument. j'aurais pu réunir dans une seule procédure la recherche de fichier et de sous-dossier mais comme je l'ai écrit, je n'en ai pas l'usage.
    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
    Function FolderList(ByVal LookupFullName As String) As Variant
      ' Renvoie une liste des sous dossiers présents dans le répertoire défini pas l'argument LookUpFullName
      ' Author  : Philippe Tulliez http://www.magicoffice.be
      ' version : 1.1
      ' Argument
      '   LookUpFullName (String) Répertoire + nom du fichier + extension
      Dim SubFolderName As String
      Dim Counter As Integer
      Dim List()
      '
      LookupFullName = LookupFullName & String(Abs(Right(LookupFullName, 1) <> "\"), "\")
      Counter = -1
      SubFolderName = Dir(LookupFullName, vbDirectory)
      Do While SubFolderName <> ""
        If SubFolderName <> "." And SubFolderName <> ".." Then
          If (GetAttr(LookupFullName & SubFolderName) And vbDirectory) = vbDirectory Then
             Counter = Counter + 1
             ReDim Preserve List(Counter): List(Counter) = SubFolderName
          End If
        End If
       SubFolderName = Dir    ' Extrait l'entrée suivante.
      Loop
      FolderList = IIf(Counter > -1, List, Counter)
    End Function
    Procédure qui l'invoque
    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
    Sub TestFolderList()
      Dim FolderArray As Variant
      Dim appFolder As String
      Dim nFolder As Integer
      Dim Msg As String
      appFolder = ThisWorkbook.Path & "\"
      FolderArray = FolderList(appFolder)
      If IsArray(FolderArray) Then
         Msg = "Liste des sous-répertoires de : " & vbCrLf & appFolder
         For nFolder = 0 To UBound(FolderArray)
           Msg = Msg & vbCrLf & FolderArray(nFolder)
         Next
       Else
        Msg = "Pas de sous-répertoire dans : " & vbCrLf & appFolder
      End If
      MsgBox Msg
    End Sub
    Pour en savoir plus sur les variables tableaux, à lire Utiliser les variables tableaux en VBA Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Merci de vos réponses.

    Apparemment pas de solution de "rechercher le doc" possible sans en connaître le chemin complet surtout si le chemin est différent.

    J'ai opté pour la solution de créer une feuille avec tout les chemins en rapport au nom entré et sur la feuille ou le nom est entré, une RechercheV inscrivant le chemin récupéré par le code VBA de cette feuille.

    Si le chemin devrait changer, (utilisation multi utilisateur du dossier comportant les documents) mon système ne fonctionnera plus , mais j'ai pas trouvé meilleure solution.

    Merci de l'aide

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Apparemment pas de solution de "rechercher le doc" possible sans en connaître le chemin complet surtout si le chemin est différent.
    pas avec la fonction Dir mais bien comme je l'avais indiqué dans l'une de mes réponses avec FileSystemObject.
    A lire Manipulation des fichiers en VBA et tout particulièrement le chapitre III. La recherche de fichiers

    Il existait dans les versions antérieures un objet FileSearch bien pratique et qui permettait de faire une recherche de fichier mais il a été retiré.
    Michel Tanguy (Silkyroad) a écrit un complément qui le remplace. Voir ce lien Un complément FileSearch pour Excel 2007
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Ouvrir un document Word sans indiquer le chemin
    Par jeff_9367 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/08/2017, 17h44
  2. Ouvrir un document Word/Pdf à l'aide d'un chemin
    Par Hendy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/09/2014, 18h59
  3. Réponses: 6
    Dernier message: 23/06/2012, 01h34
  4. Réponses: 10
    Dernier message: 05/04/2011, 17h27
  5. [Access][VBA] Ouvrir un document word existant
    Par NicoNGRI dans le forum Access
    Réponses: 1
    Dernier message: 16/12/2005, 12h39

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