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 :

Vérification de présence du fichier avant enregistrement [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2021
    Messages : 6
    Par défaut Vérification de présence du fichier avant enregistrement
    salut a tous, dans le cadre de mon boulot je suis chargé de développer une gestion d'approvisionnement d'articles.
    j'ai donc un classeur dans lequel j'ai des "part number" et un "indice" qui forment ma référence, je met ca dans une variable et ca me sort un qrcode et un code barre dans une nouvelle feuille.

    j'ai ensuite fait en sorte que cette nouvelle feuille d'enregistrer au format pdf chaque ref accompagné de son qrcode et code barre pour pouvoir envoyer ca a mon fournisseur au moment de la commande comme ca il colle directement mon étiquette sur le produit.

    je rencontre un problème car j'ai 899 ref potentielles et ca ne peut qu'augmenter, quand je lance la macro il me réenregistre chaque fichier et ca prend énormément de temps donc je voudrais faire en sorte que ma macro vérifie la présence du fichier pdf avant d'enregistrer et c'est la que je cale.
    comme le nom de fichier change a chaque ref je ne sais pas comment faire.

    voici mon code
    ci y'a besoin de plus merci de me le dire
    PS: il y a une semaine je n'avais aucune connaissance en VBA et j'ai pas mal recherché mais je n'ai peut être pas la bonne logique pour comprendre

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Sub EnregistreEtiquette()
     
    '******************************************************************************************************************************************************************************************
    'I. DEBUT DECLARATION DES VARIABLE*********************************************************************************************************************************************************
    '******************************************************************************************************************************************************************************************
        Dim Chemin_Dossier_str As String
        Dim Part_Number_str As String
        Dim Indice_str As String
        Dim Ref_Etiquette_str As String
        Dim Release_str As String
        Dim Nom_Fichier_str As String
     
        Dim Ligne_int As Integer
        Dim Derniere_Ligne_int As Integer
     
        Dim Fichier_Existe_bool As Boolean
    '******************************************************************************************************************************************************************************************
    'II. CREATION BOUCLE DE GENERATION DES ETIQUETTES******************************************************************************************************************************************
    '******************************************************************************************************************************************************************************************
        'on cherche la derniere ligne du tableau des appro
        Derniere_Ligne_int = ThisWorkbook.Sheets("APPRO").Range("A65536").End(xlUp).Row
     
        'on crée une boucle entre la ligne 27 et la derniere du tableau
        For Ligne_int = 27 To Derniere_Ligne_int    
     
     
     
        'on lit les variables de la feuille appro
        Release_str = ThisWorkbook.Sheets("APPRO").Cells(Ligne_int, 10).Value
        Part_Number_str = ThisWorkbook.Sheets("APPRO").Cells(Ligne_int, 8).Value
        Indice_str = ThisWorkbook.Sheets("APPRO").Cells(Ligne_int, 9).Value
     
        'on vérifie dans Si la variable release est ok
        If Release_str = "OK" Then
     
        'si release ok alors on verifie si il y a un indice
        If Indice_str <> "" Then
     
        'si il y a un indice alors on ecrit dans la variable ref etiquette le part number "-" indice
        Ref_Etiquette_str = Part_Number_str & "-" & Indice_str
        Else
     
        'si pas d'indice on laisse juste le part number dans la variable ref etiquette
        Ref_Etiquette_str = Part_Number_str
        End If
     
     
        'on ecrit la variable Ref_étiquette_str dans la feuilleetiquette template
        ThisWorkbook.Sheets("TEMPLATE etiquette").Range(" B3 ").Value = Ref_Etiquette_str
     
        'Nom de dossier
        Chemin_Dossier_str = "G:\XXXXXXXXXX\XXXXXX\XXXXXXXXXXX\XXXXXXXXX\XXXXXXXXX\XXXXXXXXXXXXXXX\3_Dossier_étiquettes_QRcode\"
     
        'Enregistrement au format PDF
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        Chemin_Dossier_str & Range("B3").Value & ".pdf", quality:= _
        xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
        from:=1, To:=1, openafterpublish:=False
     
        Else
        'si release n'est pas ok on passe
        End If
     
        Next
     
    End Sub

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour vérifier si un fichier existe, vous pouvez utiliser la fonction Dir en indiquant le chemin complet à son argument. Si la fonction renvoie une chaîne vide, cela signifie que le document n'est pas présent dans ce répertoire
    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
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2021
    Messages : 6
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Pour vérifier si un fichier existe, vous pouvez utiliser la fonction Dir en indiquant le chemin complet à son argument. Si la fonction renvoie une chaîne vide, cela signifie que le document n'est pas présent dans ce répertoire

    merci pour cette réponse, j'ai trouvé des informations sur la fonction DIR et LEN mais je n'arrive pas a l'appliquer a ma situation (manque de logique sur ce coup la).
    j'arrive pas a faire une recherche pour une référence variable.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 682
    Par défaut
    Bonjour,

    Citation Envoyé par alexlates Voir le message
    j'arrive pas a faire une recherche pour une référence variable.
    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    chemin ="C:/monrépertoire/"
    fichier="monclasseur.xlsx"
    If Len(Dir(chemin & fichier)) > 0 Then MsgBox "le fichier existe"

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2021
    Messages : 6
    Par défaut
    bonjour halaster08, dans ton exemple le nom du fichier est fixe, comment le faire avec un nom qui change à chaque ligne de ma boucle FOR ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 682
    Par défaut
    Citation Envoyé par alexlates Voir le message
    bonjour halaster08, dans ton exemple le nom du fichier est fixe, comment le faire avec un nom qui change a chaque ligne de ma boucle FOR ?
    Il suffit de mettre le nom du classeur a l'intérieur de la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    chemin ="C:/monrépertoire/"
    for i = 1 to 10
    fichier="monclasseur" & i & ".xlsx"
    If Len(Dir(chemin & fichier)) > 0 Then MsgBox "le fichier existe"
    next i

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Dans ton code, tu as déclaré une variable Nom_Fichier_Str... Autant t'en servir, dès lors, surtout que tu as déjà variabilisé le nom de fichier dans ton code, puisque tu vas le chercher dans une cellule => Chemin_Dossier_str & Range("B3").Value & ".pdf". Dès lors, il te reste à affecter cette chaine concaténée à une variable pour tester l'existence du fichier et ne réaliser l'export que si le fichier n'existe pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          Chemin_Dossier_str = "G:\XXXXXXXXXX\XXXXXX\XXXXXXXXXXX\XXXXXXXXX\XXXXXXXXX\XXXXXXXXXXXXXXX\3_Dossier_étiquettes_QRcode\"
          Nom_Fichier_str = Chemin_Dossier_str & Range("B3").Value & ".pdf"
          'Enregistrement au format PDF
          If Dir(Nom_Fichier_str) = "" Then
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            Nom_Fichier_str, quality:= _
            xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
            from:=1, To:=1, openafterpublish:=False
          End If

    Perso, je variabiliserais aussi le nom du dossier, tant qu'à faire
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2021
    Messages : 6
    Par défaut
    merci beaucoup Pierre fauconnier avec votre aide et un peu de réflexion ca fonctionne, jusqu'à l'erreur 1004, mais ca c'est un autre problème.
    voici le code un peu plus aboutit:

    PS: les XXX dans le chemins c'est pour masqué un peu les infos trop borderline avec mon projet

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Sub EnregistreEtiquette()
     
    '******************************************************************************************************************************************************************************************
    'I. DEBUT DECLARATION DES VARIABLE*********************************************************************************************************************************************************
    '******************************************************************************************************************************************************************************************
        Dim Chemin_Dossier_str As String
        Dim Part_Number_str As String
        Dim Indice_str As String
        Dim Ref_Etiquette_str As String
        Dim Release_str As String
        Dim Nom_Fichier_str As String
     
        Dim Ligne_int As Integer
        Dim Derniere_Ligne_int As Integer
     
    '******************************************************************************************************************************************************************************************
    'II. CREATION BOUCLE DE GENERATION DES ETIQUETTES******************************************************************************************************************************************
    '******************************************************************************************************************************************************************************************
        'on cherche la derniere ligne du tableau des appro
        Derniere_Ligne_int = ThisWorkbook.Sheets("APPRO").Range("A65536").End(xlUp).Row
     
        'on crée une boucle entre la ligne 27 et la derniere du tableau
        For Ligne_int = 550 To Derniere_Ligne_int
     
     
        'on lit les variables de la feuille appro
        Release_str = ThisWorkbook.Sheets("APPRO").Cells(Ligne_int, 10).Value
        Part_Number_str = ThisWorkbook.Sheets("APPRO").Cells(Ligne_int, 8).Value
        Indice_str = ThisWorkbook.Sheets("APPRO").Cells(Ligne_int, 9).Value
     
        'on vérifie dans Si la variable release est ok
        If Release_str = "OK" Then
     
        'si release ok alors on verifie si il y a un indice
        If Indice_str <> "" Then
     
        'si il y a un indice alors on ecrit dans la variable ref etiquette le part number "-" indice
        Ref_Etiquette_str = Part_Number_str & "-" & Indice_str
        Else
     
        'si pas d'indice on laisse juste le part number dans la variable ref etiquette
        Ref_Etiquette_str = Part_Number_str
        End If
     
        'Nom de dossier
        Chemin_Dossier_str = "G:xxxxxxxxxxxxxxxxxx\3_Dossier_étiquettes_QRcode\"
     
        'Nom du fichier
        Nom_Fichier_str = Chemin_Dossier_str & Ref_Etiquette_str & ".pdf"
     
        If Len(Dir(Nom_Fichier_str)) = 0 Then
     
        'on ecrit la variable Ref_étiquette_str dans la feuille etiquette template
        ThisWorkbook.Sheets("TEMPLATE etiquette").Range(" B3 ").Value = Ref_Etiquette_str
     
        'Nom de dossier
        Chemin_Dossier_str = "G:xxxxxxxxxxxxxxxxxxxx\3_Dossier_étiquettes_QRcode\"
     
        'Enregistrement au format PDF
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        Chemin_Dossier_str & Range("B3").Value & ".pdf", quality:= _
        xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
        from:=1, To:=1, openafterpublish:=False
        Else
     
        End If
     
     
        Else
        'si release n'est pas ok on passe
        End If
     
        Next
     
    End Sub

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Et elle est sur quelle ligne, ton erreur 1004?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2021
    Messages : 6
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Et elle est sur quelle ligne, ton erreur 1004?
    j'ai résolu mon erreur 1004, c'était mon chemin qui contenait trop de caractères j'ai donc utilisé ThisWorkbook.Path & pour réduire le chemin et ca fonctionne parfaitement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. verrouillage fichier avant enregistrement
    Par charly013 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/08/2018, 10h00
  2. Script de vérification de présence de fichiers
    Par Invité dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 14/05/2014, 11h28
  3. [XL-2003] Macro pour renommer un fichier avant enregistrement
    Par jayroom dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/04/2012, 08h07
  4. [SSIS] [2K5] vérification de la présence des fichiers
    Par Monstros Velu dans le forum SSIS
    Réponses: 1
    Dernier message: 16/03/2010, 11h54
  5. Vérification de champs dans tableau complexe avant enregistrement
    Par Starneo dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/09/2009, 09h47

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