Récupérations valeurs suivants des critères

f69815

XLDnaute Occasionnel
Bonjour le forum,

voilà le problème.

dans une feuille j'ai des données, je voudrais récupérer les données qui entourent la cellule qui a comme valeur la lettre "x".
jusqu'à la ligne 17 cela ne me semble pas trop compliqué, par contre ligne 18, la valeur à droite contient un "a", il faudra donc récupérer la valeur "956" deux cellules plus à droite.
en principe le "x" se trouve colonne C, mais ce n'est pas une règle vous le verrez dans le fichier joint, le nombre de lignes est volontairement limité.
merci de votre aide.
 

Pièces jointes

  • Test.xls
    30 KB · Affichages: 65
  • Test.xls
    30 KB · Affichages: 67
  • Test.xls
    30 KB · Affichages: 67

piga25

XLDnaute Barbatruc
Re : Récupérations valeurs suivants des critères

Bonjour,

Comme il n'est pas précisé dans combien de cellule le résultat doit figurer, voici un exemple qui permet de recueillir les cellules recherchées dans une seule:
=SI(B2="X";A2&" "&SI(DROITE(C2;1)="a";D2;C2);SI(C2="X";SI(DROITE(B2;1)="a";A2;B2&" "&SI(DROITE(D2;1)="a";E2;D2))))
 

f69815

XLDnaute Occasionnel
Re : Récupérations valeurs suivants des critères

Bonsoir à vous et merci de m'avoir répondu.

la solution de monique me convient.

mais comment la convertir en vba, chose que je n'avais pas précisée, car ensuite il y a d'autre chose à faire avec le résultat.

bonne nuit à tous les lecteurs.
 

ROGER2327

XLDnaute Barbatruc
Re : Récupérations valeurs suivants des critères

Bonjour à tous.


Quelques essais en VBA.​



ROGER2327
#6804


Jeudi 26 Phalle 140 (Disparition de l’Ancien Breughel, incendiaire - fête Suprême Quarte)
19 Fructidor An CCXXI, 0,3178h - tagète
2013-W36-4T00:45:46Z
 

Pièces jointes

  • Copie de Test.xls
    91 KB · Affichages: 73
  • Copie de Test.xls
    91 KB · Affichages: 74
  • Copie de Test.xls
    91 KB · Affichages: 78

f69815

XLDnaute Occasionnel
Re : Récupérations valeurs suivants des critères

Bonjour ROGER2327.
tout d'abord merci.
la function tata fait bien le travail, mais mes connaissances en vb ne sont pas assez suffisante pour tout comprendre, et pourquoi un formule matricielle dans les cellules ?
 

ROGER2327

XLDnaute Barbatruc
Re : Récupérations valeurs suivants des critères

Re...


(...)
la function tata fait bien le travail, mais mes connaissances en vb ne sont pas assez suffisante pour tout comprendre, et pourquoi un formule matricielle dans les cellules ?

Un mot d'abord sur l'usage du qualificatif matriciel, employé à tort et à travers par les pédants "exceliens" dont je fais quelquefois partie, hélas. Pour eux, le fait qu'on valide ou non une formule par Ctrl Maj Entrée fait que la formule est ou n'est pas matricielle. Cela relève de l'argument d'autorité et n'a aucun sens dès lors qu'on adopte un point de vue rationnel.

Preuve : étant donné une plage de nombres A1:B10

A​
B​
1​
0,74​
0,08​
2​
0,72​
0,84​
3​
0,74​
0,3​
4​
0,18​
0,25​
5​
0,08​
0,53​
6​
0,25​
0,27​
7​
0,61​
0,98​
8​
0,7​
0,48​
9​
0,9​
0,55​
10​
0,39​
0,36​

considérons les formules
Code:
=SOMMEPROD((A1:A10<0,5)*(B1:B10<0,5))
=SOMMEPROD(-(A1:A10<0,5);-(B1:B10<0,5))
=SOMME((A1:A10<0,5)*(B1:B10<0,5))
Les deux premières validées par Entrée et la troisième validée par Ctrl Maj Entrée renvoient le même résultat (en l'occurrence, 3, nombre de lignes de la plage dans lesquelles les deux nombres sont strictement inférieurs à 0,5). En quoi, d'un point vue rationnel, l'une est-elle plus ou moins matricielle que les autres ?
En rien, bien sûr.
Aucune opération réellement matricielle n'est d'ailleurs réalisée par ces formules. Si on veut à tout prix faire scientifique, on peut tout au plus considérer qu'elles effectuent le produit scalaire des vecteurs (0, 0, 0, 1, 1, 1, 0, 0, 0, 1) et (1, 0, 1, 1, 0, 1, 0, 1, 0, 1) dans un espace euclidien de dimension dix.

Laissons cela de côté pour en venir à ce qui vous préoccupe. La fonction que je propose renvoie un tableau à deux dimensions : le nombre de lignes est celui du nombre de lignes de la plage passée en argument, le nombre de colonne est deux.
Pour afficher ce tableau dans une feuille Excel, on peut s'y prendre d'au moins trois façons.
S'agissant de traiter la plage A2:E67 comme dans le classeur de démonstration, on peut
  1. Sélectionner la plage G2:H67, saisir la formule =Tata(A2:E67) en G2 et valider par Ctrl Maj Entrée. C'est la solution la plus simple et la plus rapide.
  2. Sélectionner la plage J2:K2, saisir la formule =Tata(A2:E2) en I2 et valider par Ctrl Maj Entrée. On obtient le résultat pour la première ligne. On copie ensuite vers le bas jusqu'à la ligne 67 pour obtenir les autres résultats. C'est certainement plus gourmand en ressources de calcul, mais utile si l'on ne s' intéresse qu'à quelques lignes plutôt qu'à toutes.
  3. Enfin, solution que je n'ai pas utilisée dans le classeur de démonstration, mais tout à fait envisageable, sortir individuellement chaque élément du tableau renvoyé par =Tata(A2:E67).
    Saisissez, en AE2 (ou ailleurs !), la formule
    Code:
    =INDEX(Tata($A$2:$E$67);LIGNE(1:1);COLONNE(A:A))
    validez "normalement" par Entrée et copiez-là à droite.
    Puis recopiez ces deux cellules vers le bas jusqu'à la ligne 67.
    Cette solution est évidemment moins pratique, mais est intéressante pour vous qui dites :
    la solution de monique me convient.

    mais comment la convertir en vba, chose que je n'avais pas précisée, car ensuite il y a d'autre chose à faire avec le résultat.
    S'il y a d'autres choses à faire avec le résultat, vous les ferez aisément dans une procédure qui appellera la fonction Tata. Supposons que vous vouliez effectuer une opération lorsque le premier nombre relevé dans un ligne est égal au deuxième nombre relevé dans cette même ligne. Vous écrirez quelque chose du genre
    VB:
    Sub prout()
    Dim i&, Table()
    '...
    
        Table = Tata(Feuil1.Range("A2:E67"))
        For i = 1 To UBound(Table)
            If Table(i, 1) = Table(i, 2) Then
    
    'Opération lorsque le premier nombre relevé dans la ligne i est égal au deuxième nombre relevé dans la ligne i.
    
            End If
        Next i
    
    '...
    End Sub
    Vous n'appelez ainsi qu'une seule fois la fonction Tata, puis vous lisez ligne par ligne son résultat.


Bon courage pour la suite...

Quant à moi, je vais m'octroyer huit jours de congé : À la semaine prochaine !



ROGER2327
#6806


Vendredi 27 Phalle 140 (Priape, franc - tireur - fête Suprême Quarte)
20 Fructidor An CCXXI, 0,0943h - hotte
2013-W36-5T00:13:34Z
 

Discussions similaires

Statistiques des forums

Discussions
312 386
Messages
2 087 855
Membres
103 671
dernier inscrit
rachid1983