Récuperer des données selon double correspondance

  • Initiateur de la discussion Initiateur de la discussion bambi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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
 
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.
 
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..
 
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

Dernière édition:
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:
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour