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 :

VBA - SI ERREUR chemin d'accès pour enregistrer


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut VBA - SI ERREUR chemin d'accès pour enregistrer
    Bonjour,

    Dans mon fichier j'ai un code permettant d'enregistrer le résultat de mon formulaire en PDF.
    Plusieurs personnes utilisent ce fichier mais le nom du répertoire diffère en fonction des personnes ( pour certains c'est M:\.... pour d'autres O:\.... ou encore Z:\....

    Est il possible d'avoir un code du type si réseau non existant alors enregistrer sur le suivant?

    Voici mon code de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim NomFichier As String
     
    NomFichier = Sheets("Fiche de renseignement Pôle").Range("E6").Value & " - " & Sheets("Fiche de renseignement Pôle").Range("D6").Value
     
    Sheets("Fiche de renseignement Pôle").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "M:\ATLAS\COMMUN\ATLAS\16 - Circuit arrivée-départ\01 - Circuits\" & NomFichier & ".pdf", _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=True
    Je vous remercie pour votre aide

  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
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La propriété Path de l'objet Thisworbook indique le chemin du classeur où se trouve le classeur contenant le code Vba
    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 Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 278
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Si M:, O:, Z: représentent le même serveur réseau, on peut envisager de mettre le chemin réseau du type
    \\NomServeur\DossierServeurPartage\

    Évidement si le nom du serveur change, ça peut poser problème

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Bonjour,

    Si M:, O:, Z: représentent le même serveur réseau, on peut envisager de mettre le chemin réseau du type
    \\NomServeur\DossierServeurPartage\

    Évidement si le nom du serveur change, ça peut poser problème
    Bonjour,

    j'ai essayé en inscrivant le nom du réseau mais cela ne fonctionne pas. Ai je fait la bonne manip'?
    De plus, pour moi ce nom de réseau change en fonction de la ville où se trouve l'utilisateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NomFichier = Sheets("Fiche de renseignement Pôle").Range("E6").Value & " - " & Sheets("Fiche de renseignement Pôle").Range("D6").Value
    
    Sheets("Fiche de renseignement Pôle").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "\\inf11mpd--wi01\ATLAS\COMMUN\ATLAS\16 - Circuit arrivée-départ\01 - Circuits\" & NomFichier & ".pdf", _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=True
    Nom : Capture.JPG
Affichages : 99
Taille : 4,4 Ko

  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
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si le classeur se trouve sur le réseau l'instruction ThisWorkbook.Path doit vous renvoyer le chemin complet
    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 à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Si le classeur se trouve sur le réseau l'instruction ThisWorkbook.Path doit vous renvoyer le chemin complet
    Je suis relativement novice en VBA. Pouvez vous m'expliquer plus en détail?

  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
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mes applications en VBA, que ce soit avec Power Query, Access, Word, PowerPoint ou Excel sont toujours installées dans un répertoire dédié qui contient lui même des sous-répertoires comme Template, Pdf, etc.
    En utilisant Thisworkbook.Path cela me permet de connaître le chemin où se trouve le classeur central de l'application parce-qu'évidemment les chemins peuvent être différents d'un PC à l'autre

    Voici un exemple d'une procédure qui exporte en pdf la feuille active dans le sous-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
    Option Explicit
     
    Sub Main()
      Const SubFolder As String = "\pdf\" ' Nom du sous-répertoire où sauver le pdf
      Dim PathName As String ' Chemin du répertoire courant
      Dim FileName As String ' Nom du fichier
      Dim FullName As String ' Nom complet du fichier (Répertoire courant + Sous-dossier + FileName)
      FileName = Format(Now, "YYMMDD_HH-MM") & " Test.pdf"
      PathName = ThisWorkbook.Path
      FullName = PathName & SubFolder & FileName
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                      FileName:=FullName
    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

  8. #8
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 278
    Billets dans le blog
    2
    Par défaut
    Re,

    Évidement comme proposé par Philippe si Thisworkbook.path permet de connaitre le chemin du réseau, c'est la solution la plus simple

    Pour le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim NomFichier As String
     
    NomFichier = Sheets("Fiche de renseignement Pôle").Range("E6").Value & " - " & Sheets("Fiche de renseignement Pôle").Range("D6").Value
     
    Sheets("Fiche de renseignement Pôle").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "M:\ATLAS\COMMUN\ATLAS\16 - Circuit arrivée-départ\01 - Circuits\" & NomFichier & ".pdf", _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=True
    En effet, j'ai testé chez moi Worksheets(1).ExportAsFixedFormat plante avec un chemin réseau
    Mais assez étonnamment Thisworkbook.ExportAsFixedFormat a marché chez moi avec un chemin réseau
    Pourquoi ? je l'ignore

  9. #9
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 278
    Billets dans le blog
    2
    Par défaut
    Re,

    Non, finalement, mon deuxième essai de Sheets(1).ExportAsFixedFormat avec un chemin réseau a marché, pas compris ce qui avait planté tout à l'heure

  10. #10
    Membre à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Bonjour,

    Merci pour vos reponses

    J'ai modifié le code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Const SubFolder As String = "\01 - Circuits\" ' Nom du sous-répertoire où sauver le pdf
      Dim PathName As String ' Chemin du répertoire courant
      Dim FileName As String ' Nom du fichier
      Dim FullName As String ' Nom complet du fichier (Répertoire courant + Sous-dossier + FileName)
      FileName = Sheets("Fiche de renseignement Pôle").Range("E6").Value & " - " & Sheets("Fiche de renseignement Pôle").Range("D6").Value
      PathName = ThisWorkbook.Path
      FullName = PathName & SubFolder & FileName
    Sheets("Fiche de renseignement Pôle").ExportAsFixedFormat Type:=xlTypePDF, _
                                      FileName:=FullName

    Cependant, autre point, dans mon code j'ai une condition pour dire si c'est tel cas, alors ce code, si c'est l'autre cas alors l'autre code. Et là... je n'y arrive pas avec ce nouveau code, j'ai le message " déclaration existant dans la portée en cours"

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    If Pole_PCD = "Oui" Then
    Sheets("Fiche de renseignement Pôle").Range("K8") = Circuit
    Sheets("Fiche de renseignement Pôle").Range("K9") = Motif
    Sheets("Fiche de renseignement Pôle").Range("K10") = Pole_PCD
    Sheets("Fiche de renseignement Pôle").Range("K11") = Statut
    Sheets("Fiche de renseignement Pôle").Range("K12") = Corps
    Sheets("Fiche de renseignement Pôle").Range("K13") = Date_circuit
    Sheets("Fiche de renseignement Pôle").Range("B6") = TextBox17
    Sheets("Fiche de renseignement Pôle").Range("C6") = Grade
    Sheets("Fiche de renseignement Pôle").Range("D6") = TextBox1
    Sheets("Fiche de renseignement Pôle").Range("E6") = TextBox15
    Sheets("Fiche de renseignement Pôle").Range("B8") = Ville
    Sheets("Fiche de renseignement Pôle").Range("D8") = Affectation
     
     
     
      Const SubFolder As String = "\01 - Circuits\" ' Nom du sous-répertoire où sauver le pdf
      Dim PathName As String ' Chemin du répertoire courant
      Dim FileName As String ' Nom du fichier
      Dim FullName As String ' Nom complet du fichier (Répertoire courant + Sous-dossier + FileName)
      FileName = Sheets("Fiche de renseignement Pôle").Range("E6").Value & " - " & Sheets("Fiche de renseignement Pôle").Range("D6").Value
      PathName = ThisWorkbook.Path
      FullName = PathName & SubFolder & FileName
    Sheets("Fiche de renseignement Pôle").ExportAsFixedFormat Type:=xlTypePDF, _
                                      FileName:=FullName
     
     
    Else
    Sheets("Fiche de renseignement Autre").Range("K8") = Circuit
    Sheets("Fiche de renseignement Autre").Range("K9") = Motif
    Sheets("Fiche de renseignement Autre").Range("K10") = Pole_PCD
    Sheets("Fiche de renseignement Autre").Range("K11") = Statut
    Sheets("Fiche de renseignement Autre").Range("K12") = Corps
    Sheets("Fiche de renseignement Autre").Range("K13") = CIMS
    Sheets("Fiche de renseignement Autre").Range("B6") = TextBox17
    Sheets("Fiche de renseignement Autre").Range("C6") = Grade
    Sheets("Fiche de renseignement Autre").Range("D6") = TextBox1
    Sheets("Fiche de renseignement Autre").Range("E6") = TextBox15
    Sheets("Fiche de renseignement Autre").Range("B8") = Ville
    Sheets("Fiche de renseignement Autre").Range("D8") = Affectation
     
      Const SubFolder As String = "\01 - Circuits\" ' Nom du sous-répertoire où sauver le pdf
      Dim PathName As String ' Chemin du répertoire courant
      Dim FileName As String ' Nom du fichier
      Dim FullName As String ' Nom complet du fichier (Répertoire courant + Sous-dossier + FileName)
      FileName = Sheets("Fiche de renseignement Autre").Range("E6").Value & " - " & Sheets("Fiche de renseignement Autre").Range("D6").Value
      PathName = ThisWorkbook.Path
      FullName = PathName & SubFolder & FileName
    Sheets("Fiche de renseignement Autre").ExportAsFixedFormat Type:=xlTypePDF, _
                                      FileName:=FullName
     
    End If

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    déclaration existant dans la portée en cours"
    C'est normal.
    On ne peut déclarer une variable qu'une seule fois et la valeur d'une constante ne peut plus être modifiée
    A la place d'une constante, choisissez une variable pour le sous-répertoire.

    Petit conseil : Ce n'est évidemment pas obligatoire mais il est plus facile pour la maintenance de déclarer les variables en tête de procédure. Dans l'ordre personnellement, je commence par déclarer mes constantes et ensuite les variables en commençant par les variables "objet". Cela me permet de ne pas oublier de les supprimer en fin de procédure.
    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

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je viens de relire votre code.
    Finalement ni la constante, ni les variables ne sont concernées par la structure décisionnelle (le If) donc il faut conservé la déclaration de la constante et des variables en tête de procédure ainsi que l'affectation des variables. Les seules lignes à déplacer ce sont celles qui concerne l'exportation de la feuille après avoir rempli les cellules.
    Il faut juste adapter le nom du fichier soit 'Fiche de renseignement Pôle" soit "Fiche de renseignement Autre" en fonction des critères et comme le nom des feuilles correspondes au nom des fichiers utiliser deux constantes et utiliser un bloc With...End With
    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

  13. #13
    Membre à l'essai
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Je viens de relire votre code.
    Finalement ni la constante, ni les variables ne sont concernées par la structure décisionnelle (le If) donc il faut conservé la déclaration de la constante et des variables en tête de procédure ainsi que l'affectation des variables. Les seules lignes à déplacer ce sont celles qui concerne l'exportation de la feuille après avoir rempli les cellules.
    Il faut juste adapter le nom du fichier soit 'Fiche de renseignement Pôle" soit "Fiche de renseignement Autre" en fonction des critères et comme le nom des feuilles correspondes au nom des fichiers utiliser deux constantes et utiliser un bloc With...End With
    Merci, cependant ne maitrisant pas, je n'ai pas bien compris ce qu'il faut que je fasse. Je ne vois pas comment utiliser le bloc With...End With[/QUOTE]

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/09/2017, 11h02
  2. [VBA-E] Nommer chemin d'accès dans une feuille de calcul.
    Par BRUNO71 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/03/2007, 14h30
  3. [VB.NET] reduction chemin d'accès pour affichage ?
    Par lacsap49 dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/10/2006, 00h02
  4. Réponses: 2
    Dernier message: 10/09/2006, 14h28
  5. [VBA] Retrouver le chemin d'accès de la base ouverte
    Par menguygw dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2006, 12h05

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