CALCUL TREMIE

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 2 sept. 2008 à 21:26
kinneri Messages postés 44 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 3 septembre 2008 - 3 sept. 2008 à 06:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47846-calcul-tremie

kinneri Messages postés 44 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 3 septembre 2008
3 sept. 2008 à 06:54
y a pas de souci, merci pour la remarque.
il est vrai que lors de mon test, je ne l'avais pas fait a vide et en voulant allez trop vite, j'ai zapper pas mal de chose.

je vais modifier la source afin qu'il correspond mieux a ce qui est attendu.

A+
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
2 sept. 2008 à 23:56
Toutes mes remarques n'on rien a voir avec les specificitées d'excel2007. Elles sont basique a tout les language dérivé du VB. D'ailleur while/wend est une vieille methode qu'il est deconseillé d'utilisée et qu'il est preferable de remplacer par do/Loop.
De plus tu l'utilises mal puisque si le nom recherché n'est pas dans la tremie specifier excel vas fair sa recherche jusqu'a la derniere ligne de la feuille et planter.

Comme dirait PCPT : ce n'est pas la poubelle ici ! Donc quand tu poses une source ici c'est pour la communauté pas pour une personne en particuliée. Les sources publiées doivent servire d'exemple donc respecter les regles.

- Option explicit en debut code
- variable declarées et dimensionnées
- code commenté
- indentation

enfin il doit fonctionner un minimum pour permetre au debutant de demarrer. Comprend bien qu'un debutant ne s'aura pas debuguer et modifier un code pour pouvoir l'utiliser.

Ton intention est bonne, seulement vas jusqu'au bout.

:)
kinneri Messages postés 44 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 3 septembre 2008
2 sept. 2008 à 22:30
salut,
bizarre que cela ne fonctionne pas, je n'ai pas eu de souci.
ok, le code est certainement manque de comprehension.
il a ete fait a partir de excel 2007, ce qui explique certaine commande qui ne fonctionne pas.
je j'ai pas mis de silo par defaut cela evite des erreurs au moment de faire la saisie.
je l'ai fait rapidement pour un membre afin qu'il me dise si cela correspondait avec sa demande, le reste sera certainement modifier.
merci d'y avoir jeter un oeil et de corrigé.
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
2 sept. 2008 à 21:26
Salut,

beaucoup de chose a dire :

- ce code ne marche pas !
- recherche de valeur par boucle while/wend qui ne marche
- code non commenté
- variable pas declarées ou pas dimensionées
- des condition if qui ne servent a rien
- une redondance de code qui aurait pu etre facilement evitée
- code difficile a lire... indentation douteuse...

voila pour les principales remarques.

ci-dessous le code de la form que j'ai en partie modifié, mais la partie soutirage ne fonctionne toujous pas,
car je n'ai pas compris ce que tu eux faire avec la listbox.
J'ai remplacé la textbox3(fournisseur) par une combobox pour avoir une liste, par tremie, des fournisseurs deja existants
La combobox est mise a jour automatiquement lors de la selection de la tremie.
J'ai aussi ajouté quelque commentaire.

Option Explicit
Dim silo As String

Private Sub CommandButton1_Click()
' on verifi qu'un fournisseur a été spécifié
If Me.ComboBox1.Text = "" Then 'si pas de fournisseur
MsgBox ("Entrez le nom du fournisseur")
Else ' si fournisseur il y a
' on verifi qu'un tonnage a été specifié If Me.TextBox1.Text "" Or Me.TextBox1.Text "0" Then 'si pas de tonnage ou tonnage = 0
MsgBox ("Veuillez entrer un poid en Tonne")
Else 'tout est ok ! on lance la suite
detect_fournisseur
End If
End If
End Sub
Sub detect_fournisseur()
Dim i As Long, total As String, nom As String
nom = Me.ComboBox1.Text
'on ce decale sur la colonne de gauche pour le tonnage
total = Chr(Asc(silo) - 1)

With Feuil1
' on cherche si le nom existe deja dans la liste des fournisseur de la tremie choisie
' et on recuppere le numero de ligne
On Local Error Resume Next
i = .Columns(silo).Find(nom, .Range(silo & 1), , , xlByRows, xlPrevious).Row
' on ne peut rien rajouter si la tremie est pleine donc on verifi avant de continuer
If i = 1 Or .Range(total & "8").Value >= 220 Then 'la tremie est pleine
MsgBox ("Tremie pleine")
Exit Sub 'on arrete tout
'on verifi que la somme du contenu + l'ajout ne depasse pas le maxi
ElseIf .Range(total & "8").Value + Me.TextBox1.Value > 220 Then 'on depasse le maxi
MsgBox ("Cette tremie ne peut accepter plus de " & 220 - .Range(total & "8").Value & "T ")
Exit Sub 'on arrete tout
Else 'tout est ok If Err 0 Then 'si err 0 c'est que le fournisseur est deja dans la liste
.Range(total & i) = Me.TextBox1.Text + .Range(total & i)
Else 'le fournisseur n'est pas dans la liste
i = .Columns(silo).Find("*", .Range(silo & 1), , , xlByRows, xlPrevious).Row + 1
If i < 8 Then 'limitation a 6 fournisseur par tremie
.Range(silo & i).Value = Me.ComboBox1.Value
.Range(total & i) = Me.TextBox1.Text
Else
MsgBox "le nombre de fournisseur est limité a 6 par tremie"
End If
End If
End If
End With
End Sub

Private Sub CommandButton2_Click() If Me.TextBox2.Text "" Or Me.TextBox2.Text "0" Then
MsgBox ("Veuillez entrer un poid en Tonne")
Else
soutirage
End If
End Sub

Sub soutirage()
Dim i As Long, retour, total, poid As Integer
poid = TextBox2.Text
i = 0 + ListBox1.ListCount
total = Chr(Asc(silo) - 1)
retour = total & "2:" & silo & "6"
If Feuil1.Range(total & "7") - poid <= 0 Then
While poid > 0
If poid > Feuil1.Range(total & "7") Then
ListBox1.AddItem Feuil1.Range(total & "7") & " T de " & Feuil1.Range(silo & "7").Text
Else
ListBox1.AddItem poid & " T de " & Feuil1.Range(silo & "7").Text
End If
poid = poid - Feuil1.Range(total & "7")
With Worksheets("Feuil1")
.Range(total & "2:" & silo & "6").Copy
.Range(total & "3").PasteSpecial 'operation:=xlPasteValues
End With
Feuil1.Range(total & "2:" & silo & "2").Value = ""
Wend
Else
Feuil1.Range(total & "7").Value = Feuil1.Range(total & 7).Value - poid
ListBox1.AddItem TextBox2.Text & " T de " & Feuil1.Range(silo & "7").Text
End If
End Sub

Private Sub OptionButton1_Change()
If OptionButton1.Value = True Then
silo = "B"
UpdateCombo
End If
End Sub

Private Sub OptionButton2_Change()
If OptionButton2.Value = True Then
silo = "E"
UpdateCombo
End If
End Sub

Private Sub OptionButton3_Change()
If OptionButton3.Value = True Then
silo = "H"
UpdateCombo
End If
End Sub

Private Sub UserForm_Initialize()
'initialisation de la form avant affichage
Me.OptionButton1.Value = True 'tremie A par defaut
UpdateCombo
End Sub

Sub UpdateCombo()
'mise a jour de la combobox en fonction de la tremie choisie
Me.ComboBox1.List = Feuil1.Range(silo & "2:" & silo & "7").Value
Me.ComboBox1.Value = Me.ComboBox1.List(0)
End Sub

j'en ai deja fait pas mal donc a toi de faire le reste.

Pour la note j'attend de voir la suite pour juger mais franchement pour l'instant cela vaut 3

A+:)
Rejoignez-nous