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 :

Récupérer des données de plusieurs feuilles vers une seule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Récupérer des données de plusieurs feuilles vers une seule
    Bonjour !

    Je suis confrontée à un besoin avec Excel que je n'ai pas les compétences pour résoudre, car je ne suis pas développeur professionnel et je ne sais pas programmer avec VBA (je suis capable de copier/coller intelligemment des propositions, et d'adapter les formules). Si ma demande est déplacée, merci de ne pas vous énerver contre moi et si possible de m'indiquer où je peux trouver.

    Je suis professeur (dans le secondaire) et je cherche un moyen d'évaluer mes élèves par compétences, en attribuant des scores pour chaque compétence. Je crée (à l'aide d'un .xlt) un classeur .xls par évaluation, dans lequel une macro (trouvée ici http://www.gcexcel.com/creer-des-feu...lon-un-modele/) me crée un onglet par élève en suivant un tableau modèle. Jusque là pas de problème.

    Le problème c'est que du coup, les résultats de chaque élève sont sur des onglets différents. Je voudrais donc les rapatrier sur un même onglet. Ils apparaissent toujours dans les mêmes cellules (M26 pour la note sur 20 et D7 à J7 pour les scores par compétences). En d'autres termes, je veux obtenir sur la feuille 1 le résultat qui apparait sur la capture d'écran ci-jointe (pour laquelle j'ai travaillé à la main). Je voudrais automatiser le processus, via une macro. Nom : mhw_excel.jpg
Affichages : 7008
Taille : 148,6 Ko

    Je sais que je peux passer par l'enregistreur de macro mais je voudrais éviter d'avoir à enregistrer en dur, dans la macro, le nom des élèves (= le nom des onglets).

    J'ai donc deux questions :
    - Dans la fonction ='ABRICOT Jean'!M26, comment remplacer 'ABRICOT Jean' par une variable qui récupère le nom de l'onglet (contenu dans la cellule de la colonne A)
    - Comment coder la boucle pour éviter une multiplication de lignes (à laquelle je me résoudrais si c'est trop compliqué pour moi, je rappelle que je ne sais pas coder...)

    Merci d'avance à ceux qui pourront me rendre ce service.
    Marie-Hélène

  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 040
    Points
    20 040
    Par défaut
    Bonsoir,

    une simple formule en B5 :
    et tu recopie vers le bas ensuite ...

  3. #3
    Candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour cette proposition; mais j'ai un #REF! dans la cellule B5 quand je copie cette formule. Quand je tente la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Range("B5").Formula = "='ABRICOT Jean'!M26"
        Range("B6").Formula = "='BANANE Marc'!M26"
    fonctionne,
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B5").Formula = "=Indirect(A5&"!M26")"
    me renvoie le message "erreur de compilation : attendu : fin d'instruction", le point d'exclamation étant sélectionné.

    Je continue à investiguer, mais je crois que là j'atteins les limites de ce que je peux faire (ça fait une semaine que je planche sur ce problème il serait plus sage de renoncer, mais pour ce qui est de faire un code propre, "renoncer" est un gros mot !).

    Merci en tous cas;
    Marie-Hélène

  4. #4
    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 040
    Points
    20 040
    Par défaut
    bonsoir,

    Je vous ai donné une formule il suffit de la saisir dans la cellule il n'est pas question de macro...




    Pour une macro je vous propose celle-ci à mettre dans le code de la feuille Liste , le déclenchement de la macro est automatique à l'activation de la feuille liste :

    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
    Option Explicit
    '
    ' Code à mettre dans feuille liste
    ' Génére liste d'éléve est met à jour des notes ...
    Private Sub Worksheet_Activate()
        Dim sh As Worksheet
        Dim shListe As Worksheet
        Dim shModele As Worksheet
     
        Dim ilg As Integer 'ligne ou écrire
        ilg = 5 ' On commence sur la ligne 5
        Set shListe = ThisWorkbook.Sheets("liste") ' Variable pointant sur feuille destination de la liste
        Set shModele = ThisWorkbook.Sheets("Modele") 'Feuille modèle variable utilisée pour identifier cette feuille et ne rien faire lorsque c'est son tour
        For Each sh In ThisWorkbook.Worksheets 'Boucle sur toutes les feilles du classeur
            If sh.Name <> shListe.Name And sh.Name <> shModele.Name Then '"Saute" les feuilles modéle et lise
                shListe.Cells(ilg, 1) = sh.Name
                shListe.Cells(ilg, 2) = sh.Range("M26")
                ilg = ilg + 1
            End If
        Next
    End Sub

  5. #5
    Candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonsoir !

    Citation Envoyé par bbil Voir le message
    Je vous ai donné une formule il suffit de la saisir dans la cellule il n'est pas question de macro...
    J'avais bien compris, mais le #REF! m'avait incité à quelques expériences ... :-)



    Pour une macro je vous propose celle-ci à mettre dans le code de la feuille Liste , le déclenchement de la macro est automatique à l'activation de la feuille liste :
    Magique ! :-)
    Je n'ai eu besoin que d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                shListe.Cells(ilg, 4) = sh.Range("D7")
                shListe.Cells(ilg, 5) = sh.Range("E7")
                shListe.Cells(ilg, 6) = sh.Range("F7")
                shListe.Cells(ilg, 7) = sh.Range("G7")
                shListe.Cells(ilg, 8) = sh.Range("H7")
                shListe.Cells(ilg, 9) = sh.Range("I7")
                shListe.Cells(ilg, 10) = sh.Range("J7")
    où il faut, j'ai retiré le déclenchement automatique (peut-être le remettrais-je plus tard), je déclenche par un bouton sur la feuille liste.
    Et ça fonctionne parfaitement ! c'est peut-être pas très joli mais au moins ça fait ce que je voulais et je saurai y revenir si j'ajoute une ligne ou une colonne quelque part.


    :-) Je ne pensais pas qu'il faudrait une formule aussi "chargée" et il n'y avait aucune chance que je la code moi-même, alors vous me rendez un immense service ! je ne pourrai pas vous renvoyer l'ascenseur dans ce domaine, mais je vous envoie mille bénédictions :-)

    Marie-Hélène


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

Discussions similaires

  1. [XL-2007] Recap des Données de plusieur feuilles sur une seule
    Par Mckouar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/10/2013, 21h35
  2. [XL-2003] Compilation des données de plusieurs feuilles en une seule?
    Par USnico dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2009, 18h08
  3. Réponses: 2
    Dernier message: 22/12/2008, 18h29
  4. Importer des données de 250 feuilles vers une seule
    Par Bryan78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/04/2008, 16h18
  5. copier des plages variables de plusieurs feuilles vers une seule
    Par irene15 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 22/06/2007, 13h44

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