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 :

Sélection des feuilles d'un classeur


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Sélection des feuilles d'un classeur
    Bonjour,

    Tout d'abord pardonnez ma "jeunesse" dans le domaine VBA.

    Je souhaite sélectionner automatiquement les différentes feuilles afin de récupérer les données situées dans les cellules de coordonnées identiques afin de les intégrer dans une feuille "Master". Exemple :

    Feuille "Master"; feuille"A"; feuille"B"; feuille"C";..... feuille"vide"; dans les différentes feuilles (A,B,...) les données à récupérer sont situées par exp en "G5" et devront être reportées dans la feuille "Master" en A1, A2, A3..., la feuille "vide" servant de marqueur d'arrêt. J'avais pensé à une solution du genre
    ' worksheets"A".select ' puis ' worksheets"A+1".select ' ... mais ça ne marche pas. svp des pistes, merci et bonne soirée

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    manque un peu de clarté.. que ve tu faire exactement ( selectionner je pense
    pas...) , copier des données présente dans la cellule G5 des feuilles "Master","A","B"... vers les cellules A1,A2,A3... dans la feuille "Master"..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub MAcopie()
     Dim sh As Worksheet
     Dim i As Integer
     i = 1 'Numero de ligne initial dans feuille MAster
     
     For Each sh In ActiveWorkbook.Worksheets 'Pour toutes le feuilles du classeur actif
       Sheets("Master").Cells(i, 1) = sh.Range("G5")
       If StrComp(sh.Name, "vide", vbTextCompare) = 0 Then Exit For 'Terminé sur feuille au nom "vide"
      i = i + 1 'incremente numero de ligne
     Next
    End Sub

  3. #3
    Membre habitué Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 198
    Points
    198
    Par défaut
    Je pense que bbil a bien répondu à ton interrogation, je voulais juste insister sur un point que tu as évoqué.
    Tu demandais comment sélectionner des pages pour effectuer une opération qui n'avait rien à voir.

    Sache donc qu'en VBA il est inutile et même inopportun dans la majeure partie des cas de sélectionner des objets. Tu peux effectuer directement les opérations ce qui te permet de gagner n temps de calcul très significatif.

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci bbill,
    J'étudie et adapte ton code, entre nous je découvre pleins de possibilités et je vais y "plonger" car je suis curieux. Avant je faisais du pas à pas mais c'était lourd.
    voici un exemple de mes "études" :
    http://www.developpez.net/forums/att...1&d=1158676126

    Je vais continuer à développer d'autres appli dans le même domaine...

    Question liée (pour conconbrr également) : quelle bonne littérature pouvez-vous me conseiller ?

    merci encore et salut.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre habitué Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 198
    Points
    198
    Par défaut
    Moi je peux te conseiller un excellent ouvrage que je viens d'acheter :
    VBA pour Excel 2002 de Stephen Bullen, John Green, Rob Bovey et Robert Rosenberg qui pour la modique somme de 50€ (y a tt de même 1200pages!) te fournira toutes les informations que tu as toujours voulu savoir sur VBA.
    P.S:c'est aux éditions wrox

  6. #6
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci conconbrr pour l'info,

    bbil, j'ai modifié et appliqué le code donné, ça fonctionne presque comme souhaité, seulement toutes les feuilles de mon classeur xl sont prises en compte donc comment ne sélectionner qu'une partie d'entre-elles ? Actuellement les 2 premières feuilles sont constituées de données numériques n'entrant pas dans l'élaboration du programme souhaité, la troisième feuille est un graphe c'est donc à partir de la 4ème feuille que je souhaite débuter. J'avais pensé introduire une ligne du genre
    ' Sheets("A").Select ' ou ' Worksheets("A").Select '
    avant la ligne
    ' For Each sh In ActiveWorkbook.Worksheets '
    mais ça ne marche pas, je me retrouve avec la feuille "A" ouverte ! Sinon les données récupérées sont bien dans la feuille "Master", que je dois ouvrir pour les voir.

    merci pour les conseils et bonne soirée

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    (ne me parle pas de select ou d'activate... cela me donne des boutons.. )


    tu peu faire un test sur le nom de la feuille avec sh.Name et par exemple ne pas faire le traitement pour certaines feuilles...

    ou si tes feuilles sont dans un certain ordre et le traitement à effectuer concerne les feuilles 4 à la derniére du classeur tu peu aussi essayer :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub MAcopie()
     Dim sh As Worksheet
     Dim i As Integer
     dim j as integer 'Index numéro de feuille
     i = 1 'Numero de ligne initial dans feuille MAster
     
     For j = 4 to ActiveWorkbook.sheets.count 
       set sh = sheets(j) 'Comme cela pas besoin de modifier le reste du code
       Sheets("Master").Cells(i, 1) = sh.Range("G5")
       If StrComp(sh.Name, "vide", vbTextCompare) = 0 Then Exit For 'Terminé sur feuille au nom "vide"
      i = i + 1 'incremente numero de ligne
     Next
    End Sub

  8. #8
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Grand merci bbil,
    Ça marche super et pour un "ancien" comme moi c'est plutot satisfaisant. A travers ce petit pb, j'ai appris bien des choses, donc je vais continuer les études sur le VBA en bouquinant. A très bientôt et bonne journée.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/03/2008, 16h10
  2. liaisons des feuilles dans un classeur excel
    Par ritonetmumu dans le forum Excel
    Réponses: 4
    Dernier message: 07/12/2007, 19h03
  3. Liste des noms des feuilles d'un classeur
    Par marc56 dans le forum Excel
    Réponses: 10
    Dernier message: 22/09/2007, 15h49
  4. Réponses: 9
    Dernier message: 27/07/2007, 08h49
  5. [VBA-E] Ordre des feuilles d'un classeur
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2006, 19h11

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