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 :

Compléter un tableau selon une liste


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut Compléter un tableau selon une liste
    Bonjour,

    J'ai besoin de votre aide.
    Je dispose d'une liste d'utilisateurs associés à une catégorie (sur une première feuille) :
    CAT A TOTO
    CAT B TUTU
    CAT C TOTO
    Je dispose d'une seconde feuille reprenenant ces utilisateurs en colonne A, et ces catégories en ligne 1 de chaque colonne (à partir de B):
    CAT A CAT B CAT C
    TOTO
    TUTU
    Je souhaiterais une macro qui analyse sur la feuille 1 et reporte sur la feuille 2. Je souhaiterais que cette macro passe en revue chaque ligne de la feuille 1 et reporte la catégorie correspondante sur la feuille 2 sur la ligne au nom de l'utilisateur :
    feuille 1 : si TOTO est dans CAT A alors reporté sur la feuille 2 un X sur la ligne TOTO colonne CAT A
    Un utilisateur peut faire partie de plusieurs catégories à la fois, dans ce cas il faudra reporter un X pour chaque catégorie de l'utilisateur.

    En espérant avoir été assez claire,

    Merci de votre aide,
    Ju

  2. #2
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Salut
    prenons l'exemple suivant qui répondra à tes attentes :

    la feuille "ListeUtilisateurs"

    utilisateur	            categorie
    toto1	                   A
    toto2	                   B
    toto1	                   B
    toto1	                   C
    toto2	                   B
    toto3	                   A
    toto1	                   A
    toto2	                   F
    toto3	                   C
    toto2	                   E
    toto4	                   E
    toto3	                   A
    la feuille "synthese" :

       	                     A	                   B	                   C	                   D	                   E	                   F
    toto1	
    toto2	
    toto3	
    toto4	
    toto5	
    toto6	
    toto7	
    toto8	
    
    le code suivant fera l'affaire :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    Sub tt()
        Dim tt As Range
        Dim dico
        Set dico = CreateObject("Scripting.Dictionary")
        rowID = 1
        UserName = 1
        While (UserName <> "")
            UserName = Sheets("ListeUtilisateurs").Cells(rowID, 1)
            Category = Sheets("ListeUtilisateurs").Cells(rowID, 2) & ";"
     
            rowID = rowID + 1
            If UserName <> "" Then
                If Not dico.exists(UserName) Then
                    dico.Add UserName, Category
                Else
                    dico(UserName) = dico(UserName) & Category
                End If
            End If
            t = 0
     
        Wend
     
        lastRowOfSynthese = Sheets("synthese").Cells(.Rows.Count, "A").End(xlUp).Row
        lastColumnOfSynthese = Sheets("synthese").Cells(1, .Columns.Count).End(xlToLeft).Column
     
        For rowID = 2 To lastRowOfSynthese
            UserName = Sheets("synthese").Cells(rowID, 1)
     
            For colID = 2 To lastColumnOfSynthese
                categoryToFind = Sheets("synthese").Cells(1, colID) & ";"
                If dico.exists(UserName) Then
                    If InStr(dico(UserName), categoryToFind) > 0 Then
                        Sheets("synthese").Cells(rowID, colID) = "X"
                    Else
                        Sheets("synthese").Cells(rowID, colID) = "'-"
                    End If
                Else
                    Sheets("synthese").Cells(rowID, colID) = "'-"
                End If
            Next
        Next
     
     
    End Sub
    et donnera :

    	A	B	C	D	E	F
    toto1	X	X	X	-	-	-
    toto2	-	X	-	-	X	X
    toto3	X	-	X	-	-	-
    toto4	-	-	-	-	X	-
    toto5	-	-	-	-	-	-
    toto6	-	-	-	-	-	-
    toto7	-	-	-	-	-	-
    toto8	-	-	-	-	-	-
    ++
    Nico

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/01/2013, 15h30
  2. Comment changer la valeur d'un input selon une liste déroulante
    Par dreyo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/02/2007, 15h22
  3. [JSP] Affichage selon une liste deroulante
    Par cnguyen dans le forum Servlets/JSP
    Réponses: 22
    Dernier message: 21/06/2006, 19h51
  4. [Excel]Ouvrir un tableau avec une liste modifiable
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/05/2006, 09h52
  5. [VBA-E]Création de boutons selon une liste
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/03/2006, 14h31

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