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 :

Regrouper deux tableaux


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut Regrouper deux tableaux
    Bonjour le forum,

    Je fais appel à vos lumières pour un problème assez complexe que je n'arrive pas à résoudre.

    J'ai une feuille avec des donnés pour plusieurs clients. J'ai enregistré sous la variable nb le nombre de clients différents que j'ai dans cette feuille et enregistré sous le tableau code(nb) pour chacun d'entre eux le code client correspondant.

    Dans une seconde feuille, j'ai les correspondances noms de ces codes clients. La feuille correspondance contenant bien plus de données que je n'ai de clients dans ma première feuille, j'ai parcouru la feuille et enregistré sous la variable nom(nb) les noms correspondant aux codes de ma première feuille.

    J'ai donc deux tableaux de 1 à nb, l'un contenant les codes, l'autre les noms. Jusque là ca va.

    Le problème est que plusieurs codes peuvent se référer au même nom client.

    Je souhaiterais aboutir à quelque chose qui me dirait que j'ai tant de noms de clients différents et pour chacun d'entre eux une variable string contenant le ou les codes correspondants, séparés par une virgule.

    Je ne sais pas si j'ai été très claire mais si vous pouviez me donner quelques pistes de recherche, ca serait super.

    Merci d'avance à tous.

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 117
    Points : 133
    Points
    133
    Par défaut
    Bonjour

    je ne comprend pas !

    si tu as deux tableaux de 1 à nb tu as autant de nom que de code et qu'ils sont différent (d'apres ce que j'ai compris) ....

    à mois que ce soit deux tableaux avec un nb différent ?

    sinon au lieu d'utiliser des tableaux essaye un findnext d'une feuille à l'autre

    en gros tu boucles sur les noms et avec un findnext tu le cherche dans la feuille des codes et chaque qu'il trouve quelque chose tu concatène un string
    un peu du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    For i = 1 To nb
    With Sheets("FeuilleAvecCodes").Range("a1:a500")
        Set c = .Find(nom(i), LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                StrCode = StrCode & "," & c.Value
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    Next
    j'espere que cela t'aidera

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Si j'ai bien compris !
    Je n'ai pas travailler avec des tableaux mais avec une feuille de calcul, à toi d'adapter pour tes tableaux.
    Tu dis..
    A+
    Fichiers attachés Fichiers attachés

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut
    Tout d'abord 1000 mercis pour vos idées, c'est super, vraiment, je planche actuellement dessus pour les adapter aux mieux.
    Je reste quand même un peu perdue, surtout que youn1096 tu utilises des codes que je ne connais pas encore. Je n'ai jamais appris à travailler avec les Do-Loop, je ne connais que While-Wend.

    J'ai regardé ton tableau le forestier, c'est à peu près ca sauf que mon tableau nom(nb) n'est pas le même que celui que tu as donné. En effet, c'est justement dans celui-ci que j'ai des doublons.

    J'ai mis en seconde feuille du fichier joint plus d'explications concernant mon problème dans l'espoir d'être plus claire. Le but de la procédure est de copier la première feuille avec les données en autant de fois que nécessaire et de ne laisser pour chacun d'eux que les lignes correspondant aux codes clients.

    Je réadapte actuellement mon code car ce que je faisais avant c'était copier la feuille principale en autant de noms de clients différents qu'il y avait dans la feuille de correspondance, pour chacun d'eux j'en supprimais les lignes inutiles. Pour certains il fallait supprimer le fichier créé losque finalement toutes les lignes avaient été supprimées, le client n'existant pas dans la feuille initiale avec les donnés.
    Fichiers attachés Fichiers attachés

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Désole mais je ne comprend pas !
    Met un autre classeur avec les feuilles Feuil1,Feuil2 etc.. les feuilles existantes avec les données et ensuite tu ajoute les feuilles
    JeVeux1, JeVeux2, etc.. comme ça doit être en finale.
    A moins que youn ai compris !
    A+

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Points : 177
    Points
    177
    Par défaut
    Hmmm, je me disais bien que c'était pas très clair.

    Voici le classeur tel que j'aimerais l'avoir, je l'ai bien sûr simplifié.

    1ère feuille, celle que je recois, avec plus ou moins les mêmes clients chaque mois
    2ème feuille, ma feuille de correspondance (qui ne change pas)
    les 3 dernières sont celles que je souhaite obtenir à partir de ma première feuille "recue".

    Dans mon exemple,ma table de correpondance contient 8 codes mais ils ne correspondent qu'à 4 clients (un seul code pour commerzbank comme pour Dresdner Bank mais 3 codes pour Deutsche Bank comme DWP Bank).
    Et dans mon fichier recu, je n'ai que 6 codes qui correspondent à 3 clients, d'où les 3 feuilles.

    Merci d'avance pour votre dévouement, j'arrive plus à avancer.
    Fichiers attachés Fichiers attachés

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 117
    Points : 133
    Points
    133
    Par défaut
    Copie de Split Clients selon codes et noms_MéZl.xls

    tu enleves toute les feuilles sauf les deux premieres et
    tu fais alt-f8 et tu lances la macro exssai

    dis moi si cela marche

  8. #8
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour melouille56 LeForestier youn1096 le forum comme j ai compris!!
    attention le nom des feuilles doivent correspondre a la feuille correspondance la colonne c

    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
    Option Explicit
    Dim t, z As Variant, t2() As String, c As Range, x As Long, i As Long, k As Long
    Sub tri()
    On Error Resume Next
    Application.ScreenUpdating = False
    With Sheets(2)
    For Each c In .Range("a2", .Range("a65536").End(xlUp))
    z = c.Offset(0, 2)
    With Sheets(1)
    t = .Range("a4:k" & .Range("a65536").End(xlUp).Row)
    x = 1
    For i = 1 To UBound(t)
    If t(i, 2) = c.Value Then
    ReDim Preserve t2(1 To 11, 1 To x)
    For k = 1 To 11: t2(k, x) = t(i, k): Next k: x = x + 1: End If: Next i
    Sheets(z).Range("a65536").End(xlUp)(2).Resize(UBound(t2, 2), UBound(t2, 1)) = Application.Transpose(t2)
    Erase t, t2: End With: Next c: End With: Beep
    End Sub
    ps attention les 2 premieres appel par numero sheets(1) & sheets(2)
    si tu changes ces 2 feuilles de place plus marcher autrement les appeler par leurs noms

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With Sheets("Feuille de Correspondance")
    With Sheets("Feuille de départ avec données")

Discussions similaires

  1. A/s requete regrouper deux tableaux
    Par trezo dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/11/2011, 03h33
  2. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  3. Regrouper deux tableaux ?
    Par Evocatii dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2008, 16h33
  4. [débutant] Comment regrouper deux tables ?
    Par maysa dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/10/2004, 18h50
  5. regrouper deux tables
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2003, 15h02

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