XL 2016 Mettre en application INDEX et SOMMEPROD en BVA

candido57

XLDnaute Occasionnel
Bonjour,

J'ai une formule qui est très longue .
Je voudrais m'en servir en BVA, mais je connais pas le code. Pouvez vous me mettre le code
La formule ci-dessous elle va chercher le dernier résultat de la liste > Date saisi en C2.
J'ai dû mettre esterreur car sans ça j'ai une #VALEUR!
J'ai dû faire cette formule car sur le PC au boulot , je n'ai pas RECHERCHEX version Excel trop ancienne
Est ce qu'il y a une formule plus courte ?

Merci beaucoup pour votre aide

=@SI(ESTERREUR(@SI($H$1>=24;"Pas de couche";INDEX(t_Base[Date];SOMMEPROD((t_Base[N° de carte + Prénom]=$C$2)*("T4"=t_Base[Taille])*LIGNE(t_Base[N° de carte + Prénom]))-6)));"";SI($H$1>=24;"Pas de couche";INDEX(t_Base[Date];SOMMEPROD((t_Base[N° de carte + Prénom]=$C$2)*("T4"=t_Base[Taille])*LIGNE(t_Base[N° de carte + Prénom]))-6)))
 

Pièces jointes

  • Distri bb test.xlsm
    118.6 KB · Affichages: 1
Solution
Tu n'étais pas très loin,
modifie comme ceci

Function derligne(valeur, article)

Application.Volatile

'initialisation
carte = ThisWorkbook.Names("Carte").RefersToRange.Value 'numéro de carte trouvé dans les celule nommées
Set tableau = Sheets("base").ListObjects("T_base") 'Définit le tableau
colquant = tableau.ListColumns("Quantité prise").DataBodyRange.Column ' numéro de la colopnne ou trouver la date
colcarte = tableau.ListColumns("N° de carte").DataBodyRange.Column ' numéro de la colopnne ou trouver le numéro de carte


For Each i In tableau.ListColumns(article).DataBodyRange 'pour chaque lignes de la colonne du tableau

'MsgBox i.Parent.Cells(i.Row, colcarte) & "/" & i & "/" &...

wDog66

XLDnaute Occasionnel
Bonjour,

Comme le dit sousou, avec un fichier c'est mieux en général :rolleyes:

Mais sinon à la "one again" voici une possibilité.
VB:
Sub Test()
  Dim sForm As String
  sForm = "=SI(ESTERREUR(SI($H$1>=24;""Pas de couche"";INDEX(t_Base[Date];" _
    & "SOMMEPROD((t_Base[N° de carte + Prénom]=$C$2)*(""T4""=t_Base[Taille])*LIGNE(t_Base[N° de carte + Prénom]))-6)));"""";" _
    & ";SI($H$1>=24;""Pas de couche"";INDEX(t_Base[Date];SOMMEPROD((t_Base[N° de carte + Prénom]=$C$2)*(""T4""=t_Base[Taille])*LIGNE(t_Base[N° de carte + Prénom]))-6)))"
  Range("A1").FormulaLocal = sForm
End Sub

A+
 

candido57

XLDnaute Occasionnel
Un peu plus d'information.

Feuille "Articles" je choisie En D2 un numéro
En G5 , je voudrais qu'une macro me note en G5 le résultat de:
en voyant le n° en D2, il cherche dans feuille "Base", la dernière date de la colonne B mais avec critère N° de carte et articles = "LAIT N° 2".
Idem en G6 pour LAIT N°3
Idem en G9 pour Couche n°1 , G10 pour couche N°2 etc...

En K9 feuille "Articles", je souhaite avoir le dernier résultat de la colonne H si trouve 2 , mais avec les critères n° de carte colonne C et Taille colonne K dans feuille "Base"

Le but , je saisie en D2 et tout s'affiche, s'il n'y a rien alors je laisse la cellule vide
 

candido57

XLDnaute Occasionnel
A priori, oui... vous ne comprenez rien de rien :rolleyes:

Je vous ai donné la réponse ici https://excel-downloads.com/threads...ex-et-sommeprod-en-bva.20085529/post-20671148

restée sans retour de votre part... What else
Je suis là pour qu'on m'aide, je ne suis pas là pour être humilié ou à la limite insulté.
Tout le monde ne connais pas Excel et VBA sur les bout des doigts , c'est mon cas.
J'ai mis en place votre macro et ça ne fonctionne pas.
J'ai mis plus de précision et un fichier .
Si vous voulez encore m'aider c'est bien , sinon tant pis.
Bonne journée
 

wDog66

XLDnaute Occasionnel
Je suis là pour qu'on m'aide, je ne suis pas là pour être humilié ou à la limite insulté.
Oh la.. mon pauvre si vous voyez les choses comme ça... c'est bien dommage pour vous
Encore un traumatisé de la vie... j'en suis navré 🤭

Ne pas connaitre VBA est une chose, ne pas suivre les conversations et ne pas répondre en est une autre...

Sur ce bonne continuation... dans ce monde injuste
 

candido57

XLDnaute Occasionnel
Oh la.. mon pauvre si vous voyez les choses comme ça... c'est bien dommage pour vous
Encore un traumatisé de la vie... j'en suis navré 🤭

Ne pas connaitre VBA est une chose, ne pas suivre les conversations et ne pas répondre en est une autre...

Sur ce bonne continuation... dans ce monde injuste
1) je ne suis pas ton pauvre
2) j'ai répondu , mais pas au bon endroit , ça ne justifie pas que je comprends rien de rien
3) respecte les gens
 
Dernière édition:

Gégé-45550

XLDnaute Accro
3) respecte les gens
Bonjour,
Holà !!! On se calme !
D'abord, le respect, ça marche dans les deux sens.
Ici, les contributeurs sont bénévoles et leur seule "récompense" est une réponse avec, si possible, de temps en temps, un "merci" lorsque leur proposition a permis de résoudre la question posée.
wDog66 vous a donné une solution (vite fait, comme il l'a dit) et vous dites qu'elle ne marche pas.
Ça semble logique vu qu'il n'a pas vérifié votre formule et qu'il s'est contenté (toujours comme il l'a dit) de la traduire en VBA.
Mais c'est votre formule qui ne marche pas ... pas la proposition de wDog66 !
Voici ce que donne votre formule :
1733926891268.png

La traduction en VBA ne fera rien d'autre !
Corrigez votre formule (ou votre fichier ?), ou bien demandez de l'aide pour cela en précisant bien l'attendu et vous pourrez alors juger de la qualité de la proposition de wDog66.
Bien cordialement,
 

candido57

XLDnaute Occasionnel
Bonjour,
Holà !!! On se calme !
D'abord, le respect, ça marche dans les deux sens.
Ici, les contributeurs sont bénévoles et leur seule "récompense" est une réponse avec, si possible, de temps en temps, un "merci" lorsque leur proposition a permis de résoudre la question posée.
wDog66 vous a donné une solution (vite fait, comme il l'a dit) et vous dites qu'elle ne marche pas.
Ça semble logique vu qu'il n'a pas vérifié votre formule et qu'il s'est contenté (toujours comme il l'a dit) de la traduire en VBA.
Mais c'est votre formule qui ne marche pas ... pas la proposition de wDog66 !
Voici ce que donne votre formule :
Regarde la pièce jointe 1208866
La traduction en VBA ne fera rien d'autre !
Corrigez votre formule (ou votre fichier ?), ou bien demandez de l'aide pour cela en précisant bien l'attendu et vous pourrez alors juger de la qualité de la proposition de wDog66.
Bien cordialement,
Bonjour,
Vous avez raison, on n'est pas là pour se voler dans les plumes. J'ai toujours été polie, respectueux et remercier les personnes qui m'aident. C'est vrai que je n'ai pas répondu au bon endroit, mais ça arrive de se tromper. Mais simple > Répond moi dans #3 ça aurait suffit.
Pour ma formule , je n'arrive pas à trouvé où est l'erreur.
 

Gégé-45550

XLDnaute Accro
Bonjour,
Vous avez raison, on n'est pas là pour se voler dans les plumes. J'ai toujours été polie, respectueux et remercier les personnes qui m'aident. C'est vrai que je n'ai pas répondu au bon endroit, mais ça arrive de se tromper. Mais simple > Répond moi dans #3 ça aurait suffit.
Pour ma formule , je n'arrive pas à trouvé où est l'erreur.
Re bonjour,
Déjà, après un coup d'œil rapide à votre fichier, il recèle des "choses" pas "saines".
Exemple : "COUCHE T3 " ou "COUCHE T4 " (avec un espace à la fin), c'est source d'erreurs à l'infini.
La première chose à faire est de supprimer ces espaces inutiles (soit à la main, soit à l'aide de la fonction SUPPRESPACE bien utilisée) puis de regarder l'impact que ça aura sur les formules existantes.
Ensuite, il faudra corriger les formules existantes (genre "DROITE(macellule;3)" en "DROITE(macellule,2)).
Il faudra ensuite reposter le fichier corrigé.
Alors seulement il conviendra de voir comment corriger la formule objet de ce post (à première vue, elle renvoie un tableau et non une valeur mais je ne l'ai pas analysée en détail).
Cordialement,
 

candido57

XLDnaute Occasionnel
Re bonjour,
Déjà, après un coup d'œil rapide à votre fichier, il recèle des "choses" pas "saines".
Exemple : "COUCHE T3 " ou "COUCHE T4 " (avec un espace à la fin), c'est source d'erreurs à l'infini.
La première chose à faire est de supprimer ces espaces inutiles (soit à la main, soit à l'aide de la fonction SUPPRESPACE bien utilisée) puis de regarder l'impact que ça aura sur les formules existantes.
Ensuite, il faudra corriger les formules existantes (genre "DROITE(macellule;3)" en "DROITE(macellule,2)).
Il faudra ensuite reposter le fichier corrigé.
Alors seulement il conviendra de voir comment corriger la formule objet de ce post (à première vue, elle renvoie un tableau et non une valeur mais je ne l'ai pas analysée en détail).
Cordialement,
Bonjour,

Merci pour votre aide , voici le fichier corrigé
 

Pièces jointes

  • Distri bb test.xlsm
    119.6 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 094
Membres
112 658
dernier inscrit
doro 76