bonjour, je suis novice en matiere de VBA, j'ai recupere un code pour automatiser les sondes ( fioul et eau potable) de ma barge et les transformer en M3 avec une correction pour le trim (avant-arriere) et le heel ( droite -gauche).
apres beaucoup d' essaie et de prise de tete il fonctionne enfin. par contre je pense que la forme n'ai pas faite dans les règles de l' art.
pourriez vous me dire ce que vous en pensé.
merci a vous.
ps: désolé pour les accents je suis sur un qwerty et la correction ne marche pas tout le temps
Re,
Concernant le niveau des réservoirs, une solution en PJ sans VBA mais uniquement avec une MFC.
Dans la PJ un curseur fait varier le niveau pour test.
C'est une idée comme une autre de simplification.
Plus de détails si intéressé.
Le curseur n'est là que pour le test.
Le curseur sert à faire varier le niveau, qui évidemment dans votre logiciel viendra d'ailleurs.
C'est juste une maquette.
Le curseur ne sert à rien.
Il est juste là pour faire varier "arbitrairement" les niveaux donnés en E26,I26, M26 et Q26.
Je suppose que dans votre logiciel ces valeurs viennent d'autre part.
S'il ne s'agit que d'afficher un niveau, on peut le faire aussi très simplement avec un graphique en colonne.
L' avantage c'est qu'il peut afficher toutes les valeurs entre 0 et 100%
oui j'avais compris, mais je trouvais ca pas mal pour par exemple faire une simulation ou un truc du genre ( si on veux après prendre des valeur pour faire la stabilité).
par contre j'ai essaye de mettre la formule " x= 2*k+5", en faite ce n' ai pas bon car le x c'est la valeur du colummoffset par rapport a la textbox2
si tu avais une autre idée pour enlever les "if" je suis preneur.
en tout cas merci
'trim
If b = -1.5 Then x = 2
If b = -1 Then x = 3
If b = -0.5 Then x = 4
If b = 0 Then x = 5
If b = 0.5 Then x = 6
If b = 1 Then x = 7
If b = 1.5 Then x = 8
Vous affectez à la variable x une certaine valeur qui va dépendre de b.
En faisant :
Code:
x = 2 * b + 5
Vous faites exactement la même chose :
Si b=0 alors x=2*0+5 donc x=5, ce qui en anglais donne : If b=0 then x=5.
x "n'est pas la valeur du colummoffset par rapport a la textbox2" puisque en faisant x=5 vous affectez à x la valeur 5.
If UserForm1.OptionButton1.Value = True Then Cells(8, 1).Select
If UserForm1.OptionButton2.Value = True Then Cells(8, 1).Select
If UserForm1.OptionButton3.Value = True Then Cells(64, 1).Select
If UserForm1.OptionButton4.Value = True Then Cells(92, 1).Select
If UserForm1.OptionButton5.Value = True Then Cells(120, 1).Select
If UserForm1.OptionButton6.Value = True Then Cells(120, 1).Select
If UserForm1.OptionButton7.Value = True Then Cells(152, 1).Select
If UserForm1.OptionButton8.Value = True Then Cells(181, 1).Select
If UserForm1.OptionButton9.Value = True Then Cells(203, 1).Select
If UserForm1.OptionButton10.Value = True Then Cells(225, 1).Select
If UserForm1.OptionButton11.Value = True Then Cells(247, 1).Select
If UserForm1.OptionButton12.Value = True Then Cells(269, 1).Select
Peut être réduit avec :
Code:
MatCell = Array(0, 8, 8, 64, 92, 120, 120, 152, 181, 203, 225, 247, 269)
For i = 1 To UBound(MatCell)
If UserForm1.OptionButton(i).Value = True Then Cells(MatCell(i), 1).Select
Next i
où i donne l'indice du Userform et l' array donne le N° de ligne.
génial, ça raccourcie bien le code.
pour les cuves je ne sais pas encore, mais je garde ton exemple car même si il ne me sert pas pour ce fichier la, il me servira surement pour un autre.
en tout cas merci de m'avoir accordé du temps.
bon week end
Si vous hésitez encore pour les cuves, vous pouvez optimiser le code.
Par exemple pour RemplissageFO1P on peut faire :
VB:
Sub RemplissageFO1P()
Bleu = RGB(191, 143, 0)
f = 404.244 / 10
Range("B9:B18").Interior.Color = RGB(192, 192, 192)
If r = 0 Then Range("B18").Interior.Color = RGB(192, 192, 192)
Ratio = r / f
For i = 0 To 9
If Ratio > i Then Range("B" & 18 - i).Interior.Color = Bleu
Next i
If r >= f * 9.9 Then Range("B9").Interior.Color = Bleu
End Sub