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 :

problèmes de nom de fichiers - plutot complexe (je pense)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Par défaut problèmes de nom de fichiers - plutot complexe (je pense)
    bonjour à tous
    j'ai une routine qui énumère TOUS les élément d'un dossier (== sous dossiers & fichiers) qui fonctionne parfaitement.
    SAUF avec certains noms reçus de l'extérieur par mail.
    On pense à un problème de codage ASCI, effectivement.
    MAIS ces caractères inhabituels n'apparaissent PAS dans l'explorateur (W7 pro)
    ex dans EXPLORER j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents à fournir.pdf
    mais quand je corrige le à qui semble normal: curseur après le à et EFFACEMENT j’obtiens 2a !:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents aa fournir.pdf
    effectivement quand je copie le nom original & le nom corrigé à la main, on a APPAREMMENT la même chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Documents à fournir.pdf
    Documents à fournir.pdf
    Mais quand je copie les 2 dans notepad & que je traduis en HEXA, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Documents 61CC80 fournir.pdf
    Documents C3A0 fournir.pdf
    ET VBA ne comprend pas puisque lui il interprète comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      : fullFilePath : "L:\ap2\Downloads\Documents a` fournir.pdf" : String
    ci joint le code de listage des répertoires:
    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
    Sub LoopAllSubFolders(ByVal folderPath As String)
     
    Dim fileName As String
    Dim fullFilePath As String
    Dim numFolders As Long
    Dim folders() As String
    Dim i As Long
     
    If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
    fileName = Dir(folderPath & "*.*", vbDirectory)
     
    While Len(fileName) <> 0
     
        If Left(fileName, 1) <> "." Then
     
            fullFilePath = folderPath & fileName
     
            If (GetAttr(fullFilePath) And vbDirectory) = vbDirectory Then
                ReDim Preserve folders(0 To numFolders) As String
                folders(numFolders) = fullFilePath
                numFolders = numFolders + 1
            Else
                'Insert the actions to be performed on each file
                'This example will print the full file path to the immediate window
                Debug.Print folderPath & fileName
            End If
        End If
        fileName = Dir()
    Wend
     
    For i = 0 To numFolders - 1
        LoopAllSubFolders folders(i)
    Next i
     
    End Sub
    ça bloque à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           If (GetAttr(fullFilePath) And vbDirectory) = vbDirectory Then
    puisque on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      : fullFilePath : "L:\ap2\Downloads\Documents a` fournir.pdf" : String
    Il y a t il a un moyen de corriger cela ?
    Merci à tous

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 236
    Par défaut
    hello,
    Citation Envoyé par payadz2 Voir le message
    bonjour à tous
    Mais quand je copie les 2 dans notepad & que je traduis en HEXA, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Documents 61CC80 fournir.pdf
    Documents C3A0 fournir.pdf
    explication des codes : C3A0 c'est le code hexa du à en UTF8
    61CC80 c'est le code hexa de a (61) utf8 avec COMBINING GRAVE ACCENT (cc80) utf8

    ami calmant, J.P

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Par défaut
    Merci,
    j'ai cherché de mon coté:
    il semble que W7 utilise UNICODE pour l'affichage des noms de fichiers
    et donc VBA le lit mal (en UTF8 ?)

    mais comment récupérer le nom de W7 pour pouvoir l'utiliser dans VBA ?

    en dehors de mon problème perso si j'essaye d'accéder à un fichier quelconque (Ex "chiffres à publier.xls") si ce nom est codé en UNICODE, je le vois tel que dans le répertoire de W7, mais VBA est incapable de le trouver puisqu'il comprend "chiffres a` publier.xls".

    J'ai trouvé nombre d'utilitaires qui font la conversion MAIS UNIQUEMENT du contenu de fichiers.
    pour l'instant je n'ai aucune piste (si possible en VBA) pour ne changer QUE le nom.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Par défaut
    j'ai avancé mais ça ne marche pas:
    j'ai reconverti les noms mal traduits par VBA pour en refaire des noms corrects:
    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
    Sub UTF8_Reconstruc(ByRef a_Text As String)
    Dim text As String
    Dim pos As Integer
    Dim lon As Integer
    'text = "Mode`le ordonnance post-ope´ratoire cataracte MG.pdf"
    'probleme VBA ne fonctionne que en UTF8 et donc un texte en UNICODE copieé ailleurs puis collé dans VBA n'est pas le m^me !!!
    's = UTF8_Decode("Mode`le ordonnance post-ope´ratoire cataracte MG.pdf")
    text = a_Text
    'MsgBox "a_text=" & text & "<"
    'e`  a` e´ a remplacer par è à é
    If InStr(text, "e´") Then
        pos = InStr(text, "´")
        lon = Len(text)
        text = Left(text, pos - 2) & "é" & Right(text, lon - pos)
    End If
     
    If InStr(text, "e`") Then
        pos = InStr(text, "`")
        lon = Len(text)
        text = Left(text, pos - 2) & "è" & Right(text, lon - pos)
    End If
     
    If InStr(text, "a`") Then
        pos = InStr(text, "´")
        lon = Len(text)
        text = Left(text, pos - 2) & "à" & Right(text, lon - pos)
    End If
     
    'MsgBox "Text=" & text & "<"
     
    a_Text = text
    End Sub
    j'ai rajouté en plus dans le code initial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            fullFilePath = folderPath & fileName
            Call UTF8_Reconstruc(fullFilePath)
    Ca ça marche en apparence:
    avec EXPLORER : Modèle ordonnance post-opératoire cataracte MG.pdf
    devient en lecture par VBA: Mode`le ordonnance post-ope´ratoire cataracte MG.pdf
    et après UTF8_Reconstruc : Modèle ordonnance post-opératoire cataracte MG.pdf

    ca bloque au même endroit, avec:
    : fileName : "Mode`le ordonnance post-ope´ratoire cataracte MG.pdf" : String <- normal c'est la lecture naturelle de VBA
    : fullFilePath : "L:\ap2\Downloads\Modèle ordonnance post-opératoire cataracte MG.pdf" : String <- c'est la correction avec UTF8_Reconstruc
    Bref on a le m^me nom en apparence et pourtant ça bloque !

    Quelqu'un a t il une idée plus pertinente, parce que je sèche

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 236
    Par défaut
    hello,
    le souci c'est qu'avec ta procédure utilisant Dir on exploite le nom de fichier extrait pour aller rechercher son type par GetAttr. Si dans le nom de fichier original, il y a un code de combinaison d'accent, on le perd à l'extraction et on se retrouve avec à la place l'accent lui-même.
    Pour éliminer le problème on peut par exemple utiliser l'objet COM FileSystemObject. En effet avec lui lorsqu'on lit des répertoires on récupère en même temps que le nom des fichiers , les sous-répertoires. En plus avec FileSystemObject on récupère certains fichiers que tu ne récupérais pas avec ta procédure, par exemple les fichiers qui commencent par un . ou un _.
    voici un exemple de code équivalent à ce que faisait ta procédure :
    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 ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
    Dim xFileSystemObject As Object
    Dim xFolder As Object
    Dim xSubFolder As Object
    Dim xFile As Object
    Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
    Set xFolder = xFileSystemObject.GetFolder(xFolderName)
    For Each xFile In xFolder.Files
       Debug.Print xFileSystemObject.BuildPath(xFolder, xFile.Name)
    Next xFile
    If xIsSubfolders Then
      For Each xSubFolder In xFolder.SubFolders
        ListFilesInFolder xSubFolder.Path, True
      Next xSubFolder
    End If
    Set xFile = Nothing
    Set xFolder = Nothing
    Set xFileSystemObject = Nothing
    End Sub

    Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub TestSubFolders()
    ListFilesInFolder "M:\temp", True
    End Sub
    Le deuxième paramètre de ListFilesInFolder permet de préciser si on veut aussi balayer les sous-répertoires.


    Ami calmant, J.P

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Par défaut
    merci
    je teste


    @ Jurasic pork
    je n'avais pas vu la signature:
    ah le ZX80... avec les extensions directelment enfichées sur la CM...
    je suis passé rapidement a l Amstrad 464 (k7 intégrée, la classe !) et un jour au 664, avec la disquette...le GrAAL...

Discussions similaires

  1. Problème sur nom de fichier avec des caractères spéciaux
    Par elgordopresto dans le forum VBA Access
    Réponses: 5
    Dernier message: 31/10/2019, 11h09
  2. Problème de noms de fichiers
    Par Rico2a dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/01/2014, 14h51
  3. Opendialog et problème récupération nom du fichier
    Par jeff_68 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 22/07/2010, 17h03
  4. 2 problèmes de nom de fichier
    Par laurentSc dans le forum Langage
    Réponses: 11
    Dernier message: 14/07/2010, 11h49
  5. Problème de nom de fichier et question subsidiaire
    Par Smiff dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2008, 22h39

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