Trouver un minimum d'échantillons Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Matth67
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 16 septembre 2014
Version d'Excel : 2007

Message par Matth67 » 16 septembre 2014, 18:19

Bonjour à tous,

Je me heurte à un soucis actuellement dans le cadre de mes études.
Le mini projet sur lequel je travaille consiste, pour partie, à poser des filets métalliques architecturaux dans des structures à ossatures métallique. Le bâtiment repose sur des poteaux entre lesquels on doit poser les filets.

L'écartement des poteaux varie et les mesures entre axe sont assez dispersées.
J'ai 5 bâtiments à traiter, dont chacun repose sur 26 poteaux.

On dispose d'une marge de manoeuvre pour la dimension de ces filets :
- au maximum le filet peut mesurer L-160 mm
- au minimum le filet peut mesurer L-320 mm
Avec L l'entraxe entre deux poteaux dans la travée concernée.

Le but de la manoeuvre est de calculer le nombre minimal de filets différents pour un problème d'optimisation.

J'ai tout d'abord fait le relevé de ces entraxes et les ai mis dans une colonne. J'ai ensuite fait deux colonnes mini et maxi en retranchant les cotes ci-dessus.
Mon idée première était de faire travailler le solveur dans lequel j'ai mis pour cellule cible le nombre de largeur de filet différentes qui m'est donné par la formule suivante :
=SOMME((FREQUENCE(A:A;A:A)>0)*1)
Ensuite j'ai mis mes conditions : chaque largeur de filet doit être inférieure au maxi et supérieur au mini
J'ai demandé la valeur min de la cellule cible mais le solveur me donne comme résultat autant de filet qu'il existe de travée...

Après je me suis mis à réfléchir sur une boucle VBA mais malheureusement je n'ai pas le niveau pour résoudre mon problème.

Si vous pouviez m'aiguiller dans ma démarche je vous en serais très reconnaissant.

A bientôt.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 7'787
Appréciations reçues : 211
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 16 septembre 2014, 21:20

Bonsoir,

peux-tu nous mettre ton fichier ?
M
Matth67
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 16 septembre 2014
Version d'Excel : 2007

Message par Matth67 » 18 septembre 2014, 10:20

Bonjour,

Voilà le fichier en question.
J'ai mis en couleur les plages sur lesquelles je travaille dans l'imédiat.

Merci.
RELEVES filets.xls
(91.5 Kio) Téléchargé 13 fois
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 7'787
Appréciations reçues : 211
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 18 septembre 2014, 14:05

Bonjour,

une proposition via une macro, sur base de ce que j'ai compris.

je compte le nombre d'intervalles min-max qui ne se recouvrent pas.
RELEVES filets.xls
(95.5 Kio) Téléchargé 18 fois
M
Matth67
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 16 septembre 2014
Version d'Excel : 2007

Message par Matth67 » 18 septembre 2014, 15:42

Oui c'est tout à fait ça. Mais j'ai du mal à comprendre le premier if... Que se passe-t-il dans la ligne range... ?
En tout cas merci pour votre aide!
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 7'787
Appréciations reçues : 211
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 18 septembre 2014, 16:32

bonjour,

code commenté brièvement.
Sub solve()
'1 )suppose colonne L triée en ordre croissant
'2) intervalle espace compris entre min et max
' effacer colonne L
Range("L15:L67").ClearContents
' on prend les maxima un à un, i=pointeur ligne des maxima
For i = 15 To 67
' pour chaque maximum, on prend les minima un à un, j =pointeur ligne des minima
 For j = i + 1 To 67
 ' si le maximum de la ligne i est < que le minimum de la ligne j, les intervalles ne se recouvrent plus
  If Cells(i, "K") < Cells(j, "J") Then
   'on met max de la ligne i comme dimension retenue pour toutes les lignes où les intervalles se recouvrent
   Range(Cells(i, "L"), Cells(j - 1, "L")) = Cells(i, "K")
   'on détermine la ligne du maximum suivant à prendre en compte
   i = j - 1
   Exit For
  End If
 Next j
Next i
' traitement de la dernière ligne max, si pas encore traitée
If Cells(67, "L") = "" Then Cells(67, "L") = Cells(67, "J")
End Sub
M
Matth67
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 16 septembre 2014
Version d'Excel : 2007

Message par Matth67 » 20 septembre 2014, 18:20

Bonjour,

Vraiment très utile, merci beaucoup.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message