Récuperer des données selon double correspondance

bambi

XLDnaute Occasionnel
Bonjour à tous :)

En ce début d'année, je viens vous soumettre une requête sur laquelle je cale totalement.
J'ai deux tableaux en feuille 1 et en feuille 2

Je souhaite récupérer en feuille 1 les horaires visibles sur la feuille 2
Pour cela, je dois comparer et faire correspondre les données de 2 colonnes

Un exemple étant plus parlant que de grandes explications, je vous poste un fichier
(en espérant qu'il soit explicite)

Merci d'avance pour vos idées ;)

NB: Vu que ce tableau doit s’intégrer à un fichier beaucoup plus complexe, je recherche une solution en VBA si cela est possible
 

Pièces jointes

  • Classeur1.xlsm
    19.9 KB · Affichages: 20
  • Classeur1.xlsm
    19.9 KB · Affichages: 27
  • Classeur1.xlsm
    19.9 KB · Affichages: 29
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Récuperer des données selon double correspondance

Bonjour,

pas besoin de vba en fait. une "simple" formule répond au besoin
en F2 de ta feuille 1
=SOMMEPROD((D2=FEUILLE2!$D$2:$D$7)*(FEUILLE2!$C$2:$C$7=FEUILLE1!G2)*FEUILLE2!$A$2:$A$7)

et donc. en I2 de ta feuille 1
=SOMMEPROD((D2=FEUILLE2!$D$2:$D$7)*(FEUILLE2!$C$2:$C$7=FEUILLE1!J2)*FEUILLE2!$A$2:$A$7)

tu tires vers le bas
 

bambi

XLDnaute Occasionnel
Re : Récuperer des données selon double correspondance

Merci beaucoup vgendron. Très efficace effectivement.

Mais si quelqu'un a une idée de macro, je suis preneuse aussi.
Le tableau réel change tous les jours et peut avoir bien plus de données que cela.
J'aimerai donc automatiser la récupération des horaires.
Une macro me parait plus simple pour le faire.
 

vgendron

XLDnaute Barbatruc
Re : Récuperer des données selon double correspondance

ou sinon,
avec des zones nomées avec la fonction décaler que tu sembles connaitre (d'après ton fichier)
pour la zone Heure: DECALER(FEUILLE2!$A$2;;;NBVAL(FEUILLE2!$A:$A)-1)
pour la zone Niveau: DECALER(FEUILLE2!$C$2;;;NBVAL(FEUILLE2!$C:$C)-1)
pour la zone Ref: DECALER(FEUILLE2!$D$2;;;NBVAL(FEUILLE2!$D:$D)-1)

les formules deviennent
=SOMMEPROD((D2=Ref)*(Niveau=G2)*Heure)
=SOMMEPROD((D2=Ref)*(Niveau=J2)*Heure)

donc; selon le taille de ton tableau. la formule s'adapte

après en vba.. suis pas sur justement que ce soit plus simple..
 

laurent950

XLDnaute Accro
Re : Récuperer des données selon double correspondance

Bonjour,

Par Macro : voici le code
J'ai utilisé des variables tableau c'est peut être un peux complexe mais
très efficace.

VB:
Sub test()
Dim F1 As Worksheet
Set F1 = Worksheets("FEUILLE1")
Dim TabRes() As Variant
TabRes = F1.Range(F1.Cells(2, 4), F1.Cells(5, 10))
Dim F2 As Worksheet
Set F2 = Worksheets("FEUILLE2")
Dim TabBase() As Variant
TabBase = F2.Range(F2.Cells(2, 1), F2.Cells(7, 4))

For i = 1 To UBound(TabRes, 1)
    For j = 1 To UBound(TabBase, 1)
        ' Pour Niveau 1
        If TabRes(i, 1) & TabRes(i, 4) = TabBase(j, 4) & TabBase(j, 3) Then
            TabRes(i, 3) = TabBase(j, 1)
        End If
        ' Pour Niveau 2
        If TabRes(i, 1) & TabRes(i, 7) = TabBase(j, 4) & TabBase(j, 3) Then
            TabRes(i, 6) = TabBase(j, 1)
        End If
    Next j
Next i

' Extraire une colone d'un tableau :
' c'est a dire la colone N°3 (avec un pas de 3) du tableau a recopier en colonne
' en rapport avec la feuille excel soit la Colonne 6 du tableur soit :
' i = 3 + (3 pour un décalage de 3) Soit Ligne 2 et colonne 6 feuille excel
For i = 3 To 6 Step 3
 Cells(2, i + 3).Resize(UBound(TabRes, 1), 1).Value = Application.Index(TabRes, , i)
Next i
End Sub

et le fichier joint

Laurent
 

Pièces jointes

  • Classeur1.xlsm
    38.3 KB · Affichages: 34
  • Classeur1.xlsm
    38.3 KB · Affichages: 33
  • Classeur1.xlsm
    38.3 KB · Affichages: 34
Dernière édition:

bambi

XLDnaute Occasionnel
Re : Récuperer des données selon double correspondance

Bonjour,

Par Macro : voici le code
J'ai utilisé des variables tableau c'est peut être un peux complexe mais
très efficace.

VB:
Sub test()
Dim F1 As Worksheet
Set F1 = Worksheets("FEUILLE1")
Dim TabRes() As Variant
TabRes = F1.Range(F1.Cells(2, 4), F1.Cells(5, 10))
Dim F2 As Worksheet
Set F2 = Worksheets("FEUILLE2")
Dim TabBase() As Variant
TabBase = F2.Range(F2.Cells(2, 1), F2.Cells(7, 4))

For i = 1 To UBound(TabRes, 1)
    For j = 1 To UBound(TabBase, 1)
        ' Pour Niveau 1
        If TabRes(i, 1) & TabRes(i, 4) = TabBase(j, 4) & TabBase(j, 3) Then
            TabRes(i, 3) = TabBase(j, 1)
        End If
        ' Pour Niveau 2
        If TabRes(i, 1) & TabRes(i, 7) = TabBase(j, 4) & TabBase(j, 3) Then
            TabRes(i, 6) = TabBase(j, 1)
        End If
    Next j
Next i

' Extraire une colone d'un tableau :
' c'est a dire la colone N°3 (avec un pas de 3) du tableau a recopier en colonne
' en rapport avec la feuille excel soit la Colonne 6 du tableur soit :
' i = 3 + (3 pour un décalage de 3) Soit Ligne 2 et colonne 6 feuille excel
For i = 3 To 6 Step 3
 Cells(2, i + 3).Resize(UBound(TabRes, 1), 1).Value = Application.Index(TabRes, , i)
Next i
End Sub

et le fichier joint

Laurent


Je reviens vers toi laurent car j'ai un petit souci de compréhension pour adapter ta macro.

Dans mon fichier exemple j'ai mis respectivement 4 et 6 lignes dans mes feuille1 et feuille2

Mais dans la réalité, je peux avoir jusqu'à 500 lignes (colonnes inchangées)
Et je ne vois pas quelles données modifier dans la macro pour que cela fonctionne

Peux-tu m'orienter ?

Merci d'avance
 
Dernière édition:

bambi

XLDnaute Occasionnel
Re : Récuperer des données selon double correspondance

Un peu de concentration pour comprendre comment mettre en correspondance lignes et colonnes et j'ai fini par trouver
Merci Laurent950 ;)
 
Dernière édition:

Discussions similaires