kinneri
Messages postés44Date d'inscriptionjeudi 14 octobre 2004StatutMembreDerniè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és1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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és44Date d'inscriptionjeudi 14 octobre 2004StatutMembreDerniè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és1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
3 sept. 2008 à 06:54
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+
2 sept. 2008 à 23:56
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.
:)
2 sept. 2008 à 22:30
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é.
2 sept. 2008 à 21:26
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+:)