Comment comparer et fusionner des valeurs colonnes

centurion

XLDnaute Junior
Bonjour,

Je cherche une formule pour faire correspondre et fusionner les données de deux listes dans un rapport.
Je joins un fichier avec quelques données et le type de rapport que j'aimerais obtenir.
Sur une liste j'ai à ma disposition les infos des locaux et des surfaces (sans les occupants).
Sur l'autre liste j'ai à ma disposition les infos concernant les occupants (sans les surfaces).
J'aimerais fusionner les deux et faire correspondre les N° des locaux et les surfaces avec ses occupants.

En réalité j'ai beaucoup de locaux, surfaces et occupants.
Si quelqu'un peut m'aider !

Merci d'avance
 

Pièces jointes

  • Rapport.xlsx
    12.4 KB · Affichages: 119
  • Rapport.xlsx
    12.4 KB · Affichages: 129
  • Rapport.xlsx
    12.4 KB · Affichages: 132

Modeste

XLDnaute Barbatruc
Re : Comment comparer et fusionner des valeurs colonnes

Bonsoir centurion,

En imaginant que j'aie correctement compris, que donnerait, en D2 de la feuille "Liste occupants",la formule suivante:
Code:
=SI(NB.SI($A$1:$A2;$A2)=1;RECHERCHEV($A2;'Liste Locaux'!$A$2:$C$13;COLONNES($A:B);FAUX);"")
... à recopier ensuite vers le bas et 1 colonne à droite
 

homepyrof53

XLDnaute Occasionnel
Re : Comment comparer et fusionner des valeurs colonnes

Bonjour

voici une macro
Code:
Option Explicit
Sub essai()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'------------------------------------------------------
'                lecture des locaux
'------------------------------------------------------
Sheets("Liste Locaux").Select
Dim l
Dim tab_locaux
Set tab_locaux = CreateObject("scripting.dictionary")
l = 2
While Cells(l, 1) <> ""
    tab_locaux(Cells(l, 1)) = Array(Cells(l, 2), Cells(l, 3))

    l = l + 1
Wend

'------------------------------------------------------
'                lecture des Occupants
'------------------------------------------------------
Sheets("Liste Occupants").Select
Dim cle
Dim tab_Occupants
Set tab_Occupants = CreateObject("scripting.dictionary")
l = 2
While Cells(l, 1) <> ""
    cle = Cells(l, 1) & "_" & Cells(l, 3)
    'cle = Replace(cle, " ", "_")
    tab_Occupants(cle) = Cells(l, 2)

    l = l + 1
Wend
'------------------------------------------------------
'   eciture du resultat
'------------------------------------------------------
Dim c, designation, surface, nom, initial
Dim numero_bureau
Sheets("RAPPORT").Select
    
l = 3
For Each numero_bureau In tab_locaux
    designation = tab_locaux(numero_bureau)(0)
    surface = tab_locaux(numero_bureau)(1)
    Cells(l, 10) = numero_bureau
    Cells(l, 11) = designation
    Cells(l, 12) = surface
    For Each cle In tab_Occupants
        If Left(cle, 5) = numero_bureau Then
            nom = Mid(cle, 7)
            initial = tab_Occupants(cle)
            Cells(l, 13) = initial
            Cells(l, 14) = nom
            tab_Occupants.Remove (cle)
            l = l + 1
        End If
    Next
Next
Application.Calculation = xlCalculationAutomatic
End Sub

Bonne soirée
 

centurion

XLDnaute Junior
Re : Comment comparer et fusionner des valeurs colonnes

Modeste,

C'est exactement ça que je voulais. Magnifique !

Si c'est pas trop demander:
J'aurais besoin encore de sortir le ratio des m2 soit:
Compter combien de fois un N° d'un bureau apparait et ensuite diviser la surface par ce nombre.

N° Bureau..Initials..Nom.....................Désignation..................Surface m2.....Ratio m2
A1020.......ALA......ALBA André.......... Bureau.........................18.26.............18.26
A1021.......DUC......DURAND Céline.....Salle de préparation.........42.58.............8.52
A1021.......MAC.....MASSE Cédric
A1021.......LEF.......LEON Fernand
A1021.......DOM.....DORT Melanie
A1021.......POA......POT Alain
A1022.......ROM.....ROTH Michel.........Bureau..........................10.64.............10.64

Mille fois merci
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Comment comparer et fusionner des valeurs colonnes

Bonjour centurion, homepyrof53 ... et puis tous les autres,

Toujours avec des formules, en colonne F de la feuille "Liste Occupants" ... et toujours en imaginant que j'ai bien compris :eek:
 

Pièces jointes

  • Rapport (centurion).xlsx
    14.9 KB · Affichages: 121

homepyrof53

XLDnaute Occasionnel
Re : Comment comparer et fusionner des valeurs colonnes

Bonjour

Voila la macro avec le calcul surface par occupant

Code:
Option Explicit
Sub essai()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'------------------------------------------------------
'                lecture des locaux
'------------------------------------------------------
Sheets("Liste Locaux").Select
Dim l, cle
Dim tab_locaux
Set tab_locaux = CreateObject("scripting.dictionary")
l = 2
While Cells(l, 1) <> ""
    cle = Cells(l, 1)
    tab_locaux(cle) = Array(Cells(l, 2), Cells(l, 3), 0, 0)
    l = l + 1
Wend

'------------------------------------------------------
'                lecture des Occupants
'------------------------------------------------------
Sheets("Liste Occupants").Select
Dim tmp1 As Variant, x
Dim tab_Occupants
Set tab_Occupants = CreateObject("scripting.dictionary")
l = 2
While Cells(l, 1) <> ""
    cle = Cells(l, 1) & "_" & Cells(l, 3)
    'cle = Replace(cle, " ", "_")
    tab_Occupants(cle) = Cells(l, 2)
    'comptage occupants
    cle = Cells(l, 1)
    x = tab_locaux(cle)
    x(2) = 1 + x(2)
    tab_locaux(cle) = x
    l = l + 1
Wend
'------------------------------------------------------
'   eciture du resultat
'------------------------------------------------------
Dim c, designation, surface, nom, initial
Dim numero_bureau
Sheets("RAPPORT").Select
   
l = 3
For Each numero_bureau In tab_locaux
    designation = tab_locaux(numero_bureau)(0)
    surface = tab_locaux(numero_bureau)(1)
    Cells(l, 10) = numero_bureau
    Cells(l, 11) = designation
    Cells(l, 12) = surface
    Cells(l, 13) = surface / tab_locaux(numero_bureau)(2)
    For Each cle In tab_Occupants
        If Left(cle, 5) = numero_bureau Then
            nom = Mid(cle, 7)
            initial = tab_Occupants(cle)
            Cells(l, 14) = initial
            Cells(l, 15) = nom
            tab_Occupants.Remove (cle)
            l = l + 1
        End If
    Next
Next
Application.Calculation = xlCalculationAutomatic
End Sub
 

Discussions similaires

Réponses
8
Affichages
444

Statistiques des forums

Discussions
311 720
Messages
2 081 902
Membres
101 834
dernier inscrit
Jeremy06510