VBA Calcul depuis intervalle de dimension#2

Fermé
Sam357 Messages postés 134 Date d'inscription dimanche 11 février 2007 Statut Membre Dernière intervention 15 mars 2018 - 28 juil. 2009 à 12:06
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 30 juil. 2009 à 20:00
Bonjour,

Je sollicite votre aide car je suis face à un problème que je n'arrive pas à résoudre.

Je vous explique en détail ce que je désire faire.

* Sur la feuille "cable" j'ai :
- de U3 à U27 la plage de cellule correspondant à la dimension DIM 1 (longueur)
- de UV à V27 la plage de cellule correspondant à la dimension DIM 2 (largeur)

* Sur la feuille "Données pr calcul" apparaissent les prix en fonction de la dimensions désirée en dim1 et dim2 (voir lien plus bas)

Je souhaite que lorsque sur la feuille "cable" les cellule U3 (dim1), V3 (dim2) et T3 (quantité) sont complétées, (c'est le cas dans le fichier) le prix d'achat (contenu dans la feuille "Données pr calcul" en colonne G) correspondant à la dimension demandée apparaîsse en W3.

Si lorsque dans la colonne J un prix supérieur à 0 apparait il ne faut pas aller chercher l'information dans la feuille "Données pr calcul"

Si en J le prix est égal à 0 alors il faut passer la feuille "Données pr calcul".
Mon problème est qu'en fonction de l'article le prix d'achat peut être plus difficile à recopier en automatique à cause de l'intervalle de dimensions.

* Article simple : Prix d'achat = Dim1 * Quantité souhaitée

* Article complexe : Prix d'achat = Dim1 et Dim2 * Quantité souhaitée

Il est possible de se baser sur le fournisseur et sur l'article, pour rechercher les informations d'une feuille à l'autre (les autres informations peuvent ne pas être identiques).

J'ai mis une seconde feuille du même type que "cable", intitulée "habillage" car dans mon fichier final il y a 7 feuilles du même type dans lesquelles les articles sont groupés par famille.

https://www.cjoint.com/?hCl22Rr4tx

Une précédente demande avait résulté par la proposition de ce code par un membre du forum, la solution qu’il apporte est proche de ce que je recherche. Malheureusement je ne sais comment l’utiliser donc je ne peux la tester.

Option Explicit

Function tarif(Fnissr As String, Désignation As String, Ref As String, dim1 As Variant, dim2 As Variant, GrilleTarif As Range) As Variant
Dim lig As Long, p As Long, ok As Boolean, nok As Boolean
'tous les champs doivent être saisis
If dim1 = vbEmpty Or dim2 = vbEmpty Then
tarif = ""
ElseIf Fnissr = "" Or Désignation = "" Or Ref = "" Then
tarif = ""
ElseIf GrilleTarif.Columns.Count <> 6 Then
tarif = "plage GrilleTarif non conforme"
Else
'recherche du tarif
For lig = 1 To GrilleTarif.Rows.Count
If Ref = GrilleTarif.Cells(lig, 3) Then
If Fnissr = GrilleTarif.Cells(lig, 1) Then
If Désignation = GrilleTarif.Cells(lig, 2) Then
'test dim1
ok = False
p = InStr(GrilleTarif.Cells(lig, 4), "-")
If p > 0 Then
ok = dim1 >= CDbl(Left(GrilleTarif.Cells(lig, 4), p - 1)) And dim1 <= CDbl(Mid(GrilleTarif.Cells(lig, 4), p + 1))
Else
ok = dim1 <= GrilleTarif.Cells(lig, 4)
End If
'test dim2
If ok Then
p = InStr(GrilleTarif.Cells(lig, 5), "-")
If p > 0 Then
ok = dim2 >= CDbl(Left(GrilleTarif.Cells(lig, 5), p - 1)) And dim2 <= CDbl(Mid(GrilleTarif.Cells(lig, 5), p + 1))
Else
ok = dim2 <= GrilleTarif.Cells(lig, 5)
End If
If ok Then
tarif = GrilleTarif.Cells(lig, 6)
'tarif trouvé, terminer la boucle
lig = GrilleTarif.Rows.Count
End If
End If
End If
End If
End If
Next lig
If Not ok Then tarif = "Tarif inconnu"
End If
End Function

Merci d’avance pour votre aide.
Cordialement

Sam357
A voir également:

2 réponses

Sam357 Messages postés 134 Date d'inscription dimanche 11 février 2007 Statut Membre Dernière intervention 15 mars 2018 18
28 juil. 2009 à 16:26
Re,

J'ai placé le code cité dans le poste précédent en modifiant/supprimant certaines informations (ordre et intitulés des colonnes) mais je n'obtiens toujours pas le bon résultat dans la colonne W (prix d'achat).

Voici les formules que j'ai testé en W3 et qui dans chaque cas donne un message d'erreur :

=tarif(D3;E3;U3;V3;'Données pr calcul'!$B$2:$G$39)
ou
=tarif(D3;E3;U3;V3;DECALER('Données pr calcul'!A2;;;NBVAL('Données pr calcul'!$A:$A)-1;7))

Le fichier est dispo à cette adresse :
https://www.cjoint.com/?hCqeXOVkZX

Quelle(s) modification(s) dois je apporter à cette macro pour que cela fonctionne correctement ?

Merci d'avance pour votre aide.
Cordialement,
Sam357
0
Sam357 Messages postés 134 Date d'inscription dimanche 11 février 2007 Statut Membre Dernière intervention 15 mars 2018 18
29 juil. 2009 à 14:56
Re,

Je viens de mettre en ligne mon fichier test dans lequel sont finalisés les calculs annexes.
Ici !

La problématique de ce post reste toujours tristement d'actualité :

Comment obtenir le prix d'achat depuis la feuille "Données pr calcul" en colonne G vers les feuilles "habillage" et "cable" en colonne X ?

Complément d'informations :

Les colonnes DIM 1 & DIM2 sont destinées à la saisie des dimensions des articles complexes.
Les informations saisies doivent permettre de retrouver le prix d'achat correspondant à cet article pour ces dimensions.
La formule devra rechercher parmi les intervalles de l'article dans la feuille "Données pr calcul".

La colonne Longueur est en mètre (Article simple uniquement) elle est multipliée par le prix d'achat à l'unité (colonne x d'habillage ou cable).
J'aimerais, si cela était possible, mettre cette donnée dans la colonne DIM1 mais, ne sachant comment faire j'ai opter par dépit pour l'utilisation de la colonne longueur (W).

Les données obtenues dans la colonne Frais fixe (Y) proviennent de "données pr calcul" (colonne I) et sont multipliées par la Quantité souhaitée (colonneT).

Objectif de ma demande :

Obtenir en X le Prix d'achat à l'unité correspondant à l'article (cas d'un article simple) et aux dimensions DIM1 & DIM2 (cas d'un article complexe).


PS : La fonction que j'avais cité plus haut avait répondu exactement à ce que je cherchais. Malheureusement ne sachant comment l'adapter, je l'ai mis dans mon post en espérant vous faciliter la tache. Elle est toujours présente dans le module vb de mon fichier au cas où vous désireriez partir de ça.

Néanmoins, mon intention n'est pas de limiter votre marge de manoeuvre, toutes les suggestions seront les bienvenues, d'autant plus que je dois avancer au plus vite sur ce projet.

Dans mon calcul final qui est composé comme ci-dessous il me manque le prix d'achat à l'unité :
Frais fixe*Quantité souhaitée+(Longueur*Prix d'achat à l'unité)*Quantité souhaitée)

Merci d'avance pour votre aide.
Cordialement,

Sam357
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
30 juil. 2009 à 20:00
Bonsoir,

Regarde ce que ça donne, je n'ai contrôlé que pour 3-4 lignes.
J'avais intégré les coûts fixes, j'ai annulé car je ne suis pas sûr de la façon de les compter et en plus ça posait un pb si 'prix d'achat' était saisi.
La colonne longueur peut être supprimée, saisir dans dim1 et laisser dim2 vide.
La formule 'Prix de Vente estimé' a peut-être besoin d'être revue.

Macro_sur_Calcul_a_partir_d__intervalles_de_tailles.xls

eric
0