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 Word Discussion :

Fichier inexistant qui existe bel et bien [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Points : 94
    Points
    94
    Par défaut Fichier inexistant qui existe bel et bien
    Bonjour à tous,

    un de mes clients a un nombre considérable de documents à convertir du format ".doc" au format ".docx", j'ai donc écrit le code suivant afin de lui faciliter la vie :

    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
    Option Explicit
     
    '/* Cette procédure a pour but de convertir tous les documents Word */
    '/* du format ".doc" (97-2003) au format .docx (2010) */
     
    Sub DocumentConverter()
     
        Dim fsoObjetsSysteme As Scripting.FileSystemObject ' Création de l'objet fso
        Dim fldRepertoire As Scripting.Folder ' Déclaration de l'objet répertoire
        Dim fileFichier As Scripting.File ' Création de l'objet fichier
        Dim strDocument As String ' Déclaration de la variable du répertoire
     
        Set fsoObjetsSysteme = New Scripting.FileSystemObject
        Set fldRepertoire = fsoObjetsSysteme.GetFolder(ThisDocument.Path)
        Dim x As Integer
     
        For Each fileFichier In fldRepertoire.Files
            If Right(fileFichier.Name, 4) = ".doc" Then
                x = x + 1
                strDocument = Replace(fileFichier, ThisDocument.Path & "\", "")
                Documents.Open strDocument ' /!\
                ActiveDocument.Convert
                ActiveDocument.Close True, wdWordDocument
            End If
        Next
     
        Set fileFichier = Nothing
        Set fldRepertoire = Nothing
        Set fsoObjetsSysteme = Nothing
        Application.StatusBar = ""
        MsgBox x & " fichiers ont été convertis " & vbLf & "du format <.doc> (97-2003) " & vbLf & "au format .docx (2010)", vbOKOnly
        Exit Sub
     
    End Sub
    Le souci, c'est que pour une raison que j'ignore, la ligne où j'ai placé le symbole /!\ lève une exception "Fichier Introuvable"
    J'ai du mal à comprendre comment c'est possible vu que le nom du document est récupéré dynamiquement un peu plus haut.

    Quelqu'un aurait une idée svp ?

    Merci de vos lumières !

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    c'est normal avec la grossière erreur de la ligne n°20 ‼ Quel en est le but ? …

    Car là (non pas Bruni !) le chemin d'accès du fichier y est retiré,
    donc le fichier ne peut être ouvert n'existant pas dans le répertoire courant …

    Mettre un point d'arrêt sur la ligne n°21 afin de vérifier strDocument.


    Sinon pour un simple parcours d'un dossier, la fonction interne au VBA Dir est plus rapide et plus simple à gérer …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Points : 94
    Points
    94
    Par défaut
    Salut Marc-L

    aussi étrange que cela puisse paraître, Word lève une exception "incompatibilité de type" quand je ne retire pas le chemin de la variable.

    Ici strDocument comporte donc uniquement le nom du Document, ce qui fonctionne pour certains documents.

    Cela dit, ta remarque m'a amené à approcher le problème sous un angle différent, car je me suis souvenu qu'en l'absence de chemin dans le nom du fichier à ouvrir, les applications Office prennent un répertoire par défaut, et c'était ici l'origine du problème.

    J'ai donc simplement eu à utiliser la méthode ChangeFileOpenDirectory.

    Ainsi donc merci pour ta remarque !!

    et voici pour ceux que ça intéresse le code final :

    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
    Sub DocumentConverter()
            
        Dim fsoObjetsSysteme As Scripting.FileSystemObject ' Création de l'objet fso
        Dim fldRepertoire As Scripting.Folder ' Création de l'objet répertoire
        Dim fileFichier As Scripting.File ' Création de l'objet fichier
        
        Set fsoObjetsSysteme = New Scripting.FileSystemObject
        Set fldRepertoire = fsoObjetsSysteme.GetFolder(ThisDocument.Path)
        ChangeFileOpenDirectory ThisDocument.Path ' modifie le répertoire d'ouverture par défaut
        Dim x As Integer
    
        For Each fileFichier In fldRepertoire.Files
            If Right(fileFichier.Name, 4) = ".doc" Then
                x = x + 1
                Documents.Open fileFichier.Name
                ActiveDocument.Convert
                ActiveDocument.Close True, wdWordDocument
            End If
        Next
    
        Set fileFichier = Nothing
        Set fldRepertoire = Nothing
        Set fsoObjetsSysteme = Nothing
        MsgBox x & " fichiers ont été convertis " & vbLf & "du format <.doc> (97-2003) " & vbLf & "au format .docx (2010)", vbOKOnly
    
    End Sub

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    aussi étrange que cela puisse paraître, Word lève une exception "incompatibilité de type" quand je ne retire pas le chemin de la variable.
    Logique !
    Replace prend en argument des variables de type String, or tu lui passes en argument un objet File.
    Tu as donc une incompatibilité, mais elle n'est en rien liée au chemin.
    En plus, Replace n'est pas un méthode qui agit sur les fichiers, mais sur du texte.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Points : 94
    Points
    94
    Par défaut
    Oui aussi, j'ai codé ça en quatrième vitesse, j'ai vu peu après que je n'avais pas ajouté la méthode .Name.
    Je l'ai ajoutée entre temps mais le pire c'est que l'exception n'était même pas levé sur cette ligne mais sur la suivante.
    J'ai fait des tests avec Document.Open fileFichier.Name, l'incompatibilité de type revient quand même.
    La seule solution est de définir le répertoire par défaut manuellement puis ouvrir le document avec le nom du document sans le chemin.

    Merci toute fois pour ta remarque, ça m'apprendra à être plus regardant sur mon propre code.

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    On peut ouvrir et manipuler les fichiers sans changer les répertoires par défaut de Word.

    On n'utilise pas le .Name mais le .path pour avoir le chemin et le fichier en une fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents.Open fileFichier.Path

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/09/2010, 16h03
  2. Réponses: 1
    Dernier message: 02/04/2010, 00h49
  3. Ne trouver pas des factures qui existent bien
    Par kinkichin dans le forum E-Business
    Réponses: 0
    Dernier message: 16/03/2009, 10h56
  4. Fichier inexistant mais bien réel
    Par TooKool dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2008, 15h26
  5. Des fichiers inexistants qui existent pourtant !
    Par iubito dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 07/09/2004, 10h29

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