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 :

Fusionner deux tableaux [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut Fusionner deux tableaux
    Bonjour à tous,

    Je suis en plein développement d'une macro de mise en page de données dans Excel. Je ne suis pas un débutant en VBA mais j'ai encore beaucoup à apprendre^^.

    Voici mon probleme :
    J'ai actuellement sur la page 1 de mon classeur excel un tableau de cette sorte :
    ID Noms Rubrique Base1 montant1 Base montant
    1 Michel 1a __ __ 150 85
    2 roger 1a __ __ 150 50
    2 roger 2a __ __ 120 80
    3 Jean 1a __ __ 115 57
    3 Jean AH __ __ 80 28

    J'ai bien evidemment anonymisé ces données. A noter que Base1 et montant1 sont des colonnes vides.

    Et sur ma page 2 :

    ID Noms Rubrique Base1 montant1 Base montant
    1 Michel 1a 150 50 __ __
    2 roger 1a 150 50 __ __
    2 roger 2a 120 80 __ __
    3 Jean 3c 112 41 __ __
    3 Jean 1a 115 50 __ __
    3 Jean 2b 112 40 __ __

    A noter que Base et Montant sont vide ici.
    Des rubriques de la page 2 peuvent ne pas être dans la page 1 et inversement. Voila pourquoi la page 2 a des lignes communes à la page 1 et des possibles lignes en plus a cause de nouvelles rubriques. pareil pour la page 1.
    Mon but est de combiner le tableau de la page 2 a la page 1:
    1 ) Cest a dire en attribuant les Base1 et montant1 de la page2 à la page 1 au bon endroit ( bonne rubrique, bon id)
    2) ajouter les possibles lignes en plus de la page 2 , ordonné aussi au bon id et bonne rubrique ( ces nouvelles lignes nauront bien sur pas de Base et montant car elle n'apparaisse pas dans la page 1.

    J'espere que j'ai été clair dans mes explications.
    J'avais d'abord essayer des requetes sql a tout va avec des inner join et left join mais je membrouille les pinceaux. Cela fait deux jours que je tente des requetes, des collages spéciaux et autres... je n'y arrive pas. J'ai fouillé les sujets qui traiter du meme problème mais aucun ne pouvait repondre à mon probleme.....

    Voici en gros le resultat que je veux :

    ID Noms Rubrique Base1 montant1 Base montant
    1 Michel 1a 150 50 150 85
    2 roger 1a 150 50 150 50
    2 roger 2a 120 80 120 80
    3 Jean 3c 112 41 __ __
    3 Jean 1a 115 50 115 57
    3 Jean 2b 112 40 __ __
    3 Jean AH __ __ 80 28

    Si vous avez besoin de plus de précisions, j'écoute vos possibles questions.

    ( Vous allez peut être me dire, " tu devrais faire l'inverse vu que le tableau 1 est plus petit et sera facile à assembler à l'autre " ce à quoi je vous repond " ces deux tableaux sont générés par une macro assez lourde que j'ai ecrite et la taille des tableaux est aléatoire.... (parfois ils font 60000 lignes) , donc parfois le tableau 2 a plus de lignes que le 1 et parfois l'inverse ")

    Merci d'avance de vous intéresser à mon problème.
    Cordialement,
    Jaja

  2. #2
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 15
    Par défaut
    bonjour,

    a priori, même si ce n'est sans doute pas ce qu'il y a de plus efficace, je tenterais une boucle à double arrêt dans une boucle :

    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
    dim continue1 as boolean
    dim continue2 as boolean
    dim adr as string
    dim nom as string
    dim rubr as string
     
     
    continue = true
    sheets("tab1").range("B2").select
    do while continue1 = true
        adr = activecell.address
        nom = activecell.value
        rubr = activecell.offset(0,1).value
        if activecell.value<>"" then
            sheets("tab2").select
            range("B2").select
            continue2 = true
            do while continue2 = true
                if activecell.value<>"" then
                      if activecell.value=nom then
                         'ici, remplissage des valeurs de la feuille 2 vers la 1 avec les bonnes valeurs
                         continue2 = false
                      else
                         activecell.offset(1,0).select
                      end if
                else
                      'ici, remplissage des valeurs de la feuille 2 vers la 1 avec des -
                      continue2 = false
                end if
            loop
            sheets("tab1").select
            range(adr).select
            activecell.offset(1,0).select
        else
            msgbox "traitement terminé"
            continue1 = false
        end if
    loop
    et derrière, enchainer avec un traitement similaire dans l'autre sens pour ajouter les éléments de la table 2 qui n'existent pas dans la 1.

    cordialement.

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut
    Merci pour ta réponse,
    J'ai a peu près compris le déroulement de ton code, le problème est que les données sont pas forcement dans l'ordre...c'est a dire que les données en plus de "Jean" dans la table 2 doivent être insérer après Jean et non en fin de fichier..... voila pourquoi je pensais a une solution avec des requêtes sql et des conditions JOIN pour assembler à l'id et a la rubrique en fonction. ( surtout pour le temps d’exécution, si le tableaux fait 60 000 lignes par exemple)

    Je vais tout de même essayer ce code ( lundi car je ne peux pas travailler ce week end) et te dire ce que ca devient.
    En tout cas je te remercie beaucoup, je vois plus clair maintenant.

    Je suis à l’écoute d'autres propositions si vous avez,
    merci d'avance
    Cordialement,
    Jaja

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut
    Juste pour tenir au courant :

    J'ai adapter ton code à ma macro et il a l'air de marcher. Je rencontre tout de meme deux problemes :
    - Le temps d'éxécution est très ( très ) long....
    - J'avais oublié de mentionné qu'un nom pouvait etre dans la feuille 2 et pas dans la 1 donc ma macro tourne en rond tant qu'elle a pas trouvé le gars dans la feuille 1.... ^^'

    Je vais essayer d'améliorer ca. Si quelqu'un a une solution meilleur au niveau performance je suis preneur.

    Cordialement,
    Jaja

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

Discussions similaires

  1. Fusionner deux tableaux
    Par jeronimo83 dans le forum Langage
    Réponses: 2
    Dernier message: 08/09/2008, 11h54
  2. [CS3] fusionner deux tableaux d'orientation différentes
    Par isa68 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 09/08/2008, 11h18
  3. [Tableaux] Fusionner deux tableaux
    Par nicerico dans le forum Langage
    Réponses: 4
    Dernier message: 06/09/2007, 13h57
  4. [Tableaux] Fusionner deux tableaux
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2006, 13h42
  5. fusionner deux tableaux triés ?
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/06/2006, 12h19

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