Extraire Data 3 Conditions plusieurs feuilles

Bonjour,

Malgré quelques recherches sur votre forum, je n'arrive pas à trouver mon bonheur.

Je vous explique la situation, j'ai actuellement un classeur avec différents onglets.

Je cherche simplement à extraire la data d'une feuille pour l'implémente sur une autre feuille en fonction de 3 conditions.

D'après mes recherches il existes différentes fonctions pour arriver à mes fin mais je n'arrive pas à les utilisés:

=RechercheV

=INDEX(Tableau,EQUIV))

{=SOMME(SI((crit1=plage1)*(crit2=plage2);plage3;0))} = Doc Microsoft

=BDLIRE peut répondre aussi à mes besoins ?

Je vous met en PJ le jeu de donnée correspondant à ma demande, avec une nouvelle explication de ma demande.

Merci d'avance pour votre aide en espérant que ma logique revienne car je n'arrive plus à donner de la tête

Bonjour,

Il n' y a pas de pièce jointe

Cordialement,

Vbabeginner

Bonjour,

Merci pour votre réactivité, tous simplement un oublie au moment d'envoyer la demande.

La modification a été apporté.

Je me permet de modifier ce post pour rajouter une image correspondant à ma demande qui est peut être plus parlant.

A titre d'indication le deuxième tableau est normalement sur un autre onglet du classeur, mais pour plus de simplicité je l'ai mis sur la même page pour l'exemple.

Rappel : Compléter la dernière colonne du premier tableau avec la valeur de la dernière colonne du deuxième tableau en fonction que les conditions soient respectés "Mois Année CodePatient" sur les deux tableaux !

Merci pour votre aide

tableau

Bonjour les "exceliens"

Une âme charitable pour m'aider à ce problème simplissime car je sèche totalement.

Bonjour

Le tableau de ton image ne correspond pas à celui du fichier.

avec le fichier:

Formule matricielle à valider avec les 3 touches ctrl+Maj+Entrée, en M2, incrémentée vers le bas

=SIERREUR(INDEX(Alertes_IAH!$D$2:$D$10;EQUIV(1;(Alertes_IAH!$A$2:$A$10=IAH_Final!B2)*(Alertes_IAH!$B$2:$B$10=IAH_Final!D2)*(Alertes_IAH!$C$2:$C$10=IAH_Final!E2);0));"")

Cordialement

Bonjour,

Merci merci merci Amadeus, ceci est une une grande aide pour moi J'ai modifier la formule pour prendre l'ensemble de mes données.

J'ai compris l'ensemble de la formule hormis la fin de la formule ";"")" qui correspond à quoi ?

Dernières petite question, si nous souhaitons automatisé la tâche à l'ouverture du fichier, il est préférable de partir sur un module VBA, ou un outil excel permet celà ?

N'ayant aucune connaissance en VBA, j'ai vue sur la documentation Microsoft qu'il est possible d'execute une formule en VBA grâce à ceci :

Sub InsertFormula()

Worksheets("Alertes_IAH").Range("M2:M65536").Formula = "=SIERREUR(INDEX(Alertes_IAH!$D$2:$D$65536;EQUIV(1;(Alertes_IAH!$A$2:$A$65536=IAH_Final!B2)*(Alertes_IAH!$B$2:$B$65536=IAH_Final!D2)*(Alertes_IAH!$C$2:$C$65536=IAH_Final!E2);0));"")"

End Sub

Après cette réponse je vais clôturé le dossier comme il se doit.

Encore merci vous êtes au top

Bonjour

Dans la Formule, l'instruction SIERREUR(La formule;"") permet de ne rien afficher si la formule renvoie une erreur.

Pour automatiser, le Code dans le Module1

Sub Insertion_Formules()
'Déclaration des variables
Dim DerLig As Long, f As Range, g As Range
'Recherche du numéro de la dernière ligne
DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
'L'instruction Set permet d'attribuer une référence d'objet à la variable.
        Set f = Range("M2")
        Set g = Range("M" & DerLig)
        f.Select
   Range("M2").FormulaArray = _
        "=IFERROR(INDEX(Alertes_IAH!R2C4:R10C4,MATCH(1,(Alertes_IAH!R2C1:R10C1=IAH_Final!RC[-11])*(Alertes_IAH!R2C2:R10C2=IAH_Final!RC[-9])*(Alertes_IAH!R2C3:R10C3=IAH_Final!RC[-8]),0)),"""")"
'Incrémentation de la formule
Selection.AutoFill Destination:=Range(f, g)
'Copie de la plage de cellules avec formules
Range(f, g).Copy
' Collage des valeurs en remplacement des formules
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("M2").Select
End Sub

est activé à l'ouverture du fichier par le Code dans ThisworkBook

Private Sub Workbook_Open()
Call Insertion_Formules
End Sub

Les formules matricielles sont gourmandes en mèmoire et peuvent ralentir les calculs si leur nombre est trop important.

Le Code remplace en fin de procédure, les formules par les valeurs.

Cordialement

Merci Amadéus Au top avec les commentaires pour plus de clarté c'est parfait.

Néanmoins la formule à été modifié que signifie ces éléments commun qu'on retrouve dans la formule :

R2C1:R10C1 => Plage du fichier ?

=IAH_Final!RC[-11] => Dernière ligne du fichier IAH_FINAL ?

tous simplement car j'aimerais l'adapté à mon fichier final qui comporte un nombre de ligne aléatoire, pour palier ce problème avec l'ancienne formule matriciel avec exécution " A la main " :

=SIERREUR(INDEX(Alertes_IAH!$D$2:$D$65536;EQUIV(1;(Alertes_IAH!$A$2:$A$65536=IAH_Final!B2)*(Alertes_IAH!$B$2:$B$65536=IAH_Final!D2)*(Alertes_IAH!$C$2:$C$65536=IAH_Final!E2);0));"")

J'ai remplacé les différentes plages pour contenir l'ensemble des lignes d'un fichier excel.

Est il possible d'effectuer la même chose avec la "nouvelle formule" ?

Mon fichier ne devrait jamais être rempli mais c'est pour être sur qu'il prenne l'ensemble des valeurs des deux fichiers, une fois ce dernier problème résolu je pourrais close cette demande.

Encore merci

Bonjour

Dans R2C3, on retrouve le numéro des lignes (Rows) et le numéro de colonne (Column)

Faire calculer une Matricielle sur 65000 lignes n'est ni raisonnable, ni rationnel. Il faut Nommer des plages variables qui représentent juste les lignes de données.

Sur ce Code, j'ai ajouté en tout début du code précédent les définitions des Champs concernés qui sont Nommés et utilisé ces Noms dans la Formule finale.

Il n'y a donc plus aucune modification à apporter, quel que soit le nombre de lignes de la Feuille "Alertes_IAH".

Sub Insertion_Formules()
'Définition et attribution de Noms pour les Plages concernées par la Formule
Sheets("Alertes_IAH").Activate
ActiveWorkbook.Names.Add Name:="CodePatient", RefersToR1C1:=Range("A2:A" & [A65000].End(xlUp).Row)
ActiveWorkbook.Names.Add Name:="Mois", RefersToR1C1:=Range("CodePatient").Offset(0, 1)
ActiveWorkbook.Names.Add Name:="Année", RefersToR1C1:=Range("CodePatient").Offset(0, 2)
ActiveWorkbook.Names.Add Name:="Nb_Alertes", RefersToR1C1:=Range("CodePatient").Offset(0, 3)
'On active la feuille de travail
Sheets("IAH_Final").Activate
'Déclaration des variables
Dim DerLig As Long, f As Range, g As Range
'Recherche du numéro de la dernière ligne
DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
'L'instruction Set permet d'attribuer une référence d'objet à la variable.
        Set f = Range("M2")
        Set g = Range("M" & DerLig)
        f.Select
   Range("M2").FormulaArray = _
        "=IFERROR(INDEX(Alertes_IAH!NB_Alertes,MATCH(1,(Alertes_IAH!CodePatient=IAH_Final!RC[-11])*(Alertes_IAH!Mois=IAH_Final!RC[-9])*(Alertes_IAH!Année=IAH_Final!RC[-8]),0)),"""")"
'Incrémentation de la formule
Selection.AutoFill Destination:=Range(f, g)
'Copie de la plage de cellules avec formules
Range(f, g).Copy
' Collage des valeurs en remplacement des formules
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("M2").Select
End Sub

Cordialement

C'est tous simplement parfait.

Je comprend que ce n'est pas rationnel et n'y raisonnable mais c'est pour que le excel prenne en compte l'ensemble de mes données. il n'y aura jamais autant de donnée sur ce fichier.

Merci pour les explications je clos ce sujet.

Rechercher des sujets similaires à "extraire data conditions feuilles"