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épartition de données sur plusieurs Onglets [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Par défaut Répartition de données sur plusieurs Onglets
    Bonjour à tous,

    Je vous contacte car je suis débutant en VBA et j'ai du mal à formuler une macro pour mon besoin...
    En effet j'ai beaucoup de critères... En fait sur la Feuil1, il y a un tableau à plusieurs entrées. Et j'aimerais que chaque Ligne soit reportées sur les feuilles suivantes selon certains critères.
    Je vous joins le fichier en question. J'ai simulé le résultat à la main... Si qq'un peut m'aider, ça serait le pied!

    Excel07
    Excel03

    Cordialement,

    Guillaume

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Désolé, mais tes liens ne fonctionnent pas

  3. #3
    Membre confirmé
    Profil pro
    Ostéopathe
    Inscrit en
    Juillet 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ostéopathe

    Informations forums :
    Inscription : Juillet 2010
    Messages : 26
    Par défaut Proposition de marco
    Salut Guillaume

    Je te propose la macro suivante à placer dans un module (si tu ne sais pas encore faire tu appuies sur Alt+F11, l'éditeur VBA s'ouvre et tu clique sur le menu Insertion/Module) :
    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
     
    Option Explicit
     
    'Constantes à modifier si l'ordre de tes colonnes change
    Public Const COL_Matiere As Integer = 1
    Public Const COL_JourDeCours As Integer = 2
    Public Const COL_Debut As Integer = 3
    Public Const COL_Fin As Integer = 4
    Public Const COL_Professeur As Integer = 5
     
     
    Public Function GetCours(Jour As String, Professeur As String, Horaire As Date, Donnees As Range) As String
        'La variable Donnees contient le tableau dans lequel se trouvent les données
        'Il doit contenir 5 colonnes. Les constantes permettent de déterminer l'ordre des colonnes sans avoir à refaire toute la macro
        'Il ne doit contenir que des informations utilisables. La ligne de titre n'a pas à y figurer
        Dim incr As Integer
        Dim Values As Variant
     
        'Récupère les valeurs de la plage de données pour aller plus vite
        Values = Donnees.Value
     
        'Balaie les lignes une à une
        For incr = 1 To UBound(Values)
            'Vérifie si le professeur est celui demandé
            If UCase(Values(incr, COL_Professeur)) = UCase(Professeur) Then
                'Vérifie si le jour est celui demandé
                If UCase(Values(incr, COL_JourDeCours)) = UCase(Jour) Then
                    If Horaire < CDate(Values(incr, COL_Fin)) And Horaire >= CDate(Values(incr, COL_Debut)) Then
                        GetCours = Values(incr, COL_Matiere)
                        Exit For
                    End If
                End If
            End If
        Next
     
    End Function
    Cette macro est une formule à utiliser dans les cellules d'Excel. Il faut lui indiquer un jour, un prof, un horaire et la plage de cellules contenant les données et la fonction renvoie le nom du cours correspondant ou rien si aucun cours n'est trouvé.

    Pour utiliser cette macro, le plus simple est que tu commences par nommer la plage dans laquelle se trouvent les données (ton premier tableau).
    Pour faire ça tu sélectionnes par exemple les cellules Cours!B6:F24, et dans la zone de saisie à gauche de la barre de formule tu tapes Donnees. A partir de maintenant tu peux faire référence à la plage Cours!B6:F24 par le nom Donnees. Donc même si tu change ton tableau de place, du moment que le nom Donnees pointe sur les bonnes cases tu n'as rien à modifier.

    Dans chacune des feuilles de professeurs tu saisis la formule suivante dans la cellule C4 :"=GETCOURS(C$3;$E$1;$B4;Donnees)". La place des $ est importante. Ensuite et tu étires la cellule C4 sur toute la ligne, puis la ligne entière sur toute la hauteur de la colonne afin de dupliquer la formule. Chaque cellule du tableau contient maintenant une formule faisant référence aux bonnes informations. Et ton planning de prof est rempli...

    Tiens moi au courant

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 18
    Par défaut
    Salut M. Trampo,

    Je te remercie bien pour cette réponse! Et te présente mes excuses pour la réponse tardive, je n'avais pas vu le message avant maintenant. En fait, je suis passé plutôt par une formule excel qui fait drôlement bien le boulot.

    Dans tous les cas, je suis sûr que ça pourra toujours servir à quelqu'un!

    Bonne journée et bon week end!

    Ps : Ici la formule excel à tirer sur toutes les cases:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SOMMEPROD((Professeur=$E$1)*(Jours=C$3)*(Début<=$B4)*(Fin>$B4)*(LIGNE(Professeur)))=0;"";INDEX(Cours!$B:$B;SOMMEPROD((Professeur=$E$1)*(Jours=C$3)*(Début<=$B4)*(Fin>$B4)*(LIGNE(Professeur)))))

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

Discussions similaires

  1. [XL-2007] Ajout de ligne sur plusieurs onglets en insérant une donnée
    Par damien.huchette dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/04/2015, 14h25
  2. Réponses: 3
    Dernier message: 09/04/2012, 15h03
  3. Affichage de données sur plusieurs tables
    Par urbalk dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/04/2007, 09h31
  4. Export requete sur excel sur plusieur onglets
    Par Renardo dans le forum Access
    Réponses: 10
    Dernier message: 26/01/2007, 17h13
  5. [VBA-E] Impression page paire sur plusieurs onglets
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 17/02/2005, 15h19

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