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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    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
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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 éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    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
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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 éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    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 éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    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

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

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, 14h27
  2. Réponses: 0
    Dernier message: 07/10/2009, 11h38
  3. Exécuter une macro via commandButton
    Par lolonico dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/08/2008, 13h25
  4. execute une macro via vba sous access
    Par nes dans le forum Access
    Réponses: 4
    Dernier message: 28/03/2006, 23h15
  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, 19h29

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