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 :

Macro complémentaire et nom feuille active d'un autre classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Macro complémentaire et nom feuille active d'un autre classeur
    Bonjour,
    J'utilise une macro complémentaire (.xlma) pour déclencher des actions à l'enregistrement de tout mes classeurs.

    Des classeurs que je sauve, ce qui déclenche ma macro complémentaire (contenue dans un autre classeur .xlma) avec aftersave, je souhaiterais récupérer les:

    - chemin du classeur;
    - nom du classeur;
    - nom de la feuille de calculs (active ou affichée);
    - l'adresse de la cellule active;
    - la valeur contenue dans la cellule active.

    Pour les inscrire dans une cellule d'un autre classeur (différent du classeur sauvegarder et du .xlma).

    Aucun problème sauf pour le nom de la feuille de calcul qui est vide (je pense que la macro .xlma ne connaît que les feuilles du classeur .xlma) et mon code plante avec une erreur 91.

    Existe-t-il un moyen de remédier à ce problème?


    MERCI BEAUCOUP D'AVANCE POUR TOUT COUP DE MAIN!!!!!

  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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sans publier le code utilisé dans le fichier xlam, cela va être compliqué de vous aider
    Avez-vous essayé d'utiliser les objets ActiveWorkbook, ActiveSheet
    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
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Private Sub xlApp_WorkbookAfterSave(ByVal Wb As Workbook, ByVal Success As Boolean)
        Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("A" & Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("A500000").End(xlUp).Offset(1, 0).Row).Value = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & "/" & ActiveCell.Address & "/" & ActiveCell.Value
     
        Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("G" & Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("A500000").End(xlUp).Row).Value = Now
        Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("H" & Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("A500000").End(xlUp).Row).Value = "SAUVEGARDE"
        Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("L" & Workbooks("OutilsRechercheetSuivi2.xlsm").Worksheets("MOUVEMENTS").Range("A500000").End(xlUp).Row).Value = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
     
    end sub
    Dans le du .xlam,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("OutilsRechercheetSuivi2.xlsm")
    , le classeur de destination.

    fonctionne sans aucun problème

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Je ne sais pas trop manipuler les objets

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Il n'y a vraiment aucune piste?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Salut,

    Quand on travaille avec plusieurs classeurs, l'important est de bien savoir de quoi on parle, histoire de ne pas être dépendant du contexte.

    Sauf raison justifiées, exit les appels à ActiveWorkbook, ActiveCell; Selection ect ...
    Exit les appels à Worksheets, Range, Cells ect ... sans respecter leur parentalité.

    Il va te falloir pleinement qualifier les références des objets que tu manipules.
    Exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Worksheets("Feuil5").Select    '// Ko, on a aucune garantie que la feuille nommée Feuil5 appartient au classeur actif.
     
    '//---------------------------------------------------
     
    Dim Ws As Excel.Worksheet
    Set Ws = ThisWorkbook.Worksheets("Feuil5")    '// Ok, on référence la feuille nommée Feuil5 du classeur exécutant le code.
     
    '//---------------------------------------------------
     
    Dim Wb As Excel.Workbook
    Set Wb = application.Workbook.Add("c:\.............\MonClasseur.xlsx")    '// Ok, on ouvre un nouveau classeur et récupère sa référence
     
    Dim Ws As Excel.Worksheet
    Set Ws = Wb.Worksheets("Feuil5")    '// Ok, on référence la feuille nommée Feuil5 du classeur MonClasseur.xlsx
    Concernant les données que tu souhaites, à condition que tu aies préalablement récupéré la référence du classeur:
    1) chemin du classeur: C'est la propriété Path ou FullName du classeur ciblé.
    2) nom du classeur: C'est la propriété Name du classeur ciblé.
    3) nom de la feuille de calculs (active ou affichée): Pas trop le choix: ActiveSheet.Name (a condition d'activer le classeur et la feuille).
    4) l'adresse de la cellule active: Voir point #3, c'est la propriété Address de l'objet ActiveCell
    5) la valeur contenue dans la cellule active: Voir point #3, c'est la propriété Value de l'objet ActiveCell

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Je comprends ta réponse et vais appliquer mais je crois que ce qui pose problème c'est que tout dans mon code .xlma de ma macro complémentaire fait référence au dit classeur .xlma, non?
    ook (Sauf à y faire référence comme tu indiques???? Parce que j'ai essayé:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Dim wbsh As Worksheet, wbk As Workbook
     
       Set wbk = ActiveWorkbook
     
       Workbooks(wbk.Name).Activate
     
    Set wbsh = Workbooks(wbk).Sheets(ActiveSheet.Name)
     
    worksheets(wbsh.name).activate
    sans plus de succès

    qui n'est peut-être pas très précis sur la syntaxe???

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    plante sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbsh = Workbooks(wbk).Sheets(ActiveSheet.Name)
    quand je mets le curseur sur la ligne j'ai

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Pour info, le classeur est déjà ouvert puisque j'essaye de le sauver

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim wbsh As Worksheet, wbk As Workbook        '// Ok, cependant, par soucis de lisibilité, on préférera une déclaration par ligne
    Set wbk = ActiveWorkbook        '// Ok
     
    '// Workbooks(wbk.Name).Activate        '// Ko et inutile, tu référence déja le classeur actif
     
    '// Set wbsh = Workbooks(wbk).Sheets(ActiveSheet.Name)    '// Ko, la méthode Workbooks attend un nom sous forme de châine et non une référence
                                                              '// Idem pour la methode Sheets
                                                              '// ActiveSheet.Name est redondant, utilise directement ActiveSheet
    Set wbsh  = ActiveSheet
     
    '// worksheets(wbsh.name).activate    '// Ko, wbsh.Name est redondant, utilise directement la méthode Activate de l'objet Worksheet
    wbsh.Activate
    Question subsidiaire:
    Comment est ouvert le classeur ?
    il serait préférable de récupérer explicitement la référence vers ce dernier.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Ce sont des classeurs qui sont ouverts en permanence sur mon PC, sur lesquels je travaille régulièrement et que je sauvegarde à chaque fois que j'y travaille.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    En fait, ce sont tous les classeurs sur lesquels je travaille, ceux ouverts en permanence et d'autres que j'ouvre par double clic dans les dossiers quand j'en ai besoin.

    A chaque fois que j'enregistre un classeur la macro complémentaire se déclenche.

Discussions similaires

  1. [XL-2016] Enregistrer feuille active dans un autre classeur
    Par Samiess dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/07/2019, 21h56
  2. [XL-2003] nom feuille active
    Par jean30 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2018, 11h36
  3. [XL-2013] Macros : Copie image, nom feuille
    Par julie.farsy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/12/2014, 05h48
  4. Macro de transfert de données d'une feuille active vers 1 autre
    Par M8407108 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/12/2007, 16h27
  5. Rapidité Macro lié à la feuille active
    Par conconbrr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/08/2006, 17h40

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