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 :

Exécution d'une macro via personal.xlsb : qu'elle objet ou autre façon de faire


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut Exécution d'une macro via personal.xlsb : qu'elle objet ou autre façon de faire
    Bonjour a vous,


    J'ai présentement des macros qui sont a même les documents de travail. Afin de faciliter la gestion et des mise a jour des modules, j'ai décidé de mettre toute mes macro dans le personal.xlsb qui s'ouvre a chaque fois que excel est déployé.


    Je frappe maintenant un embuche. J'ai des documents (modeles) auquel de demande d'ouvrir un onglet d'un autre fichier copier cette onglet dans le modele et fermé celui-cié


    Étant donné dans ma sub actuel, j'utilise thisworkbook, le code ne semble pas fonctionné (il tente de pointer vers le personal.xlsb, ce qui est logique). Si j'utilise activeworbook, la meme chose se produit.


    ESt-ce qu'il y a un autre objet auquel je devras utilisé où Est-ce qui il y a un autre méthode qui serais moins compliqué d'Avoir mes codes a un seul endroit ???



    Je vous mets le code en question


    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
    sub updatedata()
     
     
     
        Application.ScreenUpdating = False
     
    'Si data exist comme onglet, on le détruit
     
        If sheetExists("data") Then
     
     
        Application.DisplayAlerts = False
        Sheets("data").Delete
        Application.DisplayAlerts = True
     
        End If
     
    'Si le lexique est déjà ouvert le choisir et copier l'onglet data
     
        If IsFileOpen("le nom du fichier") Then
     
           Workbooks("lexique des abréviations.xlsm").Sheets("data").Copy After:=ThisWorkbook.Sheets(3)
           Sheets("Travail").Select
     
        Else
     
    'Si le lexique n'Est pas ouvert, l'ouvrir, copier data et le fermer
     
        Workbooks.Open Filename:="lexique des abréviations.xlsm" 'qui est le fichier auquel contient l'onglet data que je veux copier
        Sheets("data").Copy After:=ThisWorkbook.Sheets(3)
        Sheets("Travail").Select
        Windows("lexique des abréviations.xlsm").Close
     
        End If
     
    End Sub


    merci pour vos suggestions et aides

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Salut,

    pour te faciliter la lecture, il est important que tu précise avant chaque Sheet dans quel workbook tu évolues.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour monsieur André,


    C'Est là mon embuche ie un modele ouvre un fichier ayant le meme nom que le modele + une séquence numérique (modele au format .xltm).


    Donc comment faire alors pour pointer le bon document si j'ai plusieurs fichiers provenant du modèle d'ouvert ???

    EN utilisant les activesheet ou workbook, on pointe le fichier ayant les macro et non celui auquel il lance la macro. Peut-être exist-il un autre objet ou une autre façon de faire qui serais moins compliquer ou engendrais mon de gestion ???

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Je reformule donc

    Utiliser des Sheets dans le vide, c'est contre productif
    passe par une variable de type workbook pour commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Wbk = Workbooks.Open ("lexique des abréviations.xlsm")
    et continue de travailler sur les bonnes occurrences de classeur
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    J'ai fait plusieurs test environ 50différents et j'arrive toujours avec le meme constat



    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
    Sub updatedata()
    '
    ' updatedata Macro
    ' Mise a jour de l'onglet data
    '
    Const wbk_lexique = "\\emplacement du serveur\lexique des abréviations.xlsm"
    Dim wbk_destination As String
    
        Application.ScreenUpdating = False
    
    'Si data exist comme onglet, on le détruit
    
        Workbooks(wbk_destination).Select
        
    
        If sheetExists("data") Then
    
        
        Application.DisplayAlerts = False
        Sheets("data").Delete
        Application.DisplayAlerts = True
    
        End If
    
    'Si le lexique est déjà ouvert le choisir et copier l'onglet data
    
        If IsFileOpen(wbk_lexique) Then
                  
           Workbooks("lexique des abréviations.xlsm").Sheets("data").Copy After:=ThisWorkbook.Sheets(3)
           Sheets("Travail").Select
    
        Else
        
    'Si le lexique n'Est pas ouvert, l'ouvrir, copier data et le fermer
    
        Workbooks.Open Filename:=wbk_lexique
        Sheets("data").Copy After:=Workbooks(wbk_destination).Sheets(3)
        Sheets("Travail").Select
        Windows(wbk_lexique).Close
    
        End If
    
    End Sub

    erreur d'imcopatibilité de type ... je ne peut définir la variable étant donné que le nom du fichier varie ...

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Si j'utilise le this worbooks, je stop a la ligne Sheets("data").Copy After:=ThisWorkbook.Sheets(3) comme a mon code de départ



    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
    Sub updatedata()
    '
    ' updatedata Macro
    ' Mise a jour de l'onglet data
    '
    Const wbk_lexique = "\\emplacement du serveur\lexique des abréviations.xlsm"
    
    
        Application.ScreenUpdating = False
    
    'Si data exist comme onglet, on le détruit
    
        ThisWorkbook.Activate
        
        
    
        If sheetExists("data") Then
    
        
        Application.DisplayAlerts = False
        Sheets("data").Delete
        Application.DisplayAlerts = True
    
        End If
    
    'Si le lexique est déjà ouvert le choisir et copier l'onglet data
    
        If IsFileOpen(wbk_lexique) Then
                  
           Workbooks(wbk_lexique).Sheets("data").Copy After:=ThisWorkbook.Sheets(3)
           ThisWorkbook.Sheets("Travail").Select
    
        Else
        
    'Si le lexique n'Est pas ouvert, l'ouvrir, copier data et le fermer
    
        Workbooks.Open Filename:=wbk_lexique
        Sheets("data").Copy After:=ThisWorkbook.Sheets(3)
        Sheets("Travail").Select
        Windows(wbk_lexique).Close
    
        End If
    
    End Sub

    Donc encore, le code pense toujours que personal.xlsb est mon thisworkbook et non le fichier auquel j'ai exécuté mon code

  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
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu lu et compris la dernière intervention de Jean-Philippe ?
    Cette ligne de code confirme que non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("data").Copy After:=ThisWorkbook.Sheets(3)
    Si j'utilise le this worbooks, je stop a la ligne Sheets("data").Copy After:=ThisWorkbook.Sheets(3) comme a mon code de départ
    Lors de tes prochains messages, merci de nous indiquer le n° de la ligne où a lieu le problème, le numéro du message ainsi que le message d'erreur qui l'accompagne.
    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
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    outre les remarques/conseils judicieux de Jean-Philippe et Philippe,je note que nous ne voyons nul part d'où (et comment) est appelé cette procédure updatedata.
    Donc ma réponse sera générique.

    Sans avoir cherché à diagnostiquer (et surtout comprendre .... vu l'explication confuse) le problème exact, je reste sur les pistes qui ont été tracées.

    Si le souci est de parenter des feuilles (et cellules) à un classeur variable, au sein d'une procédure, alors on la muni tout simplement d'un paramètre obligatoire de type workbook, qui aura pour mission de recevoir l'objet classeur sur lequel on veut travailler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub updatedata(MonClasseur As WorkBook)
     
    With MonClasseur
        .Worksheets("MaFeuille").Range("A1") = "toto"
    End With
    ici, y'a aucune ambiguïté sur le classeur / la feuille / la cellule où on veut travailler

    Et l'appel de la procédure n'est pas plus complexe à mettre en œuvre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Lancement()
    Dim UnClasseur as WorkBook
    Set UnClasseur = Workbooks.Open(CheminClasseur)
    updatedata UnClasseur  ' l'une des 4 manières d'appeler une Sub avec paramètres
    End Sub
    Et ça s'imbrique parfaitement dans une boucle de plusieurs fichiers même !

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Donc pour etre plus générique et possiblement le plus explicite possible

    Mon fichier auquel je veux lancer la macro est modification.xltm (modèle utilisant la macro) pour mon test j'utilise un fichier nommé test modification.xlsm


    Pour appeler la procédure updatedata (J'utilise également la procédure updatecatalogue) au démarage de mon fichier


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
    Application.Run "PERSONAL.xlsb!LAC.updatedata"
    Application.Run "PERSONAL.xlsb!LAC.updatecatalogue"
    End Sub
    ou j'active via un bouton a l'entete de colonne faisant référence a la macro dans le fichier personal.xlsb

    Pour les erreurs j'avais mis en rouge les lignes concerner ... je vois que je vais pré-visualiser le message afin de déterminer le numéro de ligne





    Non je n'ai pas compris 100% du sens de l'intervention de Jean-Philippe .. c'est le pourquoi je frappe possiblement toujours la même embuche. Pour le fichier ayant l'onglet data, c'est correct, je sais comment l'appelé. Pour le fichier ayant le nom variable ... vraiment pas

    Set Wbk = Workbooks.Open ("lexique des abréviations.xlsm")
    Pourquoi le .open apres le nom ... je ne veux pas l'ouvrir si il y est déjà ouvert (je fais un if avec une validation si le fichier est déjà ouvert ou nom)



    Si je fais le code selon mon interprétention de Jean-Philippe, j'arrive à ceci

    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
    Sub updatedata()
    '
    ' updatedata Macro
    ' Mise a jour de l'onglet data
    '
    Const wbk_lexique = "\\emplacement reseau\lexique des abréviations.xlsm"
    Dim wbk_destination As Workbook
     
     
        Application.ScreenUpdating = False
     
    'Si data exist comme onglet, on le détruit
     
        wbk_destination.Activate
     
        If sheetExists("data") Then
     
     
        Application.DisplayAlerts = False
        wbk_destination.Sheets("data").Delete
        Application.DisplayAlerts = True
     
        End If
     
    'Si le lexique est déjà ouvert le choisir et copier l'onglet data
     
        If IsFileOpen(wbk_lexique) Then
     
           Workbooks(wbk_lexique).Sheets("data").Copy After:=wbk_destination.Sheets(3)
           wbk_destination.Sheets("Travail").Select
     
        Else
     
    'Si le lexique n'Est pas ouvert, l'ouvrir, copier data et le fermer
     
        Workbooks.Open Filename:=wbk_lexique
        Workbooks(wbk_lexique).Sheets("data").Copy After:=wbk_destination.Sheets(3)
        wbk_destination.Sheets("Travail").Select
        Windows(wbk_lexique).Close
     
        End If
     
    End Sub
    La ligne 14 me cause un erreur d'exécution 91: Variable objet ou variable de bloc With non définie

  10. #10
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Pour le commentaire de Joe,


    Ce que je comprends c'Est que je devrais mettre un parametre dans ma sub updatedate

    Là c'Est simple ...

    Ou que c'Est complexe dans ma tete, c'Est que le nom du worbook en question est une variable ...

    Donc comment VBA va définir parmis les workbook ouvert c'est lequel le bon fichier ???

    Comment lui dire que le parametre correspond au workbook qui viens d'etre ouvert ou le workbook auquel j'ai appuyer sur un bouton faisant férérence a la macro ???

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour !

    Citation Envoyé par jpvba Voir le message
    La ligne 14 me cause un erreur d'exécution 91: Variable objet ou variable de bloc With non définie
    T'as juste oublié d'initialiser ta variable, elle est vide ‼   Pourtant pas compliqué de vérifier dans la fenêtre Variables locales

    Qui plus est cette variable est inutile, consulter l'aide VBA interne de ThisWorkbook et d'ActiveWorkbook

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour Marc-L.


    Longtime no see !!!


    Effectivement que je sais que la variable est vide ... ce que j'essaie de vous dires c'Est que je ne peux la définir étant donné que je ne connais pas le nom finale du fichier l'utilisant étant donné que son nom risque de varié.


    Pour activeworbook et thisworkbook, c'est ce que j'ai utilisé au début et ca me ramene toujours a mon personal.xlsb, l'endroit ou ce cache mon code et nom le fichier auquel il fait appel a personnal.xlsb


    Donc j''avais un fichier A auquel il avait le code. LE code se cachait dans le fichier B (aucun probleme, tous marche a merveille avec thisworkbook, active workbook)

    Ce que e veux fair c'est prendre le code du A le mettre dans le fichier C pour toujours seulement géré le C. Donc je passe de A à C pour chercher le code de B. Thisworkbook et activeworkbook pointe sur C et non le fichier A.


    On me dit d'utilisé des noms de fichier afin de définir les feuilles. LE fichier B est personal.xlsb, le C lexique des abréviations.xlsm et le A est variable.


    Eux tres simple a définir ...ce que j'ai fait. Je suis toujours embeter car je ne sais pas comment pointé sur le qui est variable et que thisworkbook ne fonctionne pas et activeworkbook non plus.




    Donc ma façon de faire est peut etre en cause. Il est peut etre impossible de passé de A vers C pour aller a B si on ne connais pas toute les noms de workbook ???

  13. #13
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Salut

    à partir de ceci :
    On me dit d'utilisé des noms de fichier afin de définir les feuilles. LE fichier B est personal.xlsb, le C lexique des abréviations.xlsm et le A est variable.
    j'aimerais que tu te crées 3 variables wbkA, wbkB et wbkC, et que tu dégages tous les activeworkbook et thisworkbook pour commencer
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Effectivement que je sais que la variable est vide ...
    Surprenant alors que tu t'étonnes d'avoir une erreur ligne 14 ("La ligne 14 me cause un erreur d'exécution 91")

    ce que j'essaie de vous dires c'Est que je ne peux la définir étant donné que je ne connais pas le nom finale du fichier l'utilisant étant donné que son nom risque de varié.
    Insère une boite de dialogue permettant de sélectionner le fichier au moment de le traiter.
    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

  15. #15
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Bonjour Jean-Philippe, je vas donc essayé de faire mon code avec les 3 variables ...

    ne serais pas plutôt 2 constance et 1 variable ???



    Pour Philippe, je ne suis pas surpris, je ne sais pas comment, voilà tout. On me demande le code d'erreur donc je le sais que la variable est vide mais ne sais pas comment la fixé ... plutôt dire où pointer.

    L'input box pourrais etre effectivement une solution mais elle serais en second choix, étant donné que je présume que c'est faisable de le faire en une seule et unique étape.


    JE continue donc a faire des test selon la méthode de Jean-Philippe et vous reviens sous-peu avec le dénouement.

    mais si je me fit ou plutôt a mon interprétention du commentaire de Marc, j'aurais 2 constance et thisworbook (qui ne fonctionne) pas


    merci pour les commentaires, c'est vraiment apprécié. PArfois il y en a qui sont subtiles ou pas mais étant donné mon niveau, parfois je ne les piges pas du premier coups ou ne sais tous simplement pas quoi faire. Quoiqu'il en soit c'est tres instructif

  16. #16
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Je crois peut-être avoir compris les sous-entendu les non écrits, les échos du vents ...


    Étant donné que je ne peux définir dans mon code d'update (je suis a ma 100eme variante d'Essaie et erreur) devrais-je plutôt définir dans mon code d'appelle ie au code de l'ouverture du classeur thisworkbooks = wbk_destination ...

    je résous mon problème de nom "inconnu" DOnc je set une variable qui est égale a thisworkbooks et bingo






    Sinon je suis pratiquement a la case départ ... essayé avec Dim X as workbook ... ou workbooks ou string ... tout les déclinaison possible. une différente à la fonction que l'on demande le chemin ... ou la même où que j'ai seulement besoin du nom du workbook, etc ...


    je crois sérieusement avoir trouvé une piste de solutions ....

  17. #17
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Bon, un exemple pour commencer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Const STR_LEXIQUE ="\\emplacement reseau\lexique des abréviations.xlsm"
    Dim wbk_lexique As Workbook
    Set wbk_lexique = Application.Workbooks.Open(STR_LEXIQUE)
    ...
    wbk_lexique.Close
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  18. #18
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    J'ai tenté ce que je croyais etre la solution ... un peu ce que Philippe ma fait "ouvrir les yeux"

    Ca fonctionne pour la mise a jour l'hors de l'ouverture du workbooks.


    Mais il arrive en cours de route, je force une mise a jour à l'aide d'un bouton, c'est à ce moment là que je tombe dans un autre embrouille, je ne peux définir le paramêtre dû moins jAi essayé de le définir par d'autre chose si ma variable est Nothing mais sans succès. Il défini encore dans cette situation le Thisworkbook comme étant le personal.xlsb


    Donc j'en déduis que la seul façon de procédé est d'avoir un objet qui appellerais le fichier d'origine d'appel de la procédure et nom auquel elle a été exécuté ou bien le code de JeanPhilippe.


    Je vais faire des test demain durant la journée !!!


    merci a vous encore une fois !!!


    amicalement


    jpvba

  19. #19
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 529
    Points : 324
    Points
    324
    Par défaut
    Re bonjour a vous,

    Sans surprise, j'arrive a cela


    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
    Sub updatedata()
     
    Const STR_LEXIQUE = "\\emplacement réseau\lexique des abréviations.xlsm"
    Dim wbk_lexique As Workbook
    Set wbk_lexique = Application.Workbooks.Open(STR_LEXIQUE)
     
    Dim wbk_destination As Workbook
     
     
     
        'Application.ScreenUpdating = False
     
    'Si data exist comme onglet, on le détruit
     
        wbk_destination.Activate
     
        If sheetExists("data") Then
     
     
        Application.DisplayAlerts = False
        wbk_destination.Sheets("data").Delete
        Application.DisplayAlerts = True
     
        End If
     
    'Si le lexique est déjà ouvert le choisir et copier l'onglet data
     
        If IsFileOpen(STR_LEXIQUE) Then
     
           wbk_lexique.Sheets("data").Copy After:=wbk_destination.Sheets(3)
           wbk_destination.Sheets("Travail").Select
     
        Else
     
    'Si le lexique n'Est pas ouvert, l'ouvrir, copier data et le fermer
     
        wbk_lexique
        wbk_lexique.Sheets("data").Copy After:=wbk_destination.Sheets(3)
        wbk_destination.Sheets("Travail").Select
        wbk_lexique.Close
     
        End If
     
    End Sub
    LA variable wbk_destination n'est pas défini et je ne peux le définir étant donné que le nom et l'emplacement du fichier est variable ...


    Si j'ajoute un set .. pas plus de résultats ...


    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
    Sub updatedata()
     
    Const STR_LEXIQUE = "\\emplacement réseau\lexique des abréviations.xlsm"
    Dim wbk_lexique As Workbook
    Set wbk_lexique = Application.Workbooks.Open(STR_LEXIQUE)
     
    Dim wbk_destination As Workbook
    Set wbk_destination = Application.Workbooks.Open(wbk_destination)
     
     
        'Application.ScreenUpdating = False
     
        wbk_destination.Activate
     
    'Si data exist comme onglet, on le détruit
     
     
     
        If sheetExists("data") Then
     
     
        Application.DisplayAlerts = False
        wbk_destination.Sheets("data").Delete
        Application.DisplayAlerts = True
     
        End If
     
    'Si le lexique est déjà ouvert le choisir et copier l'onglet data
     
        If IsFileOpen(STR_LEXIQUE) Then
     
           wbk_lexique.Sheets("data").Copy After:=wbk_destination.Sheets(3)
           wbk_destination.Sheets("Travail").Select
     
        Else
     
    'Si le lexique n'Est pas ouvert, l'ouvrir, copier data et le fermer
     
        wbk_lexique
        wbk_lexique.Sheets("data").Copy After:=wbk_destination.Sheets(3)
        wbk_destination.Sheets("Travail").Select
        wbk_lexique.Close
     
        End If
     
    End Sub

  20. #20
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Hello,

    ton wbk_destination c'est ton classeur qui sort d'où ? il est sélectionné plus tôt dans ton processus ? il est forcément le classeur actif au moment de son utilisation ?

    En fonction de cette info, on te donnera le code le plus adéquat
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Exécuter une MACRO de Personal.xlsb
    Par vr_brandon dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/03/2013, 15h27
  2. Réponses: 0
    Dernier message: 07/10/2009, 12h38
  3. Exécuter une macro via commandButton
    Par lolonico dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/08/2008, 14h25
  4. execute une macro via vba sous access
    Par nes dans le forum Access
    Réponses: 4
    Dernier message: 29/03/2006, 00h15
  5. Allongement d'uin temps d'exécution d'une macro
    Par avanrill dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2006, 20h29

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