Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Erreur d'execution '52': Nom ou numéro de fichier incorrect

macseb

XLDnaute Nouveau
Salut à tous,

Je viens chercher des cerveaux complémentaires . J'ai un petit soucis tel qu'énoncé dans mon titre. En introduction et dans le but d'explliquer brièvement l'intérêt du fichier excel que j'ai réalisé: Ce document excel à pour simple objectif d'archiver les centaines de mails traités par les agents de l'entreprise ou je bosse. Pour cela j'utilise un grand tableau pour stocker les diverses informations sur le traitement de ces mails (genre, nom, prénom de l'administré, identifiant, date, délai de réponse...),12 onglets identiques pour les 12 mois de l'année.

Mon problème se situe dans la nouvelle fonctionnalité que je suis entrain de développer en VBA. Ce petit programme doit permettre dans l'onglet décembre de proposer un bouton permettant de reproduire automatiquement un nouveau document excel identique dans sa structure mais qui efface le contenu des 12 tableaux (12 onglets), plus quelques détails supplémentaire tel que mise à jour des titres (qui affiche l'année) mais c'est du détail.

Alors mon programme est totalement fonctionnel lorsque j'execute ce dernier en local ou réseau local c'est à dire lorsque mon fichier a un chemin d'accès du type "C:\BlaBlaBla\Blablo\mon Suivi mails.xlsm". Par contre lorsque j'exécute ce même programme à partir d'un réseau distant, un chemin de type "https:\\serveur_communauté_de_travail\mon Suivi mails.xlsm" la j'ai cette vilaine erreur qui apparait (celle précisée dans mon titre) .

Alors l'erreur apparait lors de l'utilisation de la fonction DIR() qui me permet de vérifier si le fichier n'a pas déja été créé.

Voici le code:

VB:
Sub genere_nouveau_document(ByRef nouvelle_annee As Integer, ByRef annee_en_cours As Integer)

Dim cheminDossier As String, cheminComplet As String, newFileName As String

cheminDossier = ActiveWorkbook.Path + "/"
newFileName = "Suivi mails " & nouvelle_annee & ".xlsm"
cheminComplet = cheminDossier + newFileName

With ThisWorkbook
    .Save
    If Dir(cheminComplet) = "" Then  <---------  C'est ici que le code s'arrête lorsque la variable cheminComplet est du type https:\\ et fonctionne parfaitement avec C:\ ou Z:\ bref n'importe quelle lecteur local ou reseau.
        .SaveCopyAs Filename:=cheminComplet
    Else
        If MsgBox("Le fichier <<" & newFileName & ">> existe déjà. Êtes-vous sûr de vouloir l'écraser ?", vbCritical + vbYesNo, "Ecraser le fichier?") = vbYes Then
            .SaveCopyAs Filename:=cheminComplet
        Else: Exit Sub
        End If
    End If
End With

'****************************************************************************
'****** EFFACEMENT DES DONNEES EXISTANTES DANS LE NOUVEAU FICHIER CREE ******
'****************************************************************************

Workbooks.Open (cheminComplet) 'Ouverture du nouveau classeur de suivi mail créé

Dim sh As Sheets, feuil As Object
Set sh = ActiveWorkbook.Sheets

'Remise à zéro et mise en forme de l'ensemble des cellules des Tableaux dans chaque onglet mensuel
For Each feuil In sh
    If feuil.Name <> "Feuil2" Then
        feuil.Unprotect
        With feuil.Range("A10:J700")
            .ClearContents
            .Borders.Weight = xlHairline
            .BorderAround Weight:=xlMedium
        End With
        
        'Mise à jour des titres des feuilles
        feuil.Range("D3").Value = Replace(feuil.Range("D3").Value, annee_en_cours, nouvelle_annee)
        
        feuil.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
            False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
            AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
            :=True, AllowInsertingHyperlinks:=True, AllowFiltering:=True
    End If
Next

'Sauvegarde puis fermeture du nouveau fichier <<suivi mail>> créé.
Application.DisplayAlerts = False
Workbooks(newFileName).SaveAs ActiveWorkbook.Path & "\" & newFileName 'Ne pas utiliser la méthode .Save car sur le reseau elle n'enregistre pas au bon endroit
Application.DisplayAlerts = False
ActiveWorkbook.Close

MsgBox "Un nouveau fichier vierge nommé """ & newFileName & """ a été créé dans le dossier SUIVI MAILS." & Chr(10) & Chr(13) & Chr(10) & Chr(13) _
& "Des nouveaux dossiers ARRIVE et DEPART vierges ont également été créés pour l'archivage des mails de cette nouvelle année.", vbInformation, "Nouveau fichier créé"

'Création des dossiers et sous-dossiers (APPEL DE LA FONCTION creation_dossiers voir ci-dessous)
Call creation_dossiers(nouvelle_annee)

End Sub

L'erreur se situe donc à l'utilisation de la fonction Dir() en début de code dans le bloc with ThisWorkbook .
Voila si quelqu'un a une explication je suis preneur car je tourne un peu en rond, je ne comprends pas pourquoi une adresse distante bug alors qu'en local ca passe…

Merci d'avance de votre aide!
 

gbinforme

XLDnaute Impliqué
Bonjour,
Lorsque tu as un nom de fichier ""https:\\..." c'est un accès web et la fonction Dir ne fonctionne qu'avec des adresses locales : je ne peux pas tester mais ton souci doit venir de là et il te faudra trouver un autre moyen de vérifier la présence d'un fichier non local.
 

Gégé-45550

XLDnaute Accro
Bonjour,
tiré de ce fil :
Mettre ceci dans un module standard :
VB:
Option Explicit
 
#If VBA7 Then
Private Declare PtrSafe Function DavGetUNCFromHTTPPath Lib "Netapi32.dll" (ByVal Url As LongPtr, ByVal UncPath As LongPtr, lpSize As Long) As Long
#Else
Private Declare Function DavGetUNCFromHTTPPath Lib "Netapi32.dll" (ByVal Url As Long, ByVal UncPath As Long, lpSize As Long) As Long
#End If
 
'-----------------------------------------------------------------------------------------
' Converti un chemin SharePoint de type (http...) en chemin UNC (\\...)
' Le chemin retourné a un séparateur final si le chemin initial en avait un
'-----------------------------------------------------------------------------------------
Public Function getUNCPath(pPath As String) As String
Dim lPath As String
Dim lUncPath As String
Dim lSize As Long
lSize = 260 ' MAX_PATH
lPath = pPath & vbNullChar ' Chemin + caractère null de fin
lUncPath = Space(lSize) ' Buffer de réception
If DavGetUNCFromHTTPPath(StrPtr(lPath), StrPtr(lUncPath), lSize) = 0 Then
    ' 0 = pas d'erreur
    ' on reçoit dans lSize la taille du chemin UNC (séparateur de fin inclus)
    getUNCPath = Left(lUncPath, lSize - 1)
    ' Si le chemin initial avait un séparateur final, on en ajoute un
    If Right(pPath, 1) = "/" Or Right(pPath, 1) = "\" Then
        getUNCPath = getUNCPath & "\"
    End If
Else
    getUNCPath = pPath
End If
End Function
Puis convertir le chemin :
Code:
cheminComplet= getUNCPath(cheminComplet)
Le contenu de cheminComplet devrait être transformé d'une adresse http... en un chemin UNC qui commence par \\ et que Dir saura comprendre.
Cordialement,
 
Dernière édition:

macseb

XLDnaute Nouveau
Alors, comme je suis pas au travail ces prochains jours, j'ai tenté de suivre la méthode proposé mais au lieu d'utiliser sharepoint comme au boulot. J'ai tenté de reproduire une situation similaire avec onedrive.
Alors la fonction getUNCPath() me traduit bien le https:// en \\. Pas de soucis même si il rajoute un truc en plus ( @SSL\DavWWWRoot\) mais passons. Mais le probleme survient à la suite dans mon instruction .savecopyas, tout simplement il ne trouve pas le chemin pour enregistrer, je suppose qu'il ne comprends pas cette forme traduite par getUNCPath. Et j'avoue comprendre la machine aussi, comment peut-il savoir ou chercher étant donné qu'on a remplacé le https:// par \\
J'avoue que c'est tres confu pour moi, vous avez peut etre d'autres idée avant que je teste sur le sharepoint de mon boulot mais je crains bien que ca ne fonctionne pas...
 

Discussions similaires

Réponses
2
Affichages
660
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…