XL 2016 regrouper 3 onglets en 1 seul d apres code unique

bandimalou

XLDnaute Occasionnel
bonsoir à tous,

je souhaiterais regrouper 3 onglets en 1 seul,
les 2 points commun avec les lignes des 3 onglets sont les colonnes ID tiers et Nom
et j'aimerais si possible créer soit une macro ou une formule pour aller renseigner l'onglet "base clients complète" sur la base de la colonne ID tiers.
dans l'onglet "base clients complète" les entêtes sont de la couleur des onglets que je souhaiterais.
j’espère avoir été le plus clair possible dans ma demande.
merci par avance de votre aide.
Cyril
 

Pièces jointes

  • test.xlsx
    11.4 KB · Affichages: 45

CISCO

XLDnaute Barbatruc
Bonjour

Je n'ai fait qu'une partie du travail. A toi de comprendre et de finir cela. Il y a des formules matricielles donc à valider avec Ctrl+maj+enter pour faire apparaitre les accolades {}.

@ plus
 

Pièces jointes

  • test.xlsx
    12.8 KB · Affichages: 24
Dernière édition:

bandimalou

XLDnaute Occasionnel
bonsoir CISCO et gosselien

merci de vous pencher sur mon problème
il y a une colonne commune aux 3 onglets (A) c'est un code client donc unique
mon souhait serait de pouvoir récupérer les informations de chaque onglets pour chaque client et d'en faire un seul onglet
Merci par avance
Bandimalou
 

CISCO

XLDnaute Barbatruc
Bonsoir

S'il ni y a qu'un code par client, tu devrais pouvoir faire avec les formules du fichier en pièce jointe.

@ plus

P.S : Comme tu as des nombres et du texte dans la colonne Général!A, j'ai modifié la formule de la colonne Base client complete!A.
 

Pièces jointes

  • test.xlsx
    12.8 KB · Affichages: 26

klin89

XLDnaute Accro
Bonsoir à tous, :)

Ou ceci :
VB:
Option Explicit
Sub test()
Dim a, w(), n As Long, i As Long, j As Long
Dim dico As Object, ws As Worksheet
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    For Each ws In Worksheets([{"Général","Contact","Tarifs de base"}])
        a = ws.Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If Not dico.exists(CStr(a(i, 1))) Then
                ReDim w(1 To 16)
            Else
                w = dico(CStr(a(i, 1)))
            End If
            Select Case ws.Name
                Case "Général"
                    For j = 1 To UBound(a, 2)
                        w(j) = a(i, j)
                    Next
                Case "Contact"
                    w(1) = a(i, 1): w(3) = a(i, 2)
                    For j = 3 To UBound(a, 2)
                        w(j + 9) = a(i, j)
                    Next
                Case "Tarifs de base"
                    w(1) = a(i, 1): w(3) = a(i, 2)
                    w(UBound(w, 1)) = a(i, 3)
            End Select
            dico(CStr(a(i, 1))) = w
        Next
    Next
    Application.ScreenUpdating = False
    With Sheets("base clients complete").Range("a1").CurrentRegion
        .Offset(1).ClearContents
        n = 1
        For i = 0 To dico.Count - 1
            With .Offset(n).Resize(1, UBound(dico.items()(i), 1))
                .Value = dico.items()(i)
            End With
            n = n + 1
        Next
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub
Edit : attention aux espaces en bout de chaîne dans le nom des feuilles de calcul

klin89
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87