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 :

Excel : Générer un tableau a partir de plusieurs


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Excel : Générer un tableau a partir de plusieurs
    Bonjour,

    Je dois faire un truc "très simple"... : Je dois générer une liste à partir d'un fichier principal et de deux feuilles de "paramètres"

    J'ai 4 feuilles (donc une feuille "d'entré", 2 feuilles "source" et 1 feuille "d’export")

    Exemple :

    Fichier 1 (fichier d'entré) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom  | Date de naissance
    TOTO | 12/04/1956
    TITI | 25/06/1972
    Fichier 2 (fichier source 1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom  | Année 1 | Année 2 | Année 3 | Année 4 
    TOTO | 2003    | 2004    | 2005    | 2006
    TITI | 2004    | 2005
    [Fichier 3 (fichier source 2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Année | Montant cotisation 
    2001  | 12€
    2002  | 14€
    2003  | 15€
    2004  | 16€
    2005  | 16€
    2006  | 19€
    Fichier 4 (fichier destination) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Nom  | Année | Cotisation versée
    TOTO | 2003  | 15€
    TOTO | 2004  | 16€
    TOTO | 2005  | 16€
    TOTO | 2006  | 19€
    TITI | 2004  | 16€
    TITI | 2004  | 16€
    Je sais faire celà avec un algo basique qui
    - Feuille 1 : pointe sur la première ligne "Nom" (ici TOTO) (boucle A)
    - Feuille 2 : va chercher la valeur "Nom" (ici TOTO)
    - Feuille 2 : lit la valeur de la "1ère année de cootisation" attachée au nom en question (ici 2003) (Boucle B)
    - Feuille 3 : va chercher la valeur "1ère année de cootisation" (ici 2003)
    - Feuille 3 : lit la valeur du montant de la cotisation correspondante (ici 15€)
    - Feuille 4 exporte toutes les données sur une ligne

    >Fini la boucle B
    >Fini la boucle A

    Bref... basique mais efficace...
    Existe-t-il une manière plus sioux de faire ça ?
    Merci d'avance pour vos lumières !!!


  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    difficile de répondre sans voir ce que tu as fais...

    voici une methode similaire

    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
    51
    52
    53
    Option Explicit
    Option Compare Text
     
    Sub ExtractionCotisation()
        '
        'Les tableaux de chaque classeur sont supposés commencer dans la cellule A1
        '
        Dim W1 As Worksheet, W2 As Worksheet, W3 As Worksheet, W4 As Worksheet
        Dim Ce1 As Range, Ce3 As Range
        Dim Plage2 As Range, Plage3 As Range, Plage4 As Range
        Dim x As Integer, y As Integer, z As Integer
     
        Set W1 = Workbooks("Fichier1.xls").Sheets("Feuil1")
        Set W2 = Workbooks("Fichier2.xls").Sheets("Feuil1")
        Set W3 = Workbooks("Fichier3.xls").Sheets("Feuil1")
        Set W4 = Workbooks("Fichier4.xls").Sheets("Feuil1")
     
        'Boucle sur les noms dans le Fichier1
        For Each Ce1 In W1.Range("A2:A" & W1.Range("A2").End(xlDown).Row)
     
            'Définit la Plage de recherche de noms dans le Fichier2
            Set Plage2 = W2.Range("A1:A" & W2.Range("A1").End(xlDown).Row)
     
            On Error Resume Next
            'Vérifie si le nom existe dans le Fichier2
            x = Application.WorksheetFunction.Match(Ce1, Plage2, 0)
                'Si oui
                If x > 0 Then
     
                    'Récupère la plage des années de cotisation pour le nom spécifié
                    Set Plage3 = W2.Range(W2.Cells(x, 2), _
                                W2.Cells(x, W2.Cells(x, 2).End(xlToRight).Column))
     
                    'Boucle sur les années de cotisation
                    For Each Ce3 In Plage3
     
                        'Définit la Plage des montants de cotisation
                        Set Plage4 = W3.Range("A1:A" & W3.Range("A2").End(xlDown).Row)
                        'Récupère le numéro de ligne de cotisation spécifié
                        y = Application.WorksheetFunction.Match(Ce3, Plage4, 0)
     
                        If y > 0 Then
                            z = W4.Range("A65536").End(xlUp).Row + 1
     
                            W4.Cells(z, 1) = Ce1
                            W4.Cells(z, 2) = Ce3
                            W4.Cells(z, 3) = W3.Cells(y, 2)
                        End If
                    Next Ce3
                End If
        Next Ce1
     
    End Sub

    bonne soiree
    michel

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ben alors... !!!

    Merci beaucoup !
    Je vais tester cet algo et te tiens au courant !!!
    En fait, j'ai trouvé des info.
    Pour les experts en gestion de BDB ce que je veut faire est simple et s'appelle une jointure...
    J'ai rien trouvé d'équivalent sur Excel mais apparemment sous Acces c'est ultra simple...
    Mais en tout cas merci pour ta macro elle m'a l'air super interessante !
    a bientôt,


Discussions similaires

  1. [XL-2002] génrer un tableau détaillé à partir d'un autre
    Par Reno42 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2014, 14h16
  2. Réponses: 4
    Dernier message: 23/03/2009, 14h34
  3. Générer un fichier texte à partir d'un tableau Excel
    Par findev dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2008, 21h50
  4. Réponses: 3
    Dernier message: 07/05/2008, 09h30
  5. tableau croisé à partir de plusieurs classeurs
    Par sambinapas dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/12/2007, 20h20

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