Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 (RESOLU) Affichage des résultats dans un tableau selon des conditions

chaelie2015

XLDnaute Accro
Bonjour Forum
Je dispose d'un tableau en jaune, de la plage AO12:EJ62, qui doit être rempli manuellement uniquement sur les colonnes impaires. Une fois cela fait, les données de ces colonnes impaires seront transférées vers un tableau vert.(le code pour cette tache est fait)
Maintenant, je souhaite afficher les résultats de l'évaluation de ce tableau vert en fonction des conditions définies dans deux colonnes,
'Note' (colonne AH) et
'Condition' (tableau AJ13:AM62),
dans un autre tableau de couleur bleue (Ce tableau bleu aura la même taille que le tableau vert)
Les critères pour afficher les résultats sont les suivants (par exemple, pour la première ligne N° 13) :
1. Si la cellule AJ13 est égale à 'Egal (nombre)', 'Egal (texte)' ou 'Une plage', alors nous comparons l'ensemble des cellules de la ligne 13 ( une par une)du tableau vert avec la valeur de la cellule AK13. Si elles sont égales, la valeur (notation) de la cellule AH13 du tableau bleu est affichée dans toutes les cellules de la ligne 13 (une par une). Sinon, '0' est affiché.
2. Lorsque la cellule AJ13 est égale à 'Supérieur ou égal' ou 'Inférieur ou égal', nous identifions dans le tableau vert la valeur la plus élevée ( dans le cas Supérieur ou égal) , à laquelle nous accordons la note complète. Pour les autres valeurs, nous utilisons la règle de trois pour déterminer leurs notations. Les résultats de ces calculs sont ensuite affichés dans le tableau bleu, spécifiquement pour la ligne 13.
Merci
 

Pièces jointes

  • CHARLIE AFFICHER RESULTATS SOUS CONDITIONS.xlsm
    53.9 KB · Affichages: 8
Solution
Bonsoir,
A tester, même si je ne comprends pas tout, ça donne les bons résultats.
J'ai rajouté un bouton pour masquer le tableau vert.
Je ne sais pas ce que fait votre macro masquer le tableau jaune mais il me semble complexe.
Si c'est juste pour masquer/démasquer, on peut faire pour le tableau vert :
VB:
Sub AfficherMasquerTableauVert()
    Application.ScreenUpdating = False
    [EM:GJ].EntireColumn.Hidden = Not ([EM:GJ].EntireColumn.Hidden)
End Sub
Dites moi si tout est ok.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chaelie,
Je ne comprend pas dans votre fichier le contenu de GL13:GO13 car on a "Egal (nombre)" et 12 en AK13, et suivant cette règle :
On devrait obtenir 0,0,0,0 puisque aucune valeur n'est égale à 12.
Un peu d'explications seraient les bienvenues.
 

chaelie2015

XLDnaute Accro
Bonjour sylvanu
Vous avez raison, il s'agit effectivement d'une erreur de frappe. Initialement, j'avais saisi le chiffre 2 dans le tableau des conditions.
Merci pour votre remarque
Voici le bon fichier.
A+
 

Pièces jointes

  • CHARLIE AFFICHER RESULTATS SOUS CONDITIONS.xlsm
    53.9 KB · Affichages: 3

chaelie2015

XLDnaute Accro
Re
Dans la première ligne de chaque tableau se trouve le nom des entreprises respectives.
Dans le tableau "Note", chaque ligne attribue une note spécifique. Le tableau "Condition" contient les conditions préalablement déterminées pour chaque ligne, utilisées comme référence.
Le tableau vert répertorie les données saisies pour chaque entreprise, tandis que le dernier tableau jaune attribue une note à chaque entreprise en fonction des valeurs de référence et des conditions spécifiées.
A+
 

chaelie2015

XLDnaute Accro
Bonsoir Sylvanu
Je te remercie pour votre réponse, elle est presque parfaite.
En ce qui concerne le cas "Inférieur ou égal", nous devrions appliquer la règle de trois inversée.
ci rattaché le fichier exemple (voir la partie grise)
Merci
 

Pièces jointes

  • CHARLIE AFFICHER RESULTATS SOUS CONDITIONS.xlsm
    57.7 KB · Affichages: 1

chaelie2015

XLDnaute Accro
Re
Après vérification et teste
la correction est comme suit :
Case "Inférieur ou égal"
Mini = 9 ^ 9
For j = 1 To UBound(T, 2)
If T(i, j) <= Mini Then Mini = T(i, j)
Next j
For j = 1 To UBound(T, 2)
If T(i, j) <= Seuil1 Then T(i, j) = Note * Mini / T(i, j) Else T(i, j) = 0 ' <---- correction ICI
Next j
Si la valeur de l'élément est inférieure ou égale à Seuil1, elle est remplacée par le produit de la variable Note et la valeur minimale de la ligne (Mini) divisée par l'élément lui-même.
Sinon, la valeur de l'élément est définie à zéro.
Merci Sylvanu
A+
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
A tester, même si je ne comprends pas tout, ça donne les bons résultats.
J'ai rajouté un bouton pour masquer le tableau vert.
Je ne sais pas ce que fait votre macro masquer le tableau jaune mais il me semble complexe.
Si c'est juste pour masquer/démasquer, on peut faire pour le tableau vert :
VB:
Sub AfficherMasquerTableauVert()
    Application.ScreenUpdating = False
    [EM:GJ].EntireColumn.Hidden = Not ([EM:GJ].EntireColumn.Hidden)
End Sub
Dites moi si tout est ok.
 

Pièces jointes

  • CHARLIE AFFICHER RESULTATS SOUS CONDITIONS (V2).xlsm
    56.6 KB · Affichages: 2

chaelie2015

XLDnaute Accro
Bonsoir
Tu as parfaitement saisi et bien compris, merci.
A+
 

chaelie2015

XLDnaute Accro
Bonjour
Je reviens vers vous pour ajuster une partie du code de Sylvanu concernant la fonction 'Egal(texte)' dans ce code ci dessous :
VB:
Sub Calcul()
Dim T, Note, Condition, Seuil, i%, j%
T = [EM12].CurrentRegion
For i = 2 To UBound(T)
    Note = Cells(i + 11, "AH")
    Condition = Cells(i + 11, "AJ")
    Seuil1 = Cells(i + 11, "AK"): Seuil2 = Cells(i + 11, "AM")
    Select Case Condition
        Case "Egal (nombre)"
            For j = 1 To UBound(T, 2)
               If T(i, j) = Seuil1 Then T(i, j) = Note Else T(i, j) = 0
            Next j
        Case "Egal (texte)"
           For j = 1 To UBound(T, 2)
            If T(i, j) = "Programmable" Then T(i, j) = Note Else T(i, j) = 0 ' ICI je veux le changement
           Next j
        Case "Une plage"
            For j = 1 To UBound(T, 2)
               If T(i, j) >= Seuil1 And T(i, j) <= Seuil2 Then T(i, j) = Note Else T(i, j) = 0
            Next j
        Case "Supérieur ou égal"
            Maxi = 0
            For j = 1 To UBound(T, 2)
               If T(i, j) >= Maxi Then Maxi = T(i, j)
            Next j
            For j = 1 To UBound(T, 2)
               If T(i, j) >= Seuil1 Then T(i, j) = Note * T(i, j) / Maxi Else T(i, j) = 0
            Next j
        Case "Inférieur ou égal"
            Mini = 9 ^ 9
            For j = 1 To UBound(T, 2)
               If T(i, j) <= Mini Then Mini = T(i, j)
            Next j
            For j = 1 To UBound(T, 2)
               If T(i, j) <= Seuil1 Then T(i, j) = Note * Mini / T(i, j) Else T(i, j) = 0
            Next j
   End Select
Next
[GL12].Resize(UBound(T, 1), UBound(T, 2)) = T
MsgBox "La notation a été finalisée et est prête à être consultée."
End Sub
Je désire substituer le terme 'Programmable' par un texte variable que je peux saisir, qu'il soit en majuscules ou en minuscules.
merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chaelie,
Je désire substituer le terme 'Programmable' par un texte variable que je peux saisir, qu'il soit en majuscules ou en minuscules.
Le choix de faire une action ou une autre est régit par la condition:
If T(i, j) = "Programmable" Then
Mais pour prendre la décision il faut savoir quelle chaine trouver. Donc si cette chaine est variable, comment la reconnaitre ?
Il est possible de faire le contraire : Si Manuelle on met 0 sinon si c'est autre chose on met la valeur avec :
VB:
Case "Egal (texte)"
           For j = 1 To UBound(T, 2)
            If T(i, j) = "Manuelle" Then  T(i, j) = 0  Else T(i, j) = Note
           Next j
Sinon précisez sur quelle chaine on doit construire la décision.
 

chaelie2015

XLDnaute Accro
Bonjour Sylvanu
La chaîne alphanumérique saisie sera comparée à la valeur précédemment enregistrée comme référence dans le tableau de conditions.
À titre d'exemple, dans le tableau des 'conditions', je choisis 'Égal(texte)'. Ensuite, dans la même ligne, je spécifie le texte, par exemple 'Oui'. Dans ce cas, ce texte devient un critère de comparaison avec les textes qui seront saisis dans le tableau jaune pour la même ligne.
Donc tous les textes saisis, qu'ils soient en majuscules ou en minuscules, qui correspondent au texte de référence sont considérés comme égaux.
A+
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Donc si j'ai bien compris le critère est l'égalité entre la colonne AK et le tableau vert.
Si j'ai en AK14 OUI, je filtre sur OUI, oui, Oui....
Si c'est ça il suffit de faire :
VB:
Case "Egal (texte)"
    For j = 1 To UBound(T, 2)
          If LCase(T(i, j)) = LCase(Seuil1) Then T(i, j) = Note Else T(i, j) = 0
    Next j
"Lcase" permet de mettre la chaine en minuscules, donc teste sans tenir compte de la casse.
 

Pièces jointes

  • CHARLIE AFFICHER RESULTATS SOUS CONDITIONS (V3).xlsm
    57.1 KB · Affichages: 5

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…