XL 2019 Vérifier si Fichier PDF existe dans sauvegarde

AIXELS

XLDnaute Occasionnel
Bonjour à tous les Amis du Forum. :)
Grâce à votre aide et vos compétences, j'avance sur mon projet.
Je reviens vers vous une fois de plus de l'aide concernant
le contrôle de la présence du fichier archivé sous format PDF.
La vérification est à faire uniquement sur le numéro "D2022-09-158"
pas sur les infos qui suivent le nom de l'archive. Ce numéro évolue
dans le temps bien sûr au fur et à mesure de la la création des devis

S'il n'existe pas, on l'archive et s'il existe, un message s'affiche
"Fichier déjà existant dans l'archivage, voulez-vous l'écraser ?"
Voir les explications sur le fichier joint.

J'ai déjà commencé à le sauvegarder en PDF, mais je ne sais pas
comment faire la vérification. (Voir la macro qui fonctionne très bien)
Merci pour votre aide.
Bien cordialement.
 

Pièces jointes

  • VERIF_DEVIS.xlsm
    41.2 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Aixels,
Une fonction qui vérifie si un fichier existe :
VB:
Function FichierExiste(Fichier As String)
' Renvoie True si le fichier existe, False s'il n'existe pas
On Error GoTo Fin:
   If Fichier <> "" And Len(Dir(Fichier)) > 0 Then
      FichierExiste = True
   Else
      FichierExiste = False
   End If
Exit Function
Fin:
    FichierExiste = CVErr(xlErrRef)
End Function
L'utilisation est simple, dans une macro on fait :
Code:
If FichierExiste(NomFichier)=True Then  ' Mettre le bon nom de fichier'
   Macro quand le fichier existe
Else
   Macro quand le fichier n'existe pas
Endif
 

AIXELS

XLDnaute Occasionnel
Bonjour @sylvanu
Merci pour ton retour.
J'ai essayé voir mon code qui doit-être erroné.

VB:
' Renvoie True si le fichier existe, False s'il n'existe pas
On Error GoTo Fin:
   If Fichier <> "" And Len(Dir(Fichier)) > 0 Then
      FichierExiste = True
   Else
      FichierExiste = False
   End If
Exit Function
Fin:
    FichierExiste = CVErr(xlErrRef)
End Function



'Sauvegarder Devis en format PDF (N° Devis + Date + Type + Immatriculation)
Sub Sauvegarde_PDF()

  
    Dim NomDossier$
    Dim NomFichier$

    'Chemin Dossier déclaré en variable
    NomDossier = "C:\XXX\SAUVEGARDES\DEVIS\"
 
    Sheets("DEVIS").Select
        
    
    'On créé le nom du fichier de sauvegarde (N° Devis + Date + Type + Immatriculation)
    NomFichier = Range("B7") & " " & Format(Now + 0 / 24, "dd-mmm-yyyy") & "  " & Range("E7") & "  " & Range("F7")

 
  If FichierExiste(NomFichier) = True Then ' Mettre le bon nom de fichier'
   'Macro quand le fichier existe
  
   MsgBox ("existe")
  
   Exit Sub
        
Else

'   Macro quand le fichier n'existe pas

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                                    NomDossier & NomFichier, Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
                                    OpenAfterPublish:=False

End If
 
End Sub

Le fichier est bien crée s'il n'existe pas, mais s'il est déjà
présent dans les archives, il me le recrée.
Je le vois par rapport à l'heure du fichier.
Merci pour ton aide.
Bien cordialement.
 

AIXELS

XLDnaute Occasionnel
Bonjour @sylvanu et tous les Amis du Forum. :)
Merci pour ton retour.
J'ai fait la modification comme tu me l'as suggéré
et j'ai toujours le message "Fichier crée" sui s'affiche.
Il est bien crée, mais quand je relance la macro, il n'affiche
pas le message "existe", mais "Fichier crée"
If FichierExiste(NomDossier & NomFichier) = True Then
VB:
'Sauvegarder Devis en format PDF (N° Devis + Date + Type + Immatriculation)
Sub Sauvegarde_PDF()
  
    Dim NomDossier$
    Dim NomFichier$

    'Chemin Dossier déclaré en variable
    NomDossier = "C:\XXX\SAUVEGARDES\DEVIS\"
 
    Sheets("DEVIS").Select
        
    'On créé le nom du fichier de sauvegarde (N° Devis + Date + Type + Immatriculation)
    NomFichier = Range("B7") & " " & Format(Now + 0 / 24, "dd-mmm-yyyy") & "  " & Range("E7") & "  " & Range("F7")

    
    If FichierExiste(NomDossier & NomFichier) = True Then ' Mettre le bon nom de fichier'
    'Macro quand le fichier existe

        MsgBox ("existe")

    Else
        'Macro quand le fichier n'existe pas
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                                        NomDossier & NomFichier, Quality:=xlQualityStandard, _
                                        IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
                                        OpenAfterPublish:=False
        MsgBox ("Fichier crée")

    End If
  
End Sub

Merci pour ton aide.
Bien cordialement.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Je viens de tester sur mon PC, c'est correct.
Peut être est ce les mots TRUE FALSE qui ne sont pas reconnus sur votre PC. ( Pourquoi ? )
Pouvez vous tester :
VB:
Function FichierExiste(Fichier)
' Renvoie "Oui" si le fichier existe, Vide s'il n'existe pas
On Error GoTo Fin:
   If Fichier <> "" And Len(Dir(Fichier)) > 0 Then
      FichierExiste = "Oui"
   End If
Exit Function
Fin:
    FichierExiste = CVErr(xlErrRef)
End Function
Ca lèvera l'ambiguïté.
Et évidemment :
Code:
If FichierExiste(NomDossier & NomFichier) = "Oui" Then
Sinon c'est peut être le chemin.
Pour le tester vous pouvez rajouter avant le IF :
Code:
Range("A1")=NomDossier & NomFichier
En A1 avez vous bien le chemin complet désiré avec la bonne extension ?
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

En A1 avez vous bien le chemin complet désiré avec la bonne extension ?
Je crois effectivement que le problème se trouve là.

C'est pourquoi je proposerais ceci :
VB:
Sub Sauvegarde_PDF()
' Sauvegarder devis en format PDF (n° devis + date + type + immatriculation)
Dim CheminFichier$, NomFichier$

    ' Chemin fichier déclaré en variable
    CheminFichier = "C:\XXX\SAUVEGARDES\DEVIS\"

    With Sheets("DEVIS")

        ' On crée le nom du fichier de sauvegarde (n° devis + date + type + immatriculation)
        NomFichier = .Range("B7") & " " & Format(Now, "dd-mmm-yyyy") & "  " & .Range("E7") & "  " & .Range("F7") & ".pdf"

        If FichierExiste(CheminFichier & NomFichier) = True Then
            MaRep = MsgBox(NomFichier & vbCrLf & vbCrLf & "existe déjà dans le dossier" & vbCrLf & CheminFichier & vbCrLf & vbCrLf & "Écraser le fichier existant ?", vbYesNo, "Sauvegarde devis")
            If MaRep = vbNo Then Exit Sub
        End If

        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminFichier & NomFichier, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False

    End With

End Sub

Function FichierExiste(Fichier As String)
' Renvoie True si le fichier existe, False s'il n'existe pas

    On Error GoTo Fin

    FichierExiste = (Fichier <> "" And Len(Dir(Fichier)) > 0)
    Exit Function

Fin:
    FichierExiste = CVErr(xlErrRef)

End Function


ps : attention, la fonction "FichierExiste" ne prévient pas lorsque le chemin du fichier n'existe pas !
 

AIXELS

XLDnaute Occasionnel
Bonsoir @TooFatBoy et tous les Amis du Forum. :)
Merci pour ton retour.
J'ai fait un copier coller du code que tu m'as transmis.
Après plusieurs essais et manipulations avant de te répondre
tout fonctionne très bien. 👍
Merci pour le temps que tu as consacré à mon problème.
Bonne soirée.
Bien cordialement.
 

TooFatBoy

XLDnaute Barbatruc
Si maintenant ça fonctionne, c'est que ça ne venait pas d'un problème de chemin (sauf si AIXELS l'a modifié sans nous le dire, mais ça ne semble pas être le cas), donc le problème devait bien être l'extension comme tu l'as dit sylvanu puisque, en gros, je n'ai fait qu'ajouter l'extension dans le nom de fichier. ;)
 

AIXELS

XLDnaute Occasionnel
Bonjour à tous les Forum. :)
Dans ce code, je voudrais que le bouton "NON" soit actif par défaut.
J'ai trituré le dans tous les sens, je n'y arrive pas, la syntaxe n'est pas conforme
la ligne de se met en rouge.

VB:
If FichierExiste(CheminFichier & NomFichier) = True Then
            
            Application.ExecuteExcel4Macro "SOUND.PLAY(,""C:\Windows\Media\Alarm10.wav"")"
            
            MaRep = MsgBox(NomFichier & vbCrLf & "existe déjà dans le dossier ci-dessous :" & vbCrLf & CheminFichier & vbCrLf & vbCrLf & "                   Faut-il ÉCRASER le fichier existant ?", vbYesNo, "ARCHIVAGE du devis")
            
            If MaRep = vbNo Then Exit Sub
        
        End If

Merci pour votre aide.
Bien cordialement.
 

Pièces jointes

  • Bouton Non par défaut.jpg
    Bouton Non par défaut.jpg
    32.4 KB · Affichages: 19

TooFatBoy

XLDnaute Barbatruc
Je ne crois pas que ce soit faisable dans une MessageBox, sauf peut-être en trichant un peu avec un SendKeys.

Remarque : je ne l'ai pas mis parce que perso ça m'agace, mais si tu veux que le PC émette un son lors de l'affichage de la MessageBox, tu peux simplement ajouter (de mémoire) un VBinformation, voire un VBcritical.


Au fait, tu n'as pas répondu à Sylvanu : d'où venait exactement le souci ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 316
Membres
102 860
dernier inscrit
fredo67