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 :

Connaître le nom d'origine d'un .xltm après l'avoir ouvert ? [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Connaître le nom d'origine d'un .xltm après l'avoir ouvert ?
    Bonjour à tous et mecci de votre temps et de votre aide.

    J'ai un fichier xltm avec une macro qui s'exécute à l'ouverture (ThisWorkbook.Workbook_Open()).

    Parfois, pour des raisons de développement et de mise au point, j'aimerai empêcher cette macro de s'éxcuter. Je sais que je peux appuyer sur la touche [Shift] pour faire cela mais il faut y penser.
    Donc j'ai fait du code qui vérifie si un fichier nommé MonNomFichier_DoNotAutoexec.txt est présent dans le répertoire.
    MonNomFichier est automatiquement récupéré de ThisWorkbook.Name.
    Note : j'ai besoin d'un nom différent pour chaque fichier car je peux en avoir plusieurs dans le même répertoire et je ne souhaite pas coder en dur le nom du fichier.
    Ce code fonctionne parfaitement pour les fichiers xlsm mais les xltm changent de nom à l'ouverture devenant quelque chose comme MonNomFichier1. et évidement Excel ne trouve pas le MonNomFichier1__DoNotAutoexec.txt.

    J'ai donc modifié mon code qui récupère le nom pour qu'il enlève les chiffres en fin du nom et mon problème est que puis-je faire si le nom du fichier d'origine comporte déjà des chiffres (ex : MonFichier2019.xltm) ?
    On pourrait utiliser Like mais là encore on risque des erreur du à des noms proches.

    Donc y-at'il un moyen pour connaître le nom d'origine d'un xltm ? Un truc du genre ThisWorkbook.OriginialName.

    Mes recherche dans ce sens sur Google n'ont rien données.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Donc y-at'il un moyen pour connaître le nom d'origine d'un xltm ? Un truc du genre ThisWorkbook.OriginialName.
    ceci n'est qu'une idée mais dans ton fichier .XLTM ne peux-tu pas mettre une constante qui contient le nom d'origine ?

    un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const Original_Name As String = " ........... "
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour Igloobel et merci de ta suggestion mais je ne souhaite pas à avoir à renseigner manuellement l'information.

    C'est trop un risque d'oubli.

    Je m'y résoudrait seulement si je n'ai pas d'autre solution.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par marot_r Voir le message
    Bonjour à tous et mecci de votre temps et de votre aide.


    Donc y-at'il un moyen pour connaître le nom d'origine d'un xltm ? Un truc du genre ThisWorkbook.OriginialName.
    .

    A+
    Personnellement, j'essaierais en mettant une propriété personnalisée (CustomProperty en VBA ) au classeur. (il te faudra peut-être une petite moulinette pour l'ajouter et la renseigner dans le classeur.)
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Tout fichier disposent de propretés. Tu peux utiliser un hacheur md5 avec la date un numéro aléatoire etc...

    Si la propriété du fichier et le {MonNomFichier1__DoNotAutoexec.txt} sont identique tu sais quoi faire!

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour à vous.

    @clementmarcotte

    Est-ce qu'on peut envisager une macro qui se déclenche quand je sauvegarde le fichier original en .xltm ?
    Je vais creuser de ce côté.

    @dysorthographie

    Désolé mais je ne comprend pas ta réponse.
    Mon fichier texte a un nom fixe, c'est mon fichier Excel qui change de nom et donc la "liaison" est perdue.
    Peut-être peux-tu élaborer un peu plus ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour à tous.

    J'ai avancé sur l'idée de clementmarcotte et voilà mon code.

    Dans ThisWorkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Option Compare Text 'Rend VBA insensible aux majuscules/minuscules
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Call SetOriginalFileName
    End Sub
    dans mdlDoNotAutoexec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
    Option Compare Text 'Rend VBA insensible aux majuscules/minuscules
     
    'Version 2019-03-27 10h16
    'Suppose que j'ai une feuille nommée "Param" où est stocké la propriété.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Test_DoNotAutoexec()
        Debug.Print DoNotAutoexec
    End Sub
    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
    Public Function DoNotAutoexec() As Boolean
        'Teste si un fichier NomDuClasseur_DoNotAutexec.txt existe dans le répertoire
        Dim result As Boolean
     
        Dim doNotAutoexecFileInfo As New clsInfoFichier_X
        doNotAutoexecFileInfo.repertoire = ThisWorkbook.Path
        doNotAutoexecFileInfo.Nom_Extention = ThisWorkbook.Name
     
        If doNotAutoexecFileInfo.Extention = "" Then
            'C'est un xltm, récupère le nom de la propriété et non du fichier lui-même
            doNotAutoexecFileInfo.Nom_Extention = GetOrignalFileName
        End If
     
        doNotAutoexecFileInfo.Nom = doNotAutoexecFileInfo.Nom & "_DoNotAutoexec"
        doNotAutoexecFileInfo.Extention = "txt"
     
        result = (Dir(doNotAutoexecFileInfo.Repertoire_Nom_Extention) <> "")
     
        Set doNotAutoexecFileInfo = Nothing
        DoNotAutoexec = result
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub SetOriginalFileName()
        Call DeleteOriginalFileName
        Call wsParam.CustomProperties.Add("OrignalFileName", ThisWorkbook.Name)
    End Sub
    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
    Private Sub DeleteOriginalFileName()
     
        Dim cp As CustomProperty
        Dim ws As Worksheet
     
        Dim IsParamFound As Boolean
     
        For Each ws In ThisWorkbook.Worksheets
     
            If ws.Name = "Param" Then
     
                For Each cp In ws.CustomProperties
     
                    If cp.Name = "OrignalFileName" Then
                        cp.Delete
                        IsParamFound = True
                        Exit For
                    End If
     
                Next cp
     
            End If
     
            If IsParamFound Then
                Exit For
            End If
     
        Next ws
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub DisplayCustomProperty()
     
        Dim cp As CustomProperty
     
        For Each cp In wsParam.CustomProperties
            Debug.Print cp.Name, cp.Value
        Next cp
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Test_GetOrignalFileName()
        Debug.Print GetOrignalFileName
    End Sub
    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
    Public Function GetOrignalFileName() As String
        Dim result As String
     
        Dim cp As CustomProperty
     
        Dim IsParamFound As Boolean
     
        For Each ws In ThisWorkbook.Worksheets
     
            If ws.Name = "Param" Then
     
                For Each cp In ws.CustomProperties
     
                    If cp.Name = "OrignalFileName" Then
                        result = cp.Value
                        IsParamFound = True
                        Exit For
                    End If
     
                Next cp
     
            End If
     
            If IsParamFound Then
                Exit For
            End If
     
        Next ws
     
        GetOrignalFileName = result
    End Function
    Mais si la solution de dysorthographie ne nécessite pas tout ce code, je suis toujours intéressé.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Voila ce dont je voulais parler.

    Nom : Sans titre.png
Affichages : 175
Taille : 25,3 Ko

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    OK donc c'est la même idée que clementmarcotte au niveau du classeur.

    Je vais garder ma solution avec la customproperty de la page car elle est moin succeptible d'être modifiée par un humain.

    Merci à vous deux.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour à tous,

    Donc tu oublies d'appuyer sur Shift,
    Tu as peur d'oublier de l'inscrire en dur et tu pars sur une usine à gaz.
    Mais que se passera-t-il si tu oublies d'aller créer ton .txt ou de le supprimer quand tu n'en a plus besoin ? Il te faut une autre macro avec IA pour te le rappeler ou tu as un post-it de prévu ?

    Perso si j'oublie d'appuyer sur Shift, je referme et je recommence... Moins sophistiqué mais ça marche bien aussi
    Désolé, tu as sûrement tes raisons mais je n'ai pas pu me retenir :-)
    eric

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour, remarques pertinentes.

    Il arrive que mes fichiers lancent un tas de choses à l'ouverture et qu'en phase de développement ou de débogage je fasse pas mal d'essai pour valider mes traitements.
    Donc pouvoir paramétrer le démarrage ou pas SANS modifier mon classeur m'est pratique.
    Je le mets en place et je peux me concentrer sur mes autres problèmes.

    Tu as peur d'oublier de l'inscrire en dur et tu pars sur une usine à gaz.
    En fait d'usine à gaz j'ai quand même vu pire.
    Là tout est automatisé donc j'importe le module et je l'utilise.
    Si je change le nom de mon fichier (ce qui arrive assez régulièrement) le nom se change automatiquement.

    Mais j'aurais vraiment apprécié que Excel fournisse une propriété.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. [HSQLDB-JDBC] Connaître le nom des tables de la BD
    Par calogerogigante dans le forum JDBC
    Réponses: 4
    Dernier message: 14/03/2006, 09h59
  2. [PHP-JS] Connaître le nom du bouton submit cliqué
    Par fabrice1596 dans le forum Langage
    Réponses: 6
    Dernier message: 08/03/2006, 08h59
  3. connaître le NOM de la page précédente ... est ce possible ?
    Par jojodunord dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 21/12/2005, 11h19
  4. Réponses: 3
    Dernier message: 01/04/2005, 09h37
  5. Comment connaître le nom de l'ordinateur ?
    Par M.Dlb dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 30/08/2003, 23h03

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