[Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Batou

XLDnaute Nouveau
Bonjour a tous,

Je fouille le web depuis hier mais je ne trouve pas de reponses a mon probleme. Le voici donc:
J'ai une feuille de resultats d'experience (trop lourd a uploader, meme zippe) avec environ 30 parametres en colonnes. J'ai besoin d'une valeur dans la colonne O qui se situe sur la ligne XX qui interceptionne la valeur Y1=11 ou 20 dans la colonne F (Y1 apparait plusieurs fois dans la colonne) et la valeur Y2=300 dans la colonne J (Y2 apparait aussi plusieurs fois dans la colonne).
NB: il y plusieurs cellules qui repondent a ce critere, j'ai besoin de toutes.

Il est bien evidemment possible de trouver manuellement cette valeur en triant la feuille suivant les 2 colonnes ciblees, les valeurs recherchees apparaissent alors. Pb: il est impossible d'utiliser ces valeurs correctement ensuite (copier-coller impossible avec une selection aleatoire par exemple), et l'experience sera repetee plusieurs centaines de fois, et donc fastidieuse en faisant tout manuellement. Je pense que les macros sont incontournables dans ce cas, ca fera l'occasion de s'initier et ca ma sera utile.

Si quelqu'un pouvait m'aider ca me ferait gagner un temps fou! merci!

PS:desole pour les accents,y'en a pas sur mon clavier...
 

Modeste

XLDnaute Barbatruc
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Bonjour Batou et bienvenue,

Si quelqu'un pouvait m'aider ca me ferait gagner un temps fou!
... Ce doit être possible, mais ce qui serait bien, ce serait de faire un échange de bons procédés: si tu nous faisais gagner un peu de temps, à nous aussi!? ;)
Si ton fichier est trop volumineux, rien de grave: on n'a pas besoin de toutes les données. Un extrait significatif (50 lignes devraient suffire) et sans données confidentielles serait le bienvenu, pour illustrer ta description du problème. La cerise sur le gâteau serait que tu réalises la manipulation "à la main" de manière qu'on visualise le résultat à atteindre.
 

Batou

XLDnaute Nouveau
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Sans probleme!
Si vous souhaitez d'autres precisions, n'hesitez pas :)

J'ajoute que je ne sais pas utiliser les macros excel (bien que sachant coder et connaissant donc le principe d'un code), mais qu'il est grand temps de s'y mettre. Je ne me contenterais donc pas de copier coller le code obtenu, mais bien de le comprendre et savoir comment on procede. Afin de le reutiliser dans des conditions similaires pour d'autres experiences...
 

Pièces jointes

  • echantillon.xlsx
    19.6 KB · Affichages: 86
  • echantillon.xlsx
    19.6 KB · Affichages: 88
  • echantillon.xlsx
    19.6 KB · Affichages: 87

Modeste

XLDnaute Barbatruc
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Salut Marc :), le forum,
re-bonjour Batou,

A une époque pas très lointaine, c'est notre tototiti qui fournissaitt les codes ... et les formules venaient d'ailleurs! Alors, juste pour varier les plaisirs, et fournir une autre proposition (qui apportera un début de piste pour satisfaire la curiosité de Batou), une autre proposition par macro ... proposition qui peut (doit!) être améliorée ... et testée de manière approfondie.
 

Pièces jointes

  • echantillon (Batou).xls
    61.5 KB · Affichages: 71

Batou

XLDnaute Nouveau
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Merci tous les 2 pour vos reponses rapides!
J'ai teste les 2 options, pour la 1ere en formule je ne vois pas l'utilite de la fonction LARGE() qui nous renvoie un k-ieme plus grand nombre alors qu'on veut juste celui de la meme ligne ... et rien ne dit qu'ils correspondent. Elle marche bien sans cette fonction donc, mais reste ensuite a trier les valeurs "faux" du test IF et celles qui nous interessent, cad regrouper seulement les 40-50 valeurs utiles dans une autre colonne. Ca doit être tout bete mais je ne trouve pas ... (j'essaye un mix des fonction IF, FIND, CELL,...).

Pour la macro, c'est vraiment puissant cet engin!! Je l'ai modifiee pour l'adapter a ce que je veux vraiment, mais j'ai toujours un souci: dans mon fichier de donnees brutes, j'ai en fait le meme format que l'echantillon propose mais repete 6 fois cote a cote (6 exp. en parallele=6 tables de donnees cote a cote). Si j'essaye de faire tourner la macro 6 fois sur la meme feuille cible avec a chaque fois des colonnes de depart differentes, il y a conflit dans la compilation, je pense au niveau des noms attribues, mais je ne trouve pas lesquels. Que faut-il modifier pour y parvenir?

Voila le code, ici pour seulement 2 iterations:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:C2")) Is Nothing Then
    Me.Range("F1:F" & Me.Range("A" & Rows.Count).End(xlUp).Row).Clear
    Set cherche = Feuil1.Range("F1:F" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find([B2], LookIn:=xlValues, lookat:=xlWhole)
    If Not cherche Is Nothing Then
        adr = cherche.Address
        Do
            If cherche.Offset(0, 4) = [C2] Then Me.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = cherche.Offset(0, 9).Value
            Set cherche = Feuil1.Range("F1:F" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).FindNext(cherche)
        Loop While Not cherche Is Nothing And cherche.Address <> adr
    End If
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:C2")) Is Nothing Then
    Me.Range("AG1:AG" & Me.Range("D" & Rows.Count).End(xlUp).Row).Clear
    Set cherche = Feuil1.Range("AG1:AG" & Feuil1.Range("D" & Rows.Count).End(xlUp).Row).Find([B2], LookIn:=xlValues, lookat:=xlWhole)
    If Not cherche Is Nothing Then
        adr = cherche.Address
        Do
            If cherche.Offset(0, 4) = [C2] Then Me.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = cherche.Offset(0, 9).Value
            Set cherche = Feuil1.Range("AG1:AG" & Feuil1.Range("D" & Rows.Count).End(xlUp).Row).FindNext(cherche)
        Loop While Not cherche Is Nothing And cherche.Address <> adr
    End If
End If
End Sub

Merci ;)
 

Nairolf

XLDnaute Accro
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Pour cette partie je peux te répondre:
J'ai teste les 2 options, pour la 1ere en formule je ne vois pas l'utilite de la fonction LARGE() qui nous renvoie un k-ieme plus grand nombre alors qu'on veut juste celui de la meme ligne ... et rien ne dit qu'ils correspondent. Elle marche bien sans cette fonction donc, mais reste ensuite a trier les valeurs "faux" du test IF et celles qui nous interessent, cad regrouper seulement les 40-50 valeurs utiles dans une autre colonne. Ca doit être tout bete mais je ne trouve pas ... (j'essaye un mix des fonction IF, FIND, CELL,...).
En fait, la fonction LARGE() (ou en VF: GRANDE.VALEUR()) sert juste à sélectionner la kième valeur la plus grande de la matrice calculée et le IFERROR() (ou en VF: SIERREUR()) est là pour ne pas afficher les valeurs d'erreur du calcul LARGE() liées au résultats "FAUX" dans le calcul matriciel effectué en premier.

En résumé, la combinaison des 2 permet donc d'afficher en premier les 40-50 valeurs correspondants à tes 2 critères d'entrée l'inconvénient étant que tu dois avoir au moins autant de cellule de calcul que de valeurs de sorties.
 

Batou

XLDnaute Nouveau
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Up??!!

La solution formule est completement inenvisageable: je l'ai teste sur un fichier a 6 experiences avec 2500 valeurs a recuperer, et Excel mouline a en faire de la farine avant de me sortir le graphe demande. Il manque de planter a chaque fois que je fais quelque chose...

Quelqu'un aurait donc une idee pour modifier la macro comme precise dans mon post precedent??

Pour info, l'erreur reprochee lors de la compilation est "Ambiguous name detected: Worksheet_Change"

Merci!
 

Modeste

XLDnaute Barbatruc
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Bonjour,

@ Batou: je n'ai pas répondu à ton message du 08/05 parce qu'il me semblait que tu balayais la proposition par formule avec des arguments un peu péremptoires. Par ailleurs, la modification que tu proposais d'apporter à la macro ne peut effectivement pas être mise en oeuvre: un nom identique à deux procédures (événementielles ou non).
D'autre part, quand on réclame un fichier à titre d'exemple, c'est pour se faire une idée de la structure du fichier. Si tu avais précisé d'emblée que ton tableau de données était reproduit (avec des données différentes) sur les colonnes suivantes (jusqu'à 6 fois), tototiti2008 n'aurait pas proposé la même formule ... Il n'est pas certain que j'aurais proposé le même code non plus.
On en revient donc au point de départ:
Modeste à dit:
Un extrait significatif (50 lignes devraient suffire) et sans données confidentielles serait le bienvenu, pour illustrer ta description du problème
... La situation doit, par ailleurs être la plus détaillée possible, dès le départ!

Si tu repasses par ici, je te propose de remettre tout à plat et de redémarrer sur des bases plus "stables"

Edit: salutations à florian (je présume!?), au passage
 
Dernière édition:

Nairolf

XLDnaute Accro
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Batou, si ton fichier n'est pas trop gros et tes données sont non confidentielles, peux-tu nous poster ton fichier complet (ou en retirant les données superflues) afin d'avoir plus de billes pour te répondre.

Et comme le dit Modeste, plus la question est précise plus la réponse l'est aussi.

PS: Je te salut aussi Modeste. Et ,oui c'est bien mon prénom.
 

Batou

XLDnaute Nouveau
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Modeste;1136531... proposition qui peut (doit!) être améliorée ... et testée de manière approfondie.[/QUOTE à dit:
Desole d'avoir essaye d'approfondir...


Reprenons depuis le debut alors!! cf PJ. 6 tableaux de donnees cote a cote, 27 colonnes et env. 500 000 lignes chacun, pour se faire une idee de la taille. Je recherche a extraire des valeurs particulieres de la 15e colonne de chacun de ces tableaux. Ces valeurs n'evoluent pas continuellement mais apparaissent plusieurs fois de suite lors des etapes de "repos", cependant je suis sur de les trouver a tous les coups a l'intersection des valeurs 11 et 20 de la 6e colonne avec la valeur 300 dans la 10e colonne (correspondant a la fin des etapes 11 et 20 de mon experience, celles qui m'interessent, qui durent 300s). L'intersection 11-300 n'apparait qu'une fois au debut (cycle initial), mais celle 20-300 peut apparaitre jusqu'a environ 2500 fois; j'ai besoin d'extraire toutes les valeurs de la col. 15 correspondantes (si possible dans l'ordre, mais rien d'imperatif), pour les 6 tableaux. De plus, ces intersections ne se trouvent pas sur la meme ligne pour tous les tableaux, on ne peut donc pas effectuer une recherche se basant sur le 1er et en reperant la bonne ligne pour les 5 autres; elle doit etre independante pour chaque tableau.

J'espere avoir ete assez complet cette fois, mais n'hesitez pas a demander.

PS: si le setup experimental le permet, ce sera 12 tableaux cote a cote au lieu de 6. Mais on n'y est pas encore...
 

Pièces jointes

  • echantillon.xlsx
    148.3 KB · Affichages: 45
  • echantillon.xlsx
    148.3 KB · Affichages: 48
  • echantillon.xlsx
    148.3 KB · Affichages: 47

Nairolf

XLDnaute Accro
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Je reviens sur un message que tu as rédigé bien avant:
Merci tous les 2 pour vos reponses rapides!
[...]
Voila le code, ici pour seulement 2 iterations:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:C2")) Is Nothing Then
    Me.Range("F1:F" & Me.Range("A" & Rows.Count).End(xlUp).Row).Clear
    Set cherche = Feuil1.Range("F1:F" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find([B2], LookIn:=xlValues, lookat:=xlWhole)
    If Not cherche Is Nothing Then
        adr = cherche.Address
        Do
            If cherche.Offset(0, 4) = [C2] Then Me.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = cherche.Offset(0, 9).Value
            Set cherche = Feuil1.Range("F1:F" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).FindNext(cherche)
        Loop While Not cherche Is Nothing And cherche.Address <> adr
    End If
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:C2")) Is Nothing Then
    Me.Range("AG1:AG" & Me.Range("D" & Rows.Count).End(xlUp).Row).Clear
    Set cherche = Feuil1.Range("AG1:AG" & Feuil1.Range("D" & Rows.Count).End(xlUp).Row).Find([B2], LookIn:=xlValues, lookat:=xlWhole)
    If Not cherche Is Nothing Then
        adr = cherche.Address
        Do
            If cherche.Offset(0, 4) = [C2] Then Me.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = cherche.Offset(0, 9).Value
            Set cherche = Feuil1.Range("AG1:AG" & Feuil1.Range("D" & Rows.Count).End(xlUp).Row).FindNext(cherche)
        Loop While Not cherche Is Nothing And cherche.Address <> adr
    End If
End If
End Sub

Merci ;)

Dans ton code tu mets deux fois la même sub, ça ne peut pas marcher, essaye de mettre ton code dans une seule sub.
 

Modeste

XLDnaute Barbatruc
Re : [Pro] Rechercher une valeur en fonction de parametres dans d'autres colonnes

Re-bonjour,

J'aime assez la citation attibuée à Alexandre DUMAS sous le message de Nairolf :)

Pour ce qui est de:
Batou à dit:
Desole d'avoir essaye d'approfondir...
... Ce n'est pas tout à fait ce que j'évoquais, dans mon précédent message!

Bref, un autre essai, toujours par macro ... mais sans rien de commun avec la précédente, puisque le contexte est différent.
A tester et vérifier aussi!
 

Pièces jointes

  • echantillon Batou (V3).xlsm
    154.3 KB · Affichages: 67

Discussions similaires