Microsoft 365 Renommer des fichiers avec des caractères non reconnus

ivan27

XLDnaute Occasionnel
Bonjour à tous,

Mon code plante sur la ligne :
"Name CheminOrigine As CheminDestination & "\" & NouveauNom & "." & Extension"
Lorsque j'essaie de renommer des fichiers avec des caractères non reconnus du type "é,è,°, etc..." Voici un exemple de nom de fichier :
"Facture-N� FAC-127-202005986754.pdf"
Je suis désolé mais pour des raisons de confidentialité, je ne peux pas vous communiquer des exemples de fichiers réels qui sont en général des pdf non modifiables.

Le fonctionnement attendu :
On vérifie si le répertoire temporaire est vide, on télécharge un fichier à l'aide du lien. Le fichier porte les numéro 1 à n.
Une fois dans le répertoire temporaire, le fichier est renommé avec son identifiant (1 à n) présent dans le lien en conservant l'extension d'origine et il est ensuite déplacé dans le répertoire final et ainsi de suite.

Voici mon code complet ci-dessous :

VB:
Sub telechargement()
    Dim Identifiant As Long
    Dim URLBase As String
    Dim DownloadFolder As String
    Dim DestinationFolder As String
    Dim objShell As Object
    Dim objIE As Object
    Dim urlCible As String

    ' Le lien de base
    URLBase = "https://le-lien-de-base="

    ' Spécifiez le dossier de destination temporaire (répertoire de téléchargement par défaut)
    DownloadFolder = "C:\Vers\répertoire\temporaire\"

    ' Spécifiez le dossier de destination final
    DestinationFolder = "C:\Vers\répertoire\final\"

    ' Crée le répertoire temporaire s'il n'existe pas
    If Dir(DownloadFolder, vbDirectory) = "" Then
        MkDir DownloadFolder
    End If

    ' Spécifiez la plage d'identifiants des documents à télécharger (de 1 à n)
    For Identifiant = 1 To 50000
        ' Vérifiez si le répertoire temporaire est vide
        If Dir(DownloadFolder & "*.*") = "" Then
            ' Construit l'URL du document
            Dim URL As String
            URL = URLBase & Identifiant & "&Suite_du_lien_de_telechargement="
            
            ' Télécharge le fichier
            ThisWorkbook.FollowHyperlink URL

            ' Attendre un court instant pour laisser le téléchargement se terminer
            Application.Wait (Now + TimeValue("0:00:02"))
                          
            ' Rechercher le fichier téléchargé dans le répertoire de téléchargement
            Dim FileName As String
            FileName = Dir(DownloadFolder & "*.*")

            If FileName <> "" Then
                ' Renommer le fichier téléchargé avec l'identifiant
                RenommerEtDeplacerFichier DownloadFolder & FileName, DestinationFolder, Identifiant
            End If
        End If

        urlCible = URL
        
        Set objIE = Nothing
    Next Identifiant
    Application.ScreenUpdating = True
End Sub

Sub RenommerEtDeplacerFichier(ByVal CheminOrigine As String, ByVal CheminDestination As String, ByVal NouveauNom As String)
    Dim NomFichier As String
    Dim Extension As String

    Application.ScreenUpdating = False
    ' Extrait le nom du fichier et son extension
    NomFichier = Dir(CheminOrigine)
    Extension = Right(NomFichier, Len(NomFichier) - InStrRev(NomFichier, "."))

    ' Renomme le fichier avec le nouveau nom tout en conservant l'extension
    Name CheminOrigine As CheminDestination & "\" & NouveauNom & "." & Extension
End Sub

Merci d'avance pour votre aide.

Ivan
 

Phil69970

XLDnaute Barbatruc
Bonjour @ivan27

Le principe :
Avec une table de correspondance tu contournes le pb
Si un caractère interdit tu lui substitues un autre caractère autorisé

Voir exemple :
 

ivan27

XLDnaute Occasionnel
Re bonjour le forum, Phil69970,
Effectivement, j'ai vu des codes qui permettent de remplacer par exemple 'è' par 'e'. Par contre, cette étape est obligatoire ?
Quand j'ai ceci : "Facture-N� FAC-127-202005986754.pdf" je suis obligé de remplacer d'abord '�' par autre chose pour remplacer ensuite le nom du fichier par un nombre ? Il n'existe aucun moyen pour passer directement de ça "Facture-N� FAC-127-202005986754.pdf" à ça "40587.pdf" ?
Ivan
 

ivan27

XLDnaute Occasionnel
Dans cet exemple, le nombre 40587correspond à l'identifiant dans l'URL. La récupération et le changement de nom fonctionnent très bien sauf quand j'ai un caractère qui est remplacé par ceci '�' dans le nom du fichier téléchargé.
Ivan
 

ivan27

XLDnaute Occasionnel
Bonsoir Phil69970, le forum,
Je n'arrive pas à m'en sortir. Le problème, c'est le point d'interrogation dans le nom des fichiers.
Je n'arrive pas à renommer ce type de fichier, ni a supprimer les points d'interrogation.
J'ai fait plusieurs tentatives de copie ou de déplacement avec NAME, fso.MoveFile, FileCopy, mais je n'arrive pas à agir sur le nom des fichiers, quelque soit la demande.
Par contre, si je retire le point d'interrogation dans le nom du fichier alors tous mes codes fonctionnent.
Je reformule donc ma demande d'aide initiale : Comment retirer le point d'interrogation dans le nom d'un fichier ?
Bonne fin de soirée à tous,
Ivan
 

Phil69970

XLDnaute Barbatruc
Et ceci ne fonctionne t'il pas ?

Recherche avec le caractère générique ? (point d’interrogation)

1698698327369.png

1698698363889.png

Dans une macro tu peux donc remplacer le caractère � que tu veux par "Ce que tu veux"
 

gbinforme

XLDnaute Impliqué
Bonjour,
Le souci vient du fait que :
- le "?" est un caractère générique et donc si tu remplaces "?" par "x" ton nom n'aura que des "x"
- Tu peux mettre ton caractère qui n'est pas un vrai "?" dans une cellule de ton classeur "A1" par exemple
- dans ce cas en faisant le remplacement avec ta cellule cela fonctionnera
VB:
CheminOrigine = Replace(CheminOrigine, Range("A1").Value, "?")
- par contre ta fonction
Code:
NameAs CheminDestination & "\" & NouveauNom & "." & Extension
ne va plus fonctionner car le "CheminOrigine" ne sera pas correct.
 

Discussions similaires

Statistiques des forums

Discussions
312 534
Messages
2 089 386
Membres
104 152
dernier inscrit
sabalex