Tri de résultat

Bonjour

J'ai essayé de simplifier mon problème avec le fichier que je vous joints. En gros, l'utilisateur va devoir choisir des valeurs pour X, Y et Z, et en fonction de ça un tableau va se remplir.

Le tableau de résultat contient des valeurs représentant un résultat global et des résultats détaillés (genre catégorie et sous catégorie).

Les valeurs entre A et D sont tous les résultats possibles, des choix vont être éliminer en fonction du choix de l'utilisateur.

Exemple: Si l'utilisateur choisi X1,Y1 et Z1, le tableau doit afficher A et C (avec leurs sous catégories A1, A2, A3, C1,C2 et C3)

  • Comment faire ça au plus simple?
  • Est ce qu'il y a moyen de dire à Excel que A1, A2 et A3 sont des sous catégories de A?
  • Est ce que dans ce cas c'est possible de dire dans l'algorithme qu'il faut afficher "A", et lui il comprend qu'il faut afficher A avec ses sous catégories A1, A2 et A3

Je vous remercie pour votre aide, je suis nouveau en VBA donc je ne connais pas toute les fonctions.

bonsoir

pour l'instant ,le plus dur a comprendre (pour moi) ;c'est la relation entre les x y z et les lettres ; car tu nous dis

Exemple: Si l'utilisateur choisi X1,Y1 et Z1, le tableau doit afficher A et C (avec leurs sous catégories A1, A2, A3, C1,C2 et C3)

en vertu de quelle regle ;pour quoi pas B et D ou Cet D et que se passe- t-il si le choix est x1 y2 z3 par exemple

cordialement

Bonjour,

pour compléter les questions A1 commence par A comme ... A de la colonne précédente.

Vraiment ça ou tu as mis un cas particulier que tu n'as pas en réalité ?

A trop simplifier on obtient une réponse qui ne convient pas. Il le faut, mais en restant proche du réel.

eric

re

en attandant plus voila comment extraire les valeurs

15adamosh1.xlsm (15.07 Ko)

cordialement

Bonjour

Voici plus clairement ma question et ce que je veux.

Le premier tableau en haut représente tous les résultats possibles.

Ensuite, j'ai mis deux exemple: si l'utilisateur choisi X=Eau; Y=Eau et Z=<200°C.... Je veux que mon programme m'affiche le tableau "Résultat1"

Si l'utilisateur choisi X=Eau; Y=Air et Z=<200°C.... Je veux que mon programme m'affiche le tableau "Résultat2"...

Donc, il y a une série de combinaison possible à faire (des fluides et des températures) et en fonction de ces combinaison, le tableau affichera des technologies possibles (Ceci devra être programmé bien sur sur VBA)

Mais je ne sais pas comment faire.

Pouvez vous me faire la programmation pour un cas? (je m'adapterai pour les autres)

if cells(3,1)=Eau and cells(3,2)=Eau and cells(3,3)=<200°C Then

.....

End if

Voila, j'espère que c'est plus clair cette fois.

Je vous remercie d'avance.

14adamosh1.xlsm (15.00 Ko)

Bonjour,

le pb c'est que nulle part tu n'as inscrit que que pour eau, eau, <200°C il te faut ça.

Le programme ne va pas appeler un plombier pour avoir les renseignements.

Il faudrait remplir les 2 tableaux à droite.

eric

12adamosh1.xlsm (15.58 Ko)

re

toujours la meme interrogation

pour : AIR .AIR. <200 ???????

quelle est la relation entre AIR ; EAU ; la Temp et ton tableau " tout les resultat possibles "

cordialement

si tu remplis les tableaux de droite ça devrait être bon

eric

16adamosh1.xlsm (22.47 Ko)
eriiic a écrit :

si tu remplis les tableaux de droite ça devrait être bon

eric

Merci Eriiic, C'est ce que je cherchais. En fait, j'ai pas mal de programme à faire de la même façon.

Pourrais-tu s'il te plait m'expliquer le code et les formules que tu as utilisé?

(Je vais tout de même pas demander que tu fasses pour moi tous les programmes)

Je te remercie d'avance.

Bonjour,

code commenté :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range, c1 As Range, result
    Dim lig As Long, col As Long, i As Long
    If Not Intersect(Target, [A3:C3]) Is Nothing Then
        ' si la cellule modifiée est A3 ou C3
        ' rechercher Z dans la colonne H (début du tableau de z
        Set c = [H:H].Find([C3].Value, , xlValues, xlWhole)
        'ligne de X
        lig = Range(c, c.End(xlDown)).Find([A3].Value, , xlValues, xlWhole).Row - c.Row
        ' colonne de Y
        col = Range(c, c.End(xlToRight)).Find([B3].Value, , xlValues, xlWhole).Column - c.Column
        ' result = intersection ligne X,colonne Y, du tableau Z qu'on éclate dans result avec "," comme séparateur
        result = Split(c.Offset(lig, col), ",")
        Application.EnableEvents = False
        ' nettoyage de la plage résultat
        [A5].CurrentRegion.Offset(1).Clear
        For i = 0 To UBound(result)
            ' rechercher chaque élément de result (Plaques,Tubes,...) dans E
            Set c = [E:E].Find(result(i), , xlValues, xlWhole)
            If Not c Is Nothing Then
                 'si trouvé
                 ' ligne libre suivante plage résultat
                lig = 5 + [A5].CurrentRegion.Rows.Count
                ' plage à copier = plage fusionnée en E élargie à 2 colonnes
                Set c = c.MergeArea.Resize(, 2)
                ' mettre en A:B valeurs de E:F, encadrer
                With Cells(lig, 1).Resize(c.Rows.Count, c.Columns.Count)
                    .Value = c.Value
                    .Borders.LineStyle = xlContinuous
                    .Resize(, 1).Borders(xlInsideHorizontal).LineStyle = xlNone
                End With
            End If
            'élément suivant
        Next i
        Application.EnableEvents = True
    End If
End Sub

et n'hésite pas à te servir de F1 pour avoir l'explication des fonctions. L'aide excel est très bien faite et complète.

eric

eriiic a écrit :

si tu remplis les tableaux de droite ça devrait être bon

eric

Salut Eric,

J'ai une dernière demande s'il te plait. J'ai modifé un peu le programme, celui ci doit réagir à chaque variation dans la plage [B2:D4].

Il calcule le max de la valeur de température dans la cellule N1, et le max de la pression dans la cellule P1.

Je veux mettre une condition de plus, pour dire: si la température est dans telle marge, il faut choisir telle ligne (inférieure à 200°C, il faut choisir la ligne 3)

la même chose pour la pression (mais on choisissant une colonne N ou U).

et dire que "c" est l'intersection de la ligne et la colonne.

Après le reste du programme sera le même que la dernière fois.

Mais je n'arrive pas à affecter une ligne ou une colonne à une variable, ni de déterminer l'intersection entre les deux.

Pourrais tu me montrer comment faire s'il te plait?

Merci.

Bonjour,

je ne comprend pas bien l'intérêt de copier à l'identique.

Tu ne peux pas mettre un plan pour masquer/afficher sur demande ces 3 dernières colonnes si elles te gênent ?

eric

Salut,

Je n'ai bien compris ta réponse.

En fait, j'ai plusieurs tableau qui se ressemblent, mais leur contenu n'est pas le même. (Il va changer en fonction de T et de P)

Donc à chaque fois, il faudra que j'aille au tableau qui correspond à mon étage de température et mon étage de pression.

Sauf que cette fois, je laisse à l'utilisateur le choix de mettre des "valeur", et en fonction de ces valeurs, je me mettrai dans une marge de valeur et ainsi dans un tableau.

C'est mon idée.

((C'est possible qu'il y a plus simple, mais j'avoue que je suis débutant en VBA, donc mon idée n'est pas forcément la meilleure))

Je n'ai bien compris ta réponse.

C'est tout à fait normal, elle était destinée à un autre demandeur. Je ne sais pas comment j'ai fait mon compte

Je n'ai pas eu le temps de regarder encore...

eric

Ok pas de soucis

En attendant ta réponse

Merci

suite...

J'ai jeté un oeil à tes modifs. Le moins que l'on puisse dire c'est que ce ne sont pas des améliorations.

Repartons du code que je t'avais fourni.

Tu avais ;

result = Split(c.Offset(lig, col), ",")

Maintenant tu veux doubler tes tableaux selon la pression, tes nouveaux tableaux étant 7 colonnes plus loin.

Ils sont identiques en taille, et en libellés des lignes et des colonnes. Les .find faits sur la 1ère série de tableau restent donc valable pour la 2nde série.

Tu as juste à ajouter une variable qui décalera l'offset colonne des tableaux d'autant.

En résumé :

Dim offsetCol As Long
'...
If pMax > 10 Then offsetCol = 7
result = Split(c.Offset(lig, col + offsetCol), ",")
'...

remplacer pMax par ta ref de cellule, c'est pour la lisibilité.

eric

NB : vite fait, non testé...

Rechercher des sujets similaires à "tri resultat"