[RESOLU] Conditions à partir d'un tableau dynamique

Enerjp

XLDnaute Junior
Bonjour tout le monde!

Tout d'abord je m'excuse pour ce titre peu attractif mais je ne savais pas vraiment comment nommer mon problème. Je m’explique :

Je dois déterminer un pourcentage en fonction de 4-5 conditions qui qui peuvent avoir 2-3 valeurs différentes (voir fichier joint). Par exemple à une maison de 1940, on va changer la toiture(30%) les fenêtres(30%) et la façade(20%). On à donc une amélioration de 80%. seulement j'ai plusieurs dates et plusieurs amélioration possibles (pour le mur, le toit ou les fenêtres).

Mes données sont dans un grand tables ou les cases respectives sont cochées (<1970 - bonne façade - double vitrage - etc).

Étant un nouvel adepte d'Excel, ma question est donc, existe-t-il un moyen autre que d'imbriquer autant fonctions SI qu'il y a de combinaisons pour distribuer ces conditions?

On m'a parlé des tableaux dynamiques et des variables tableaux, mais je ne sais pas si c'est possible au vu du grand nombre de combinaisons de conditions possibles...

Comment résoudriez-vous ce problème?

Merci d'avance

Cordialement,
Enerjp
 

Pièces jointes

  • determiner classe.xlsx
    9.5 KB · Affichages: 37
  • determiner classe.xlsx
    9.5 KB · Affichages: 39
  • determiner classe.xlsx
    9.5 KB · Affichages: 42
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Conditions à partir d'un tableau dynamique

Bonjour

tu choisis l'année, les états des toitures, fenêtre et façades dans les cellules en bleu (menu déroulant). LEs % s'affichent à côté et tu as la somme en dessous.
 

Pièces jointes

  • Copie de determiner classe.xlsx
    12.7 KB · Affichages: 35

pierrejean

XLDnaute Barbatruc
Re : Conditions à partir d'un tableau dynamique

Bonjour Enerjp

Bises Misange

Une autre version
procédure : Choisir en B13 l'age puis sélectionner les caractéristiques en C13 M13 (en cas d'erreur revenir sur la cellule fautive pour effacement)
NB: si besoin on peut ajouter des sécurités pour ne pas avoir 2 valeurs de même type
 

Pièces jointes

  • determiner classe.xlsm
    17.3 KB · Affichages: 28

Enerjp

XLDnaute Junior
Re : Conditions à partir d'un tableau dynamique

Merci pour vos réponses,

Mais je pense m’être mal expliqué.

Je dispose d'une liste (entre 900 et 1000 personnes, voir page 2) que je dois classer par tranche d'améliorations possibles (groupes: 20%;30%;etc).

il faudrait donc bien quelque chose comme ce que pierrejean m'a envoyé mais ne nécessitant de cliquer. Une sorte de tableau dynamique conditionnel...

J'ai pensé fixé mes dates en temps que variables et les différentes proposition avec un "ActiveCell.Offset" dépendant donc de la date repéré dans la liste. mais comment y rajouter des conditions?

En espérant avoir été plus claire
 

Pièces jointes

  • determiner classe.xlsx
    11.1 KB · Affichages: 25
  • determiner classe.xlsx
    11.1 KB · Affichages: 29
  • determiner classe.xlsx
    11.1 KB · Affichages: 26

pierrejean

XLDnaute Barbatruc
Re : Conditions à partir d'un tableau dynamique

Re

Vois si cela te convient

NB Je préviens : S'il est question de rajouter le rénové je HURLE
 

Pièces jointes

  • determiner classe (2).xlsm
    24.3 KB · Affichages: 29
  • determiner classe (2).xlsm
    24.3 KB · Affichages: 29
  • determiner classe (2).xlsm
    24.3 KB · Affichages: 28

Enerjp

XLDnaute Junior
Re : Conditions à partir d'un tableau dynamique

!! une MÉGA éloge pour un MÉGA Barbatruc^^ !! :D

Et plus sérieusement, merci. C'est exactement ça.

Par contre je me casse un peu les dents sur le code^^.
Code:
'fixer tablo
tablo = Sheets("Critère").Range("B1:M7")
For n = LBound(tablo, 2) + 1 To UBound(tablo, 2)
  If tablo(1, n) = "" Then tablo(1, n) = tablo(1, n - 1)
Next
tablo2 = Sheets("Données").Range("A1:O" & Sheets("Données").Range("A" & Rows.Count).End(xlUp).Row)
For n = LBound(tablo2, 2) + 1 To UBound(tablo2, 2)
  If tablo2(1, n) = "" Then tablo2(1, n) = tablo2(1, n - 1)
Next
For n = LBound(tablo2, 1) + 2 To UBound(tablo2, 1)
  For m = 6 To UBound(tablo2, 2)
    If tablo2(n, m) = "x" Then
       For p = LBound(tablo, 2) To UBound(tablo, 2)
         If tablo(1, p) = tablo2(1, m) And tablo(2, p) = tablo2(2, m) Then
            For q = 1 To 5
              If tablo2(n, q) = "x" Then
                 For s = LBound(tablo, 1) To UBound(tablo, 1)
                   If tablo(s, 1) = tablo2(2, q) Then
                      tot = tot + tablo(s, p)
                   End If
                 Next
              End If
            Next
         End If
       Next
    End If
  Next
Range("P" & n) = tot
tot = 0
Next
End Sub

Je ne comprend pas vraiment les fonctions Lbound et Ubound. Sur l'aide VBA ou sur les tutoriels des forums ça reste assez flou...
Et si on nomme les variables (m,p,q,s etc) au début c'est encore bon? (c'est juste pour savoir, je m'impose encore l'Option Explicit :eek:)

En tout cas merci bien, si je fais un truc correct vous serez tenu informé:)
 

Enerjp

XLDnaute Junior
Re : Conditions à partir d'un tableau dynamique

Re,

alors j'ai cherché un peu mais y reste encore deux-trois zones d'ombres...
J'ai commenté les zones que je pense avoir compris :

Code:
For n = LBound(tablo, 2) + 1 To UBound(tablo, 2)        'n vaut la plage (c1:m7), ou "tablo" sans la primère colonne
  If tablo(1, n) = "" Then tablo(1, n) = tablo(1, n - 1)   'balayer la 1er ligne de la plage n de droite à gauche??
Next
tablo2 = Sheets("Données").Range("A1:O" & Sheets("Données").Range("A" & Rows.Count).End(xlUp).Row)  'compte les lignes
For n = LBound(tablo2, 2) + 1 To UBound(tablo2, 2)     '"tablo2" sans la premère colonne
  If tablo2(1, n) = "" Then tablo2(1, n) = tablo2(1, n - 1)     'balayer "tablo2" si case vide (de droite à gauche?)
Next
For n = LBound(tablo2, 1) + 2 To UBound(tablo2, 1)      'tableau deux sans les deux premières lignes
  For m = 6 To UBound(tablo2, 2)                               'partie façade, vitrage et toiture ?
    If tablo2(n, m) = "x" Then                                     'repère les "x" facade, vitre et toit
       For p = LBound(tablo, 2) To UBound(tablo, 2)
         If tablo(1, p) = tablo2(1, m) And tablo(2, p) = tablo2(2, m) Then           '??
            For q = 1 To 5                                             'partie date (5 valeurs possibles)
              If tablo2(n, q) = "x" Then                            'repère les "x" des dates
                 For s = LBound(tablo, 1) To UBound(tablo, 1)   
                   If tablo(s, 1) = tablo2(2, q) Then              'fait correspondre les dates
                      tot = tot + tablo(s, p)                            '?? 
Range("P" & n) = tot                                                     '???
tot = 0                                                                       '???

En tout cas cette fonction est puissante ! Ou puis-je trouver de la documentation? c'est un tableau de référence c'est ça?
Merci pour vos lumières
 

pierrejean

XLDnaute Barbatruc
Re : [RESOLU] Conditions à partir d'un tableau dynamique

Re

Je n'ai pas examiné tes commentaires mais tu pourras les comparer aux miens dans le fichier joint
NB: puisque tu l'as souhaité je suis passé exceptionnellement à l'option Explicit (Si quelqu'un peut m'expliquer ce que cela apporte dans le cas présent )
 

Pièces jointes

  • determiner classe (2).xlsm
    25.8 KB · Affichages: 21
  • determiner classe (2).xlsm
    25.8 KB · Affichages: 27
  • determiner classe (2).xlsm
    25.8 KB · Affichages: 28

Enerjp

XLDnaute Junior
Re : [RESOLU] Conditions à partir d'un tableau dynamique

Bonjour pierrejean,

je me permet de vous demander encore une petite chose.
pour
Code:
'repetition des termes titres (facade vitrage etc)
For n = LBound(critere, 2) + 1 To UBound(critere, 2)
  If critere(1, n) = "" Then critere(1, n) = critere(1, n - 1)
Next
'mise sous forme de tableau des données (de A1 à O et a la derniere ligne non vide de la colonne A)
donnees = Sheets("Données").Range("A1:O" & Sheets("Données").Range("A" & Rows.Count).End(xlUp).Row)
'ici encore repetition des titres
For n = LBound(donnees, 2) + 1 To UBound(donnees, 2)
  If donnees(1, n) = "" Then donnees(1, n) = donnees(1, n - 1)
Next
Je ne comprend pas à quoi servent les If... ils cherchent les cases vides dans la première colonne, ligne N ok mais pourqui?
Sinon pour le reste c'est bon, mais ce n'est pas facile^^.
Bien à vous
Enerjp
 

pierrejean

XLDnaute Barbatruc
Re : [RESOLU] Conditions à partir d'un tableau dynamique

Re
les titres façade , vitre ,etc sont dans des cellules fusionnées : Excel ne voit donc ces termes que dans la 1ere colonne de la zone fusionnée

Avec
Code:
For n = LBound(critere, 2) + 1 To UBound(critere, 2)
  If critere(1, n) = "" Then critere(1, n) = critere(1, n - 1)
Next

on met dans le tableau (a l'emplacement équivalent de la cellule ) le titre récupéré dans le précédent emplacement
NB: on parcourt le tableau sur toutes les colonnes à la ligne 1
Ce qui permettra plus tard la recherche du dit titre
 

Enerjp

XLDnaute Junior
Re : [RESOLU] Conditions à partir d'un tableau dynamique

Bonjour pierrejean,

Toutes mes excuses pour le harcèlement...
Toujours à propos du programme, j'ai essayé de modifier un peu la chose. J'ai réussi à ajouter des colonnes sans trop de problème, mais je n'arrive pas à rajouter une condition.
Il faudrait que pour chaque date coché, la macro mette la valeur correspondante à cette date sur la même linge (de manière à pouvoir l'utilisé dans un calcul postérieur).
(voir Sub essai() à la suite de votre instruction)
mais il ne la place que a la fin tu tableau... Je pense que je n'utilise pas la bonne méthode.

Le problème n’étant pas vraiment le même
Dois-je ouvrir une nouvelle discussion?

Là encore, si vous pouviez me donner le nom de ce genre de manipulation, j'aimerai vraiment me cultiver sur le sujet.
Merci pour votre attention
enerjp
 

Pièces jointes

  • progcalc (2)(1).xlsm
    28.7 KB · Affichages: 31
  • progcalc (2)(1).xlsm
    28.7 KB · Affichages: 29
  • progcalc (2)(1).xlsm
    28.7 KB · Affichages: 26

pierrejean

XLDnaute Barbatruc
Re : [RESOLU] Conditions à partir d'un tableau dynamique

Re

Vois si j'ai bien compris
 

Pièces jointes

  • progcalc (2)(1).xlsm
    29.4 KB · Affichages: 30
  • progcalc (2)(1).xlsm
    29.4 KB · Affichages: 30
  • progcalc (2)(1).xlsm
    29.4 KB · Affichages: 28

Enerjp

XLDnaute Junior
Re : [RESOLU] Conditions à partir d'un tableau dynamique

Je pense que mon cas est désespéré... En tout cas j'ai bien rigolé en voyant les deux petites lignes supplémentaires^^.

Oui c'est exactement ça. Merci beaucoup.

Autant vous demander directement une piste pour la fin. Le but est de déterminer une classe (a,b,c,d,e,f) en fonction de notre résultat.
Par exemple si 100<x<150 classe A; 150<x<200 classe B; etc..
Puis-je encore utiliser cette méthode ou il vaut mieux que j'imbrique des fonctions SI ? S'il existe d'autres méthodes façon Barbatruc je suis preneur.

Encore merci pour tout, j'ai déjà fait de gros progrès grâce à vous et à ce forum.
 

Statistiques des forums

Discussions
312 527
Messages
2 089 346
Membres
104 130
dernier inscrit
badro26