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 dans classeur actif: gérer le renommage pour la sélection


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Macro dans classeur actif: gérer le renommage pour la sélection
    Bonjour à tous,

    je commence tout juste à me plonger dans l'utilisation d'excel (oui, ma version n'est pas des plus récente mais suffisante )

    Voici mon problème :

    j'ai une feuille principale, baptisée "collecte_donnees.xls", et mon objectif est de récupérer des données prises dans d'autres fichiers excel. En particulier, l'un de ces fichiers s'appelle "source_donnees.xls"

    J'ai crée des macros, qui se lancent depuis la page "Feuil1" de "collecte_donnee.xls". Via
    Workbooks("source_donnees").xls.activate (cette formule est fausse, je ne me souviens plus exactement de celle utilisée, je suis sur un autre pc

    J'utilise également
    Sheets("FeuilX").activate pour passer d'une feuille à l'autre et collecter les données (ici sur la feuilleX) (je ferais d'ailleurs peut etre mieux d'utiliser .Select plutôt que .Activate...)

    Voici ma difficulté :
    je passe régulièrement d'un fichier à l'autre.
    Je prépare les données sur "collecte_donnees", puis je bascule sur "source_donnees" pour faire les recherches qui m'intéressent et enfin je retourne sur "collecte_donnees" pour les afficher à l'écran.
    Le problème est que le fichier "collecte_donnees" est amené à être renommé en fonction du type de recherche que j'y fais. De même, le nombre de feuilles varie, et elles changent de nom.

    En faisant "enregistrer sous", je change le nom de "collecte_donnees" vers "collecte_noms" par exemple. Le souci est que ma macro ignore ce changement, puisque j'utilise Workbooks("collecte_donnees.xls").activate pour sélection le classeur et Sheets("Feuil1").activate pour passer sur la bonne feuille.
    Du coup, à la compilation, j'ai l'air bien bête en étant sur le classeur "collecte_noms", sachant que ma macro cherche à aller sur "collecte_donnees"... Point important : "collecte_..." est le classeur depuis lequel je lance ma macro.

    Comment puis-je faire pour que ma macro reste générique ?
    J'aimerais que ma macro s'adapte au nouveau nom de fichier à l'enregistrement, et donc que ma macro marche dans tous les cas.
    De même, il faudrait que je puisse renommer les feuilles (par exemple de Feuil1 vers Noms_Famille) et que ca n'affecte pas le fonctionnement de ma macro.

    Ainsi, il faudrait que ma macro utilise le nom du fichier, mais sans l'écrire. Il me faudrait aussi utiliser la position des feuilles, mais sans les nommer.

    Comment puis-je faire celà ?

    J'ai parcouru le forum sans succès, et l'aide d'Excel (97 s'il vous plait) est des plus obscures...

    D'avance merci pour votre aide !

    Cyrille

  2. #2
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    bonsoir,

    Cyrikle, un peu vague..

    bon voici un exemple de code :

    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
    Sub yaTest()
    Dim yaWk As Workbook 'Mon classeur
    Dim yaFeuille As Worksheet 'Ma feuille
    Set yaWk = Workbooks.Open("testMac.xls")
    Set yaFeuille = yaWk.Sheets(1) 'Assigne ma variable à ma 1° feuille..
     
    'lecture d'une donnée dans la feuille:
    MsgBox yaFeuille.Range("A1")
     
    'Ecriture d'une donnée dans la feuille :
     
    yaFeuille.Range("A1") = Now 'on pose l'heure en cours dans ma feuille
     
    yaWk.Save  'Sauve mon classeur
    yaWk.Close 'Ferme mon classeur
     
    'Libére les variables
    Set yaWk = Nothing
    Set yaFeuille = Nothing
    End Sub

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour cette réponse !

    Je ne l'ai pas utilisée telle qu'elle, mais elle m'a servi de base à ma macro.

    J'ai stocké Activeworkbook et activesheet dans des variables de stockage (type yaWk et yaFeuille) et je les ai réutilisé.

    Résultat, mon programme ne dépend plus ni du nom du classeur de départ, ni de la feuille active
    Merci encore !

    Cyrille

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Problème ?

Discussions similaires

  1. [XL-2007] Nom Classeur actif avec macro dans le Personal.xlsb
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/05/2015, 11h27
  2. [XL-2010] Déplacement d'un répertoire avec macro dans classeurs
    Par dadaxte dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/08/2013, 15h36
  3. macro pour reporter dans classeur fermé
    Par varik dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/03/2012, 21h04
  4. [Test-Excel] récupération des macros dans un classeur corrompu
    Par SilkyRoad dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/08/2006, 23h22
  5. Réponses: 2
    Dernier message: 10/06/2006, 13h19

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