Résultat dans une tête box selon trois critères

Bonsoir à tous,

Je viens vers vous encore une fois vous embêter a croire que j’aime bien vous embêter lol je cherche toujours à apprendre encore plus

Sur ma feuil1 j’ai un tableau avec plusieurs éléments en colonne j’ai plusieurs matières de peinture avec dans les deux premières colonnes de matières de peinture avec une dimension inférieure est la seconde colonne avec une dimension supérieure les autres colonnes ont un format supérieur à la deuxième.

Dans mon formulaire j’ai quatre combos box il y a combos box1 qui correspond à la technique il y a combos box2 et combos box3 qui correspondent au format et combos box4 qui correspond au support

Je dois avoir un résultat dans la textbox sois automatique sois en cliquant sur le bouton.

J’ai essayé quelques formules que vous verrez dans le classeur mais qui apparemment ne fonctionne pas pouvez-vous dans un premier temps m’aiguiller pour j’essaie de trouver la solution s’il vous plaît j’ai essayé avec la formule if mais je pense que ce n’est pas le bon choix et si c’est une boucle je ne sais pas laquelle choisir.

En vous remerciant d’avance.

Resultat_selon_trois_critere.xlsm (21,6 Ko)

Rebonjour

Attention cette ligne de code est incorrect

Me.TextBox1.Value = Feuil1.Range(Lig, Col).Value

Feuil1 est le nom d’un onglet tu dois l’appeler avec l’instruction Sheets comme ceci :

Sheets(« Feuil1 »)

Range(Lig, Col) est une instruction qui fait appel à des cellules avec la lettre de la colonne et le numéro de sa ligne
Par exemple pour la première cellule de la feuille 1° colonne 1° ligne tu mettras : Range(« A1 »)

ici dans les parenthèses tu te sers de variable qui ne représente que des chiffres déterminés quelques lignes de code avant :

Lig = Feuil1.Range(« A » & Rows.Count).End(xlUp).Row - 1

Col = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column

ces variables portent des chiffres aucune ne porte une lettre

il faut utiliser l’instruction Cells pour cibler une cellule avec des chiffres en mettant entre parenthèse le chiffre de la ligne en premier celui de la colonne en second comme ceci :

Cells(Lig,Col)

Ce qui donne au final cette ligne de code :

Me.TextBox1.Value = Sheets(« Feuil1 »).Cells(Lig, Col).Value

Corriges ainsi et cela devrait mieux le faire

Dis moi

Rebonsoir

J’ai compris ce que tu voulais dire je l’ai corrigé par contre ça me donne un résultat qui n’est pas dans mon tableau en faite pour être plus explicite :

-Au niveau des colonnes

Les deux premières : la colonne B représente les tableaux à l’acrylique ou à huile inférieure à 50 × 60 cm
la colonne C représente les tableaux à l’acrylique et à huile supérieure à 50 × 60 cm

Les colonnes D E F G H I J elle représente des tableaux de toutes tailles avec la technique suivante (aquarelle, tempéra, gouache, sanguine, crayons, pastel et feutre)

Sur ce grand tableau au niveau de toutes les colonnes il y a trois lignes qui sont placées en A6 :A7 :A8 qui représentent le support sur lequel a été par le tableau.

Avec ces quatre critères mêmes qui sont soient c’est inférieure à la dimension colonne B sur une technique à l’acrylique ou à huile sur un support et cela donne une somme qui est dans la cellule correspondante pour que vous puissiez comprendre plus précisément regarder le tableau qui se trouve en feuille un je sais pas si pour vous pouvez comprendre j’ai essayé d’être plus explicite possible pour vous puissiez m’aider et m’aiguiller en vous remerciant d’avance.

Resultat_selon_trois_critere.xlsm (23,6 Ko)

Ci-joint ma proposition

J’ai inclus une macro « Macro1 » pour faire des tests

Je ne sais pas si j’ai bien compris toujours est il qu’en fonction du choix de la Technique et du statut je récupère la valeur de la colonne de la Technique et la valeur de la ligne du Statut sauf pour la Technique « Acrylique » ou « Huile » pour lesquelles les formats sont demandés afin de choisir la bonne colonne (B ou C, si 1° format < 50 ou 2° format < 60 colonne B sinon colonne C) la ligne étant toujours celle du Statut et de récupérer le chiffre

J’ai modifié ton traitement pour l’alimentation de la combobox1 correspondant au critère « Technique » et de rajouter un « s » à « Huile » ainsi « Huiles » afin d’harmoniser cette donnée avec la ligne 1 de l’onglet « Feuil1 »

Je ne sais pas si tout cela répond à tes attentes

Testes et dis moi

Resultat_selon_trois_critere2.xlsm (25,8 Ko)

Bonjour @FFO

Merci pour ta proposition qui fonctionne correctement par contre pourrais-tu me détailler cette partie du code que je te mets pour que je puisse comprendre plus clairement j’ai vaguement compris son fonctionnement mais est-ce que pour toi tu peux me détailler chaque ligne si c’est possible pour que je puisse comprendre complètement son fonctionnement stp en te remerciant d’avance.

If Lig > 0 Then
Col = 0
Col = Sheets("Feuil1").Rows("1:1").Find(What:=ComboBox1, _
After:=Sheets("Feuil1").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Column

    If Col > 0 Then
        If ComboBox1 = "Huiles" Or ComboBox1 = "Acrylique" Then
            If ComboBox2 < 50 Or ComboBox3 < 60 Then
                Col = 2
                Else
                Col = 3
            End If
        End If
        UserForm1.TextBox1.Value = Sheets("Feuil1").Cells(Lig, Col).Value
    End If

End If

Bonjour

Ravi que cela te convienne j’avais un doute

Pour le code voici son fonctionnement

Pour cibler la cellule dont on doit récupérer la donnée 2 variables :

Lig qui cible le numéro de la ligne
Col qui cible le numéro de la colonne

Dans une première partie en amont qui cible le numéro de la ligne avec la variable Lig
Si celle-ci a été trouvée :

If Lig > 0 Then

je lance la procédure pour déterminer le numéro de la colonne
Pour cela je mets la variable concernée à 0

Col = 0

Puis avec la ligne de code qui suit sur la ligne 1 je cherche la valeur choisie dans la Combobox1 et de récupérer le numéro de la colonne

Sheets(« Feuil1 »).Rows(« 1:1 »).Find

onglet Feuil1 ligne 1 cherche

What:=ComboBox1

Quoi : la valeur de la Combobox1

After:=Sheets(« Feuil1 »).Range(« A1 »)

Aprés la cellule A1 de l’onglet Feuil1

LookIn:=xlValues

A scruter les valeurs des cellules

LookAt:=xlWhole

Chercher la donnée intégrale ni plus ni moins

à l’inverse il aurait fallu mettre :

LookAt:=xlPart

on aurait chercher une partie dans les données scrutées

.Column

de relever le numéro de la colonne

Si celui-ci est trouvé elle est affectée à la variable Col :

Col = Sheets(« Feuil1 »).Rows(« 1:1 »).Find(What:=ComboBox1, _
After:=Sheets(« Feuil1 »).Range(« A1 »), LookIn:=xlValues, LookAt:=xlWhole).Column

Petite précision qui a son importance si la donnée n’est pas trouvée car inexistante cela provoque un Bug
C’est pour cela qu’il faut rajouter une instruction juste avant pour l’éviter si les recherches avec cette commande sont aléatoires du fait des données à rechercher

Juste avant il faut mettre cette ligne de code :

On Error Resume next

Qui a pour but de faire progresser le traitement même si la donnée n’est pas trouvée et ce sans bug ni interruption

Je ne l’ai pas mise et j’ai été confronté à cette situation avec la donnée « Huile » car sur la ligne 1 de l’onglet Feuil1 c’est « Huiles » avec un « s »

Si toutes les données dans la Combobox1 sont en ligne 1 onglet Feuil1 écrites à l’identiques cette parade est inutile voir handicapante car elle occulte toute autre anomalie de code qui suit hypothéquant le résultat final sans aucune alerte ce qui est dommageable pour sa compréhension

Si la variable Col a une valeur autre que 0 donc la donnée de la Combobox1 a été trouvé avec le numéro de sa colonne

If Col > 0 Then

si la donnée de la Combobox1 est « Huiles » ou « Acrylique »

If ComboBox1 = « Huiles » Or ComboBox1 = « Acrylique » Then

j’analyse la donnée de la Combobox2 et de la Combobox3 :

If ComboBox2 < 50 Or ComboBox3 < 60 Then

Si Combobox2 et inférieur à 50 ou Combobox3 inférieur à 60 alors j’affecte à la variable Col la valeur 2 sinon la valeur 3 (Colonne B sinon Colonne C)

Col = 2
Else
Col = 3

A la fin de cet ensemble de lignes de code j’ai déterminé la variable Lig et la variable Col donc j’ai ciblé avec ces 2 variables la ligne et la colonne de la cellule dont on doit récupérer la donnée à mettre dans le TextBox1 du formulaire :

UserForm1.TextBox1.Value = Sheets(« Feuil1 »).Cells(Lig, Col).Value

J’espère avoir été claire dans ces explications

Si tu souhaites d’autres précisions à ta disposition