valeur Plus haute

wilbur11

XLDnaute Junior
Bonjour, les ami(es)

J'ai encore besoin de votre precieuse aide!

j'ai mis en pieces jointe mon fichier.

J'ai une liste intuitive qui fonctionne avec la touche "F12" dont on choisi l'article avec la touche "TAB". Cette fonction marche seulement dans les cases B6:B10 de l'onglet FACTURE.

je voudrais avoir la chance dans l'onglet FACTURE pouvoir taper manuellement "b10" entre la case B6 et B30 et qu'il m'indique le prix de l'article "b12" (soit prix plus élevé suivant) dans la colonne C puisque l'article B10 n'exsite pas. Autrement dit entrer un article (qui est toujours lettrechiffre) qui n'est pas dans la liste mais qu'il me donne le prix de l'article suivant (toujours en respectant la lettre de l'article. C'est a dire ne pas me donner le prix de l'article BB3030 si je demande l'article B43. Dans ce cas j'aimerais qu'il me donne une erreur ou autre)

Voir l'onglet ARTICLE pour la liste de mes articles "10", "B12", "BB3030"

Comment faire?

Suis-je assez claire?

Wilbur
 

Pièces jointes

  • grille de calcul Vweb.xls
    91 KB · Affichages: 88
  • grille de calcul Vweb.xls
    91 KB · Affichages: 92
  • grille de calcul Vweb.xls
    91 KB · Affichages: 95
Dernière édition:

KenDev

XLDnaute Impliqué
Re : valeur Plus haute

Bonjour Wilbur,

Une proposition par fonction.
Renvoie 0 pour les entrées non valides (ne respectant pas la règle une/des lettres puis un/des chiffres), pour les entrées non trouvées (ex : XP564) et pour les entrées de rang dépassant le maximum de la catégorie (ex: V43).
Valable tant que la liste Articles est triée sur la colonne du code des Articles par ordre croissant.
Cordialement

KD

VB:
Function Wbr&(s$)
Dim i%, txt$, nmb$, w As Worksheet

    If Asc(UCase(Left(s, 1))) > 64 And Asc(UCase(Left(s, 1))) < 91 Then
        i = 1
        Do
            txt = txt & UCase(Right(Left(s, i), 1))
            i = i + 1
        Loop Until Asc(UCase(Right(Left(s, i), 1))) < 65 Or Asc(UCase(Right(Left(s, i), 1))) > 90
        If Asc(Right(Left(s, i), 1)) > 47 And Asc(Right(Left(s, i), 1)) < 58 Then
            Do
                nmb = nmb & Right(Left(s, i), 1)
                i = i + 1
            Loop Until (Asc(Right(Left(s, i), 1)) < 48 Or Asc(Right(Left(s, i), 1)) > 57) Or i > Len(s)
            If i <> Len(s) + 1 Then Exit Function
        Else
            Exit Function
        End If
    Else
        Exit Function
    End If
    
    Set w = Worksheets("Articles")
    For i = 3 To w.Cells(Rows.Count, 1).End(xlUp).Row
        If UCase(Left(w.Cells(i, 1), Len(txt))) = txt Then
            If IsNumeric(Right(w.Cells(i, 1), Len(w.Cells(i, 1)) - Len(txt))) Then
                If Val(Right(w.Cells(i, 1), Len(w.Cells(i, 1)) - Len(txt))) >= Val(nmb) Then
                    Wbr = w.Cells(i, 2)
                    Exit Function
                End If
            End If
        End If
    Next i
    
End Function
 
Dernière édition:

wilbur11

XLDnaute Junior
Re : valeur Plus haute

Merci infiniment KenDev,

Ou dois-je mettre ce code dans le code exisitant? J'ai essayé de le mettre dans le code de la feuille Facture et ensuite dans le code de la feuille Article et ensuite Workbook mais ca ne marche pas. Merci de me donner une petite réponse.
 

KenDev

XLDnaute Impliqué
Re : valeur Plus haute

Bonjour Wilbur,

A mettre dans un module standard. Je n'ai plus ton fichier sous les yeux mais si tu rentres par exemple une référence en B6, tu n'as qu'a ensuite à écrire en c6 (ou n'importe ou)
Code:
=Wbr(B6)
.
Cordialement

KD
 

Odesta

XLDnaute Impliqué
Re : valeur Plus haute

Bonjour à tous

Voici une proposition par formule, répondant, je l'espère, à la question "comment prendre le prix suivant en cas de référence inexistante ?"
Code:
En E6
=SI(B6<>"";SI(ESTNA(EQUIV(B6;Articles!A:A;0));INDEX(Articles!B:B;EQUIV(B6;Articles!A:A)+1);INDEX(Articles!B:B;EQUIV(B6;Articles!A:A;0)));"")

Cdt
Olivier

Edit Explications :
La fonction Equiv renvoie la position de la valeur inférieure la plus proche, lorsqu'on ne lui met aucun attribut (soit 1)
La fonction Equiv avec 0 renvoie la position de la valeur exacte uniquement.
Je compare donc #NA à la recherche, Si c'est exacte, je prends la valeur (index) de la colonne B:B à la ligne trouvée. Si c'est inexacte, je prends la valeur à la ligne trouvé par l'Equiv (attribut 1) auquel j'ajoute 1.
 
Dernière édition:

wilbur11

XLDnaute Junior
Re : valeur Plus haute

@Olivier Merci, mais j'ai vraiment besoin d'un code d'erreur ou un 0 comme valeur si le code lettre-chiffre est plus haut ou innexsistant.

@Kendev, Je ne parviens pas a le faire fonctionner. Peux tu le dowloader à nouveau (en fichier joint en haut) et verifier. Merci!
 

KenDev

XLDnaute Impliqué
Re : valeur Plus haute

Bonjour Wlbur, Odesta,

?? Ton fichier en retour, j'ai placé la fonction dans le module 8 et mis quelques exemples dans la feuille facture. Cordialement

KD
 

Pièces jointes

  • grille de calcul Vweb.xls
    77 KB · Affichages: 54
  • grille de calcul Vweb.xls
    77 KB · Affichages: 54
  • grille de calcul Vweb.xls
    77 KB · Affichages: 52

wilbur11

XLDnaute Junior
Re : valeur Plus haute

Merci KenDev, Merci Beaucoup!

Je n'avais pas compris ton 2 post qui expliquais de mettre une valeur dans la colonne C.

Je viens de voir un problème avec cette methode que j'avais pensé. Je cherche une solution et si je ne parviens pas a trouver la solution je vais reposter.

Merci encore!
 

wilbur11

XLDnaute Junior
Re : valeur Plus haute

Salut KenDev,
Étant donné que je ne comprends absolument pas ta programmation, aurais tu la très grande gentillesse de me dire quoi changer dans le code ou de me faire cette petite programmation svp :

Toute en gardant le code actuel, j'aimerais ajouter le même processus que pour la colonne E de la feuille FACTURE mais je voudrais le résultat de la feuille ARTICLES colonne E dans la colonne F de la feuille FACTURE
 

Pièces jointes

  • grille de calcul Vweb.xls
    107.5 KB · Affichages: 78
  • grille de calcul Vweb.xls
    107.5 KB · Affichages: 81
  • grille de calcul Vweb.xls
    107.5 KB · Affichages: 75

wilbur11

XLDnaute Junior
Re : valeur Plus haute

Salut KenDev,
Salut ma bande de p'tit copain Excel!

J'ai demandé l'aide de KenDev (celui qui m'as aidé initialement) mais celui-ci ne semble plus participé au Forum alors j'ai besoin de vous!

Étant donné que je ne comprends absolument pas sa programmation du module 8, auriez-vous la très grande gentillesse de me dire quoi changer dans le code ou de me faire cette petite programmation svp :

Toute en gardant le code actuel, j'aimerais ajouter le même processus que pour la colonne E de la feuille FACTURE mais je voudrais le résultat de la feuille ARTICLES colonne E dans la colonne F de la feuille FACTURE

Merci beaucoup mes ami(es)!
 

wilbur11

XLDnaute Junior
Re : valeur Plus haute

Voir le fichier pour explication mais en gros je veux reussir à inscrire une donnée si la valeur d'une cellule commence par une lettre donnée toujours en respectant la valeur la plus haute si pas dans la liste.
 

Pièces jointes

  • grille de calcul Vweb.xls
    112 KB · Affichages: 54
  • grille de calcul Vweb.xls
    112 KB · Affichages: 70
  • grille de calcul Vweb.xls
    112 KB · Affichages: 56

KenDev

XLDnaute Impliqué
Re : valeur Plus haute

Bonjour Wilbur,

Si j'ai bien compris (en me basant sur les commentaires de cellules et non sur le texte qui aurait pu être écrit en sumérien), pas la peine de faire une nouvelle programmation.

En F6 de la feuille Facture:
Code:
=SI(OU(GAUCHE(B6;1)="h";GAUCHE(B6;1)="p";GAUCHE(B6;1)="s");INDEX(Articles!A$3:E$156;EQUIV(E6;Articles!B$3:B$156;0);5);0)
et faire glisser.vers le bas.

Avec la réserve suivante : que les Prix Clients de la feuilles Articles soient tous différents comme ils le sont dans le classeur fournis.

Cordialement

KD
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia