Compilation des fonctions INDEX,EQUIV,INDIRECT

Cuicui

XLDnaute Nouveau
Bonsoir à tous et à toutes,

Je travailles actuellement sur des grilles tarifaires et j'aurais besoin d'une formule qui me permette de connaître le prix en fonction de 4 variables:

- La nature de l'envoi
- La taxation appliquée
- Le point de départ
- Le point d'arrivée

Je sais "a peu près" le faire quand j'ai deux variables mais là je m'embrouille vraiment les pinceaux ...

Je vous joins un fichier en guise d'exemple :)

Merci d'avance pour votre aide .

Bonne fin de soirée
 

Pièces jointes

  • XX.xlsx
    18 KB · Affichages: 56

Robert

XLDnaute Barbatruc
Repose en paix
Re : Compilation des fonctions INDEX,EQUIV,INDIRECT

Bonsoir Cuicui, bonsoir le forum,

Où va-t-on chercher les données quand la taxation est Conventionnel, Petit colis ou Hélicoptère ?
Où sont définis les critères NEUTRE, DANGEREUX ou REFRIGERE ?


 

ROGER2327

XLDnaute Barbatruc
Re : Compilation des fonctions INDEX,EQUIV,INDIRECT

Bonjour à tous.


Bien que cela ne soit pas très clair pour moi non plus, un essai à ma sauce...​



ROGER2327
#6565


Vendredi 13 Clinamen 140 (Nativité de Maldoror, corsaire aux cheveux d’or - fête Suprême Quarte)
15 Germinal An CCXXI, 0,2050h - abeille
2013-W14-4T00:29:31Z
 

Pièces jointes

  • Copie de XX.xlsx
    25 KB · Affichages: 67

Cuicui

XLDnaute Nouveau
Re : Compilation des fonctions INDEX,EQUIV,INDIRECT

Bonjour Roger, Robert et le forum !

Tout d'abord merci à Roger pour le fichier que tu m'as renvoyé, c'est tout à fait ce que je recherche mais hier soir étant bien fatigué j'ai fais l'impasse sur quelques informations:

Je n'ai plus 4 variables mais 5...

@Robert : Etant donné que je vous ai transmis un fichier incomplet, certaines données n'étaient pas présentes (Hélicoptère, petit colis, etc)

Voici donc le fichier définitif avec toutes les informations nécéssaires :)

Merci d'avance et bonne fin d'après-midi :)
 

Pièces jointes

  • draftprice.xlsx
    26.3 KB · Affichages: 60

Dugenou

XLDnaute Barbatruc
Re : Compilation des fonctions INDEX,EQUIV,INDIRECT

Bonjour,
avec des zones nommées et une feuille qui peut être masquée pour gérer l'ensemble des possibilités.
Pour fignoler on pourrait rendre les listes déroulantes dépendantes des choix précédents
j'ai modifié l'ordre des cellules pour la recherche
Cordialement
 

Pièces jointes

  • cuicui draftprice.xlsx
    29.2 KB · Affichages: 65

Robert

XLDnaute Barbatruc
Repose en paix
Re : Compilation des fonctions INDEX,EQUIV,INDIRECT

Bonsoir le fil, bonsoir le forum,

En pièce jointe ton fichier modifié avec des plages nommées et le code ci-dessous. J'ai également supprimer certaines ligne vides dans les onglets autres que Base pour que le code fonctionne.
Le code :
Code:
Private test As Boolean 'déclare la variable test

Private Sub Worksheet_Change(ByVal Target As Range)
Dim o As Object 'déclare la variable o (Object)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim vl As String 'déclare la variable vl (Valeur Ligne)
Dim vc As String 'déclare la variable vc (Valeur Colonne)
Dim deb As Range 'déclare la variable deb (DEBut)
Dim fin As Range 'déclare la variable fin (FIN)
Dim li As Byte 'déclare la variable li (LIgne)
Dim col As Byte 'déclare la variable col (COLonne)

If test = True Then test = False: Exit Sub 'si test est "Vrai" alors test="Faux", sort de la procédure
'si le changement à lieu ailleurs que dans la plage B5:F5, sort de la procédure
If Application.Intersect(Target, Range("B5:F5")) Is Nothing Then Exit Sub
If Range("D5").Value = "" Then Exit Sub 'si la cellule D5 est vide, sort de la procédure
Set o = Sheets(Range("D5").Value) 'définit l'onglet o
Select Case Range("B5").Value 'agit en fonction de la valeur de B5
    Case "IMPORT" 'cas "IMPORT"
        Set pl = o.Cells.Find("RETOUR", , xlValues, xlWhole).CurrentRegion 'définit la plage pl
        With Range("E5").Validation 'prend en compte la validation de données de la cellule E5
            .Delete 'supprime une éventuelle validation de données existante
            .Add Type:=xlValidateList, Formula1:="=dest_1" 'utilise "dest_1" comme liste de validation de données
        End With 'fin de la prise en compte de la validation de données de la cellule E5
        With Range("F5").Validation 'prend en compte la validation de données de la cellule F5
            .Delete 'supprime une éventuelle validation de données existante
            .Add Type:=xlValidateList, Formula1:="=dest_2" 'utilise "dest_2" comme liste de validation de données
        End With 'fin de la prise en compte de la validation de données de la cellule F5
        vl = Range("E5").Value: vc = Range("F5").Value 'définit les variables vl et vc
    Case "EXPORT" 'cas "EXPORT"
        Set pl = o.Cells.Find("ALLER", , xlValues, xlWhole).CurrentRegion 'définit la plage pl
        With Range("E5").Validation 'prend en compte la validation de données de la cellule E5
            .Delete 'supprime une éventuelle validation de données existante
            .Add Type:=xlValidateList, Formula1:="=dest_2" 'utilise "dest_2" comme liste de validation de données
        End With 'fin de la prise en compte de la validation de données de la cellule E5
        With Range("F5").Validation 'prend en compte la validation de données de la cellule F5
            .Delete 'supprime une éventuelle validation de données existante
            .Add Type:=xlValidateList, Formula1:="=dest_1" 'utilise "dest_1" comme liste de validation de données
        End With 'fin de la prise en compte de la validation de données de la cellule F5
        vl = Range("F5").Value: vc = Range("E5").Value 'définit les variables vl et vc
End Select 'fin de l'action en fonction de la valeur de B5
'si le changement a lieu en B5, test="Vrai", efface la plage E5:G5, sort de la procédure
If Target.Address = "$B$5" Then test = True: Range("E5:G5").ClearContents: Exit Sub
'si le nombre de valeur dans la plage B5:F5 est inférieure à 5, test=vrai,efface la cellule G5, sort de la procédure
If Application.WorksheetFunction.CountA(Range("B5:F5")) < 5 Then test = True: Range("G5") = "": Exit Sub
For Each cel In Application.Intersect(pl, o.Columns(1)) 'boucle sur toutes les cellules cel de la colonne A de plage pl
    'condition : si la cellule est fusionnée et sa valeur contient la valeur de la cellule C5
    If cel.MergeCells = True And cel.Value Like Range("C5").Value & "*" = True Then
        Set deb = o.Cells(cel.Row, 1) 'définit la cellule deb
        Set fin = o.Cells(cel.Row + 7, 17) 'définit la cellule fin
        Set pl = o.Range(deb, fin) 'redéfinit la plage pl
        GoTo la 'va à l'étiquette la
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
test = True: Range("G5").Value = "" 'test="Vrai", G5 est effacée
la: 'étiquette
li = pl.Find(vc, , xlValues, xlWhole).Row 'définit la ligne li
col = pl.Find(vl, , xlValues, xlWhole).Column 'définit la colonne col
Range("G5").Value = o.Cells(li, col) 'place en G5 la valeur de la cellule ligne li, colonne col de l'onglet o
End Sub
Le fichier :
 

Pièces jointes

  • Cuicui_v02.xls
    101 KB · Affichages: 53

Statistiques des forums

Discussions
312 203
Messages
2 086 196
Membres
103 153
dernier inscrit
SamirN