Tu pourrais envisager d'utiliser un langage compilé comme VB.net ou Caiguisé et un DataCridView pour l'affichageEuh, pour passer de la 2CV à la Formule1, c'est pas une mince affaire. Mais du moment que je n'envisage pas les 24h du Mans avec ma 2CV...Je reste sagement à ma place d'utilisateur: Pas "développeur".
Option Explicit 'OPTIONS '======= 'valeur dernière ligne Dim last As Integer 'Valeur par Machine (initialisation) Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Dim e As Integer Dim f As Integer Dim g As Integer Dim h As Integer 'Etats Machines (initialisation) Dim i As Integer Dim j As Integer Dim k As Integer Dim l As Integer Dim m As Integer Dim n As Integer Dim o As Integer Dim p As Integer 'N° de 1ère Colonne de la valeur d'ampèrage concernée Dim q As Integer Dim r As Integer Dim s As Integer Dim t As Integer Dim u As Integer Dim v As Integer Dim w As Integer Dim x As Integer 'Valeur totale de la combinaison à comparer avec la valeur cible (initialisation) Dim z As Integer 'Valeurs de travail Dim VE 'valeur existante du Mode Dim VF 'nouvelle valeur du Mode 'Valeur cible Dim Dispo As Integer Private Sub NO_Click() 'Effacer la liste établie des surcharges au clic sur le bouton d'option rouge Call EffacerListe End Sub Sub EffacerListe() 'Efface la liste des surcharges Application.ScreenUpdating = False 'RAZ '=== 'Texte par défaut Cells(7, 1).Value = "Lister les" & Chr(10) & "surcharges ?" 'Texte d'invite à la création de la liste 'Filtres par défaut (aucun) If Worksheets("Combinaisons").AutoFilterMode _ Then Worksheets("Combinaisons").Cells(1, 1).AutoFilter 'Reset du filtrage (suppression) 'Efface tout pour les lignes au delà de 7 If Cells(65536, 1).End(xlUp).Row > 7 Then 'Au delà de la ligne 7 last = Cells(65536, 1).End(xlUp).Row 'Dernière ligne non vide Range("A8:AB" & last).ClearContents 'Valeurs Range("A8:AB" & last).Borders.LineStyle = xlNone 'Bordures Range("A8:AB" & last).Font.Bold = False 'Police Range("A8:AB" & last).FormatConditions.Delete 'Format Conditionnel Range("B5").Select End If End Sub Private Sub OK_Click() 'Générer la liste des surcharges au clic sur le bouton d'option bleu Call GénérerListe End Sub Sub GénérerListe() 'Scrute les combinasons possibles et génère le liste des cas minima pour Total > Disponible Application.ScreenUpdating = False 'DECLARATIONS 'a 0 'L1000 b = 0 'L2000 c = 0 'L5000 d = 0 'L18000(1) e = 0 'L18000(2) f = 0 'N1 g = 0 'TR11 h = 0 'DL 'Etats Machines (initialisation) i 0 'i 1 à 5 (5 états L1000 : 0=Arrêt, 1=Vide, 2=Chargé, 3=Bloqué, 4=Perdu) j 0 'j 1 à 5 (5 états L2000 : 0=Arrêt, 1=Vide, 2=Chargé, 3=Bloqué, 4=Perdu) k 0 'k 1 à 5 (5 états L5000 : 0=Arrêt, 1=Vide, 2=Chargé, 3=Bloqué, 4=Perdu) l 0 'l 1 à 5 (5 états L18000-1 : 0=Arrêt, 1=Vide, 2=Chargé, 3=Bloqué, 4=Perdu) m 0 'm 1 à 5 (5 états L18000-2 : 0=Arrêt, 1=Vide, 2=Chargé, 3=Bloqué, 4=Perdu) n 0 'n 1 à 3 (3 états N1 : 0=Arrêt, 1=Vide, 2=Chargé) o 0 'o 1 à 3 (3 états TR11 : 0=Arrêt, 1=Vide, 2=Chargé) p 0 'p 1 à 2 (2 états DL : 0=Arrêt, 1=Chargé) 'N° de 1ère Colonne de la valeur d'ampèrage concernée q = 3 r = 7 s = 11 t = 15 u = 19 v = 23 w = 25 x = 27 z = 0 'Valeur totale de la combinaison à comparer avec la valeur cible (initialisation) Dispo = Cells(4, 2).Value 'Valeur cible 'RAZ '=== 'Efface tout pour les lignes au delà de 7 If Cells(65536, 1).End(xlUp).Row > 7 Then 'Au delà de la ligne 7 last = Cells(65536, 1).End(xlUp).Row 'Dernière ligne non vide Range("A8:AB" & last).ClearContents 'Valeurs Range("A8:AB" & last).Borders.LineStyle = xlNone 'Bordures Range("A8:AB" & last).Font.Bold = False 'Police Range("A8:AB" & last).FormatConditions.Delete 'Format Conditionnel End If 'L1000 'For i 1 To 5 'Analyse en boucle selon les états de 0 à 5 a = 0 If i > 1 Then a = Cells(5, q + i - 1).Value 'Pour état autre que 0 (Arrêt) z = a If z > Dispo Then 'Si l valeur excède la cible... last = Cells(65536, 1).End(xlUp).Row + 1 'N° de la dernière ligne non vide If i > 1 Then Cells(last, q + i - 1).Value = "X" 'La cellule en cours passe à "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last).Value = z 'La valeur globale est affichée Range("A" & last & ":AB" & last).FormatConditions.Delete 'Effacer un format conditionnel pré-existant Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" 'Formatage conditionnel : Colorisation de 1 ligne sur 2 Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 'Couleur : Grise Exit For 'On quite la boucle d'analyse sur cette valeur hors cible End If End If 'L2000 'For j 1 To 5 'On passe à la machine suivante... etc! b = 0 If j > 1 Then b = Cells(5, r + j - 1).Value z = a + b 'Si la somme des valeurs excède la cibles (cette machine ET la (les) précédente(s)... etc! If z > Dispo Then last = Cells(65536, 1).End(xlUp).Row + 1 If i > 1 Then Cells(last, q + i - 1).Value = "X" 'Prise en compte de la sélection de la (des) machine(s) précédente(s)... etc! If j > 1 Then Cells(last, r + j - 1).Value = "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last, 2).Value = z Range("A" & last & ":AB" & last).FormatConditions.Delete Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 Exit For End If End If 'L5000 'For k 1 To 5 c = 0 If k > 1 Then c = Cells(5, s + k - 1).Value z = a + b + c If z > Dispo Then last = Cells(65536, 1).End(xlUp).Row + 1 If i > 1 Then Cells(last, q + i - 1).Value = "X" If j > 1 Then Cells(last, r + j - 1).Value = "X" If k > 1 Then Cells(last, s + k - 1).Value = "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last, 2).Value = z Range("A" & last & ":AB" & last).FormatConditions.Delete Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 Exit For End If End If 'L18000(1) 'For l 1 To 5 d = 0 If l > 1 Then d = Cells(5, t + l - 1).Value z = a + b + c + d If z > Dispo Then last = Cells(65536, 1).End(xlUp).Row + 1 If i > 1 Then Cells(last, q + i - 1).Value = "X" If j > 1 Then Cells(last, r + j - 1).Value = "X" If k > 1 Then Cells(last, s + k - 1).Value = "X" If l > 1 Then Cells(last, t + l - 1).Value = "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last, 2).Value = z Range("A" & last & ":AB" & last).FormatConditions.Delete Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 Exit For End If End If 'L18000(2) 'For m 1 To 5 e = 0 If m > 1 Then e = Cells(5, u + m - 1).Value z = a + b + c + d + e If z > Dispo Then last = Cells(65536, 1).End(xlUp).Row + 1 If i > 1 Then Cells(last, q + i - 1).Value = "X" If j > 1 Then Cells(last, r + j - 1).Value = "X" If k > 1 Then Cells(last, s + k - 1).Value = "X" If l > 1 Then Cells(last, t + l - 1).Value = "X" If m > 1 Then Cells(last, u + m - 1).Value = "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last, 2).Value = z Range("A" & last & ":AB" & last).FormatConditions.Delete Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 Exit For End If End If 'N1 'For n 1 To 3 f = 0 If n > 1 Then f = Cells(5, v + n - 1).Value z = a + b + c + d + e + f If z > Dispo Then last = Cells(65536, 1).End(xlUp).Row + 1 If i > 1 Then Cells(last, q + i - 1).Value = "X" If j > 1 Then Cells(last, r + j - 1).Value = "X" If k > 1 Then Cells(last, s + k - 1).Value = "X" If l > 1 Then Cells(last, t + l - 1).Value = "X" If m > 1 Then Cells(last, u + m - 1).Value = "X" If n > 1 Then Cells(last, v + n - 1).Value = "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last, 2).Value = z Range("A" & last & ":AB" & last).FormatConditions.Delete Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 Exit For End If End If 'TR11 'For o 1 To 3 g = 0 If o > 1 Then g = Cells(5, w + o - 1).Value z = a + b + c + d + e + f + g If z > Dispo Then last = Cells(65536, 1).End(xlUp).Row + 1 If i > 1 Then Cells(last, q + i - 1).Value = "X" If j > 1 Then Cells(last, r + j - 1).Value = "X" If k > 1 Then Cells(last, s + k - 1).Value = "X" If l > 1 Then Cells(last, t + l - 1).Value = "X" If m > 1 Then Cells(last, u + m - 1).Value = "X" If n > 1 Then Cells(last, v + n - 1).Value = "X" If o > 1 Then Cells(last, w + o - 1).Value = "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last, 2).Value = z Range("A" & last & ":AB" & last).FormatConditions.Delete Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 Exit For End If End If 'DL 'For p 1 To 2 h = 0 If p > 1 Then h = Cells(5, x + p - 1).Value z = a + b + c + d + e + f + g + h If z > Dispo Then last = Cells(65536, 1).End(xlUp).Row + 1 If i > 1 Then Cells(last, q + i - 1).Value = "X" If j > 1 Then Cells(last, r + j - 1).Value = "X" If k > 1 Then Cells(last, s + k - 1).Value = "X" If l > 1 Then Cells(last, t + l - 1).Value = "X" If m > 1 Then Cells(last, u + m - 1).Value = "X" If n > 1 Then Cells(last, v + n - 1).Value = "X" If o > 1 Then Cells(last, w + o - 1).Value = "X" If p > 1 Then Cells(last, x + p - 1).Value = "X" Cells(last, 1).Value = "Scénrario" & last - 7 Cells(last, 2).Value = z Range("A" & last & ":AB" & last).FormatConditions.Delete Range("A" & last & ":AB" & last).FormatConditions.Add _ Type:=xlExpression, _ Formula1:="=MOD(LIGNE();2)" Range("A" & last & ":AB" & last).FormatConditions(1).Interior.ColorIndex = 15 Exit For End If End If Next p Next o Next n Next m Next l Next k Next j Next i 'FINALISATION 'last Cells(65536, 1).End(xlUp).Row 'Dernière ligne non vide If last > 7 Then 'Si des lignes au delà de 7 existent 'Style des lignes 8 à la dernière Range("A8:AB" & last).Borders.LineStyle = xlContinuous 'Bordures (cadre fin) Range("B8:AB" & last).Font.Bold = True 'Police (gras) Range("B8:AB" & last).HorizontalAlignment = xlCenter 'Alignement (centré) 'Texte des résultats (nombre de scénarii trouvés) Cells(7, 1).Value = last - 7 & " cas de" & Chr(10) & "surcharge" 'Tri croissant Range("B8" & ":AB" & last).Sort Key1:=Range("B8"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal 'Tri croissant des résultats 'Filtrage activé If Not Worksheets("Combinaisons").AutoFilterMode _ Then Worksheets("Combinaisons").Range("B7:C7").AutoFilter 'Filtrage activé (affichage =à... ou >à... par exemple)) Cells(5, 2).Select 'Sélectionde la cellule du résultat d'une combinaison par choix sélectifs en ligne 6 End If End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionIl suffit de faire un tableau décimal
.../...
Ou bien tu peux rentrer directement la formule :
Pour A à E
DECBIN(0;5) .... DECBIN(31;5)
.../...
=BINDEC(11111)
=DECBIN(9; 4) Convertit le nombre décimal 9 en nombre binaire de 4 caractères (1001)
Si j'ai bien compris, tu as trouvé 31 en faisant l"inverse.Pas du tout, pourquoi 31 ?, parce qu'en binaire cela fait 11111. Soit tous les modes A à E actifs
J'en fais quoi STP?Maintenant que toutes les possibilités de mode sont définies, c'est à toi et à toi seul de décider de ce que tu dois en faire !
je ne vois pas comment faire autrement qu'avec des For/Next imbriquées
As-tu pensé à la représentation binaire de l'état des modes pour chaque machine ?
Range("B4").Value,C'est fait.
le mieux est de mettreRange("B4").Value,
le mieux est de mettre (..) cette valeur dans une variable (par exemple B4)
Cells(last, 1).Value, au lieu de Range("A" & last).ValueC'est fait.
mettre tes 9850 lignes dans un tableau en mémoireBen, non... comment je peux savoir à l'avance combien de lignes il fera? Attention que les VALEURS de consommation de chaque mode peuvent bien sûr varier, et que donc le nombre de combinaisons rejetées aussi -et donc le nombre de lignes-
mettre toutes tes valeurs à inscrire dans un tableau, puis avant de sortir de la procédure copier l'ensemble du tableau dans ta feuilleC'est très intéressant, ça. Tu veux dire qu'un listing est créé "en mémoire", et qu'à la fin des calculs, il est "édité" dans la feuille? Et comment peux-t-on faire ça...?
Bizarrement, nom intitulé de ce post ne tente personne d'autre...J'espère quand même n'être fâché avec personne!