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

tableau de nombres variables

  • Initiateur de la discussion Initiateur de la discussion Emmanuelle95
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

E

Emmanuelle95

Guest
Bonjour tout le monde,

je veux réaliser un tableau en 7 colonnes dont je vous joint un exemple http://cjoint.com/?dEq7n1qge7.

n21, x21, n41 et x41 sont des entiers qui doivent varier de 0 à 6 pour les "n" (Z=6) et de 0 à 8 pour les "x" (X=8).

Les colonnes avec les 6 ne servent à rien. C'est juste qu'on doit avoir A=n21*x21*6 + n41*x41*6

je souhaite conserver uniquement les lignes de combinaisons de (n21,x21,n41,x41) tel qu'on vérifie la condition suivante: 134 < A <= 140

Je suis en train d'écrire ma macro. Mais j'ai des difficultés à définir mes n21, x21, n41, x41. Je souhaite dire que chacun va occuper la plage de cellules de: [A3] sur toute la colonne A pour n21, [B3] sur tte la colonne B pour x21, ...
J'utilise RANGE mais j'ai droit à "erreur 404".

Voici la macro:
Sub combinaison1()
Dim n21 As Integer, x21 As Integer, n41 As Integer, x41 As Integer, Z As Integer, X As Integer, A As Integer, n As Integer, tableau() As Byte
n21 = Range([A3], [A65635].End(xlDown))
x21 = Range([B3], [B65635].End(xlDown))
n41 = Range([D3], [D65635].End(xlDown))
x41 = Range([E3], [E65635].End(xlDown))
A = Range([F3], [F65635].End(xlDown))


Z = 6
X = 8

For n21 = 0 To Z
For x21 = 0 To X
For n41 = 0 To Z
For x41 = 0 To X

A = n21 * x21 * 6 + n41 * x41 * 6

If 134 < A <= 140 Then
ReDim Preserve tableau(n, 5)
tableau(n, 0) = n21: tableau(n, 1) = x21: tableau(n, 3) = n41: tableau(n, 4) = x41
n = n + 1
Else: Rows(n).Delete

End If


Next
Next
Next
Next




End Sub


Merci d'avance à ceux qui pourront m'aider à résoudre ce problème.
 
Re : tableau de nombres variables

Salut pierrejean,

Dans les macros du fil que j'ai cité tu remarqueras qu'au delà de 65000 lignes je stockais la matrice des résultats dans un nom défini.

Il me semble qu'alors ce n'est limité que par la mémoire disponible.

Mais de toute façon le vrai problème est qu'Emmanuelle ne voit pas très bien la logique de ce qu'il faut rechercher (et nous non plus).

A+
 
Re : tableau de nombres variables

pour réduire encore les possibilités, j'ai des conditions de temps à imposer.

En effet, un camion ne doit pas faire plus de 7h (exemple) dans sa journée mais il ne doit pas faire moins de 6h30, puisqu'on le loue pour la journée entière.
 
Re : tableau de nombres variables

et il y a des conditions de coût.

Mes camions doivent évacuer le maximun de déblais, en respectant des conditions de temps et il faut que ça coûte le moins cher possible.

Est-ce qu'il vaut mieux avoir des gros camions qui évacuent plus mais coûtent plus chers ou des plus petits qui évacuent moins mais coûtent moins chers?
A cela s'ajoute que s'ils évacuent plus, il y aura surement moins de camions.
 
Re : tableau de nombres variables

je vous ai expliqué qu'une toute petite partie du problème.

mes camions peuvent faire du simple fret et du double fret sur une même journée. Cela signifie qu'ils auront des temps de rotations différents selon le trajet.

J'aurais une condition du genre:
For Y = x22 To x42
For W = x23 To x43

MIN * Y <= n22 * T22 * x22 + n42 * x42 * T42 <= MAX * Y Xor MIN * W <= n23 * T23 * x23 + n43 * T43 * x43 <= MAX * W sinon A = 0

MIN =6h
MAX=7h

si ces 2 conditions sont vérifiée alors Y= nb de camions exacts (pour un 8m3)
W= nb de camions exacts (pour un 10m3)
 
Re : tableau de nombres variables

J'ai imposé une fonction sur le temps:
For Y = x22 To x42
For W = x23 To x43

If MIN * Y <= n22 * T22 * x22 + n42 * T42 * x42 And n22 * T22 * x22 + n42 * T42 * x42 <= MAX * Y And MIN * W <= n23 * T23 * x23 + n43 * T43 * x43 And n23 * T23 * x23 + n43 * T43 * x43 <= MAX * W Then

Ligne = Ligne + 1


MIN=6H
MAX=7H.

Y= nb de camions en 8m3
W=nb de camions en 10m3.

Cette condition permet de réduire nettement le nombre de combinaisons.

Mais cette condition n'est pas suffisante, elle est est trop générale. Si je décompose mon nb de camions en fonction du nb de tours simple fret/double fret, j'ai des cas où mon camion travaillera plus de 7h.

Un exemple:

n22=3 x22=2 n42=1 x42=5
n=nb de tours par camions par jour
x=nb de camions par jour

(n22, x22)= trajet simple fret
(n42,x42)= trajet double fret

en simple fret: nb de tours total=3*2=6 tours
en double fret: nb de tours total=1*5=5 tours

le simple fret est associé au temps de rotation T22 (=1,2722 h)
et le double fret à T42 (=2,175 h).

Avec ma condition sur les temps de rotation: 6h * X <=3*2*1,2722 + 1*5*2,175<= 7h * X
X=3 camions.

j'ai 6 tours + 5 tours à faire faire par 3 camions.

Camion 1: 3 tours en simple fret + 1 tour en double: Ttot= 5,99 h
Camion 2: 3 tours en simple fret + 1 tour en double: Ttot=5,99 h
Camion 3: 3 tours en double: Ttot=6, 525h

on se rend compte qu'au final le camion 1 et 2 ne font pas un minimun de 6h.


Je ne vois pas quelle structure utilisée. Pour moi ce n'est pas qu'une simple boucle.
Si je fais pour le cas du 8m3:
For i=2 to Y (les cas Y=0 et Y=1 sont forcément vérifiés).

For b1i =0 to B22 (B22=nb de tours totals en simple fret)
For b2i =0 to B42 (B42=nb de tours totals en double fret)

tel que j'ai: 6h<= b1i*T22 + b2i * T42 <= 7h.

For each i somme(b1i)=B22
somme(b2i)=B42


je ne sais pas si je suis assez claire.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
276
Réponses
5
Affichages
900
Réponses
4
Affichages
721
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…