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 :

Completer un tableau a partir d'une liste. VBS


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Completer un tableau a partir d'une liste. VBS
    Bonjour,

    Je souhaiterai a partir d'une macro pouvoir compléter un tableau a partir de la valeur dans une liste.
    Je vous joint le fichier, vous comprendrez mieux.

    J'avais une fonction pour le faire mais sur un tableau énorme excel plante et j'ai attendu 5 heures de calcul.

    La liste est moins grande, mais je n'y arrive pas, mes exam arrive a grand pas et sans cela je vais me retrouver dans la panade.

    Merci de votre aide
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Quelle fonction as tu utilisé?

    Ci dessous une formule matricielle qui remplit le tableau. (a mettre en C2 de l'onglet Synthèse et à valider par CTRL + MAJ + ENTREE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(INDEX(Liste!$D$2:$D$6;EQUIV(1;(Liste!$A$2:$A$6=Synthese!$A2)*(Liste!$B$2:$B$6=Synthese!$B2)*(Liste!$C$2:$C$6=C$1);0)));"";INDEX(Liste!$D$2:$D$6;EQUIV(1;(Liste!$A$2:$A$6=Synthese!$A2)*(Liste!$B$2:$B$6=Synthese!$B2)*(Liste!$C$2:$C$6=C$1);0)))
    Si les temps ne sont pas concluant, revient vers nous pour une macro
    Jérôme

  3. #3
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonsoir,

    L'objectif : Remplir le tableau jaune en feuille synthèse avec des "yes" verts et des "no" rouges sur les 3 colonnes ? (est-ce qu'il y a plus à remplir que le tableau jaune ? Dans le genre les noms à gauche du tableau jaune ?)

    Si tu parles de .VBS, cela veut peut-être dire que tu ne veux pas te contenter d'une formule matricielle comme le suppose Jérôme mais que l'on risque de te demande un peu de coder pour tes examens.

    Cela parait faisable à priori et en théorie, avec 3 IF imbriqués (une par colonnes) et un For Loop englobant du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For x = 2 to Range("a65536").End(xlUp).row
     
    Next

    Bertrand

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Je te donne une méthode détaillée, Analyses la et poses des questions si besoin


    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
    45
    46
    47
    48
    49
    50
    Sub Bouton1_Cliquer()
     
    Dim ShSource As Worksheet
    Dim ShCible As Worksheet
     
    Dim Rg As Range
    Dim strAddress As String
     
    Dim i As Long
     
    ' Alimente les variables Feuille
    Set ShSource = ThisWorkbook.Sheets("Liste")
    Set ShCible = ThisWorkbook.Sheets("Synthese")
     
    'Lecture de la feuille Source
    For i = 2 To ShSource.Range("A" & Rows.Count).End(xlUp).Row
     
        'Recherche du nom dans la feuille cible
        Set Rg = ShCible.Range("A:A").Find(what:=ShSource.Range("A" & i).Value, lookat:=xlWhole)
     
        'Si on trouve le nom
        If Not Rg Is Nothing Then
     
                strAddress = Rg.Address
                Do
                    'Test si la ligne trouvée comporte la même marque
                    If Rg.Offset(0, 1).Value = ShSource.Range("B" & i).Value Then
                        'Si même marque on met a jour le tableau
                        Select Case ShSource.Range("C" & i).Value
                            Case "vert"
                                Rg.Offset(0, 2).Value = ShSource.Range("D" & i).Value
                            Case "rouge"
                                Rg.Offset(0, 3).Value = ShSource.Range("D" & i).Value
                            Case "bleu"
                                Rg.Offset(0, 4).Value = ShSource.Range("D" & i).Value
                        End Select
                        'On sort de la recherche pour passer à la ligne source suivante
                        Exit Do
                    End If
     
                    'Si pas la meme marque alors on cherche le nom suivant
                    Set Rg = ShCible.Range("A:A").FindNext(Rg)
     
                Loop While Not Rg Is Nothing And Rg.Address <> strAddress
     
        End If
     
    Next i
     
    End Sub
    Jérôme

  5. #5
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bravo Jérôme,

    En plus ton code est bien commenté.
    SELECT CASE est préférable à mes 3 IF

    Bertrand

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    merci
    Jérôme

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/12/2010, 16h40
  2. iReport Generation tableau à partir d'une List
    Par ggalou dans le forum iReport
    Réponses: 0
    Dernier message: 14/12/2010, 09h39
  3. [XL-2003] [VBA]remplisage d'un tableau a partir d' une liste
    Par olivier370 dans le forum Excel
    Réponses: 2
    Dernier message: 24/08/2009, 10h13
  4. [XSLT] faire un tableau à 2 colonnes à partir d'une liste ?
    Par Gob0_ dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/08/2006, 11h14
  5. [SQL] Obtenir un tableau à partir d'une liste
    Par JMO91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2006, 00h07

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