A voir également:
- Besoin d'aide en VB
- Vb cable - Télécharger - Audio & Musique
- Vb - Télécharger - Langages
- Vb editor - Télécharger - Langages
- Vb runtime - Télécharger - Divers Utilitaires
- Vb 2008 - Télécharger - Langages
11 réponses
Utilisateur anonyme
17 avril 2009 à 12:13
17 avril 2009 à 12:13
Bon j'ai modifié quelques trucs.
Je n'ai pas abordé la partie calcul, parce que tel que le programme est fait je ne sais pas retrouver les cellules du profil choisi (mais je cherche !!!)
Une question, pourquoi saisir tous les éléments d'un profil?
Ce serait plus simple de saisir le profil et de faire afficher longueur dimension... ( enfin pour l'utilisateur)
https://www.cjoint.com/?etbVaYUaHB
A+
Je n'ai pas abordé la partie calcul, parce que tel que le programme est fait je ne sais pas retrouver les cellules du profil choisi (mais je cherche !!!)
Une question, pourquoi saisir tous les éléments d'un profil?
Ce serait plus simple de saisir le profil et de faire afficher longueur dimension... ( enfin pour l'utilisateur)
https://www.cjoint.com/?etbVaYUaHB
A+
Utilisateur anonyme
20 avril 2009 à 09:43
20 avril 2009 à 09:43
Salut,
Pour la partie calcul, erreur corrigée:
a priori oui, il n'y aurait d'ailleurs que 2 formulaires :sortie et entré (si le produit n'existe pas on le crée)
crée une combobox que tu remplis avec "ComboBox1.AddItem 'valeur' "
Par ailleurs le code serait changé! Ca dépend de ce que tu veux en faire!
Pour la partie calcul, erreur corrigée:
For i = 5 To 1000 If Cells(i, 1) = "" Then Exit Sub MsgBox "produit non trouvé" End If If Cells(i, 1).Value = asortie And Cells(i, 2).Value = bsortie And Cells(i, 3).Value = csortie Then If Val(Cells(i, 4).Value) < Val(txtquantsortie.Value) Then MsgBox "Attention le stock n'est pas suffisant" txtquantsortie.SetFocus Else Cells(i, 4).Value = Cells(i, 4).Value - Val(txtquantsortie.Value) MsgBox "Stock " & asortie & " " & bsortie & " " & csortie & " Mis à Jour" frmsortie.Hide End If Exit Sub End If Next i
tout regrouper en un seul formulaire au lieu de trois ( nouvel entrée, sortie et entrée d'un produit existant )
a priori oui, il n'y aurait d'ailleurs que 2 formulaires :sortie et entré (si le produit n'existe pas on le crée)
comment fait-on pour faire apparaître une liste déroulante
crée une combobox que tu remplis avec "ComboBox1.AddItem 'valeur' "
Par ailleurs le code serait changé! Ca dépend de ce que tu veux en faire!
Utilisateur anonyme
20 avril 2009 à 17:48
20 avril 2009 à 17:48
J'ai remplacer la text box du profil par une combobox qui est remplis dans le userform activate
elle possède le même nom qu'avait la textbox, ça devrait marcher sans modification. (Je n'ai pas testé jusqu'au bout)
https://www.cjoint.com/?ewhBlUv5QK
elle possède le même nom qu'avait la textbox, ça devrait marcher sans modification. (Je n'ai pas testé jusqu'au bout)
https://www.cjoint.com/?ewhBlUv5QK
j'ai essayé tes listes déroulantes j'ai modifier le code ca marche pour certaine mais pas tous je te mets le code:
Private Sub UserForm_Activate() For i = 1 To 1000 If Worksheets("stock").Cells(i + 5, 1).Value <> Worksheets("stock").Cells(i + 4, 1).Value Then frmMouvement.txtprofil.AddItem Worksheets("stock").Cells(i + 4, 1).Value Else End If Next i For i = 1 To 1000 If Worksheets("stock").Cells(i + 5, 4).Value <> Worksheets("stock").Cells(i + 4, 4).Value Then frmMouvement.txtquant.AddItem Worksheets("stock").Cells(i + 4, 4).Value End If Next i For i = 1 To 1000 If Worksheets("stock").Cells(i + 5, 5).Value <> Worksheets("stock").Cells(i + 4, 5).Value Then frmMouvement.txttraitement.AddItem Worksheets("stock").Cells(i + 4, 5).Value End If Next i End Sub
Utilisateur anonyme
17 avril 2009 à 11:01
17 avril 2009 à 11:01
Bonjour
J'ai noté ces modifications à apporter:
With stock.Range("a5:a100") modif= With Worksheets("stock").Range("a5:a100")
If Not asortie Is Nothing Then modif= If asortie Is Nothing Then (supprimer Not)
Pareil dans les autres tests.
Quant aux calculs, il vaudrait mieux mettre votre fichier sur https://www.cjoint.com/ et coller le lien dans un nouveau post
A+
J'ai noté ces modifications à apporter:
With stock.Range("a5:a100") modif= With Worksheets("stock").Range("a5:a100")
If Not asortie Is Nothing Then modif= If asortie Is Nothing Then (supprimer Not)
Pareil dans les autres tests.
Quant aux calculs, il vaudrait mieux mettre votre fichier sur https://www.cjoint.com/ et coller le lien dans un nouveau post
A+
Merci de ta réponse ,
j'ai fait les modification mais il me marque encore des problème :S
Je vous transmet le lien
https://www.cjoint.com/?etaY3BBJlc
Voilà bon courage
j'ai fait les modification mais il me marque encore des problème :S
Je vous transmet le lien
https://www.cjoint.com/?etaY3BBJlc
Voilà bon courage
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
17 avril 2009 à 18:28
17 avril 2009 à 18:28
Re
Voila pour le partie calcul et mise à jour!
https://www.cjoint.com/?etifUr4P76
A+
Voila pour le partie calcul et mise à jour!
https://www.cjoint.com/?etifUr4P76
A+
Utilisateur anonyme
17 avril 2009 à 19:32
17 avril 2009 à 19:32
J'avais loupé le post 4
C'était juste pour signaler qu'il manquait un s à worksheet
si tu écris .Find("txtprofilsortie"...., tu vas chercher le texte "txtprofilsortie" dans tes cellules.
Alors que ce que tu veux , c'est chercher ce qui a été saisi dans ta textbox nommée txtprofilsortie ,
donc txtprofilsortie.Text
'With Worksheet("stock").Range("a5:a1000") With Worksheets("stock").Range("a5:a1000")
C'était juste pour signaler qu'il manquait un s à worksheet
'Set asortie = .Find("txtprofilsortie", LookIn:=xlValues) 'la on cherche le text =txtprofilsortie ca peut pas marcher Set asortie = .Find(txtprofilsortie.Text, LookIn:=xlValues) End With
si tu écris .Find("txtprofilsortie"...., tu vas chercher le texte "txtprofilsortie" dans tes cellules.
Alors que ce que tu veux , c'est chercher ce qui a été saisi dans ta textbox nommée txtprofilsortie ,
donc txtprofilsortie.Text
Bonjour,
Excuse moi de pas t'avoir répondu avant, mais bon avec le week end c'était pas facile :)
Merci pour la partie calcul par contre ca marche pour la première ligne mais pas pour les autres lignes.
Il me marque "produit non trouvé".
Je vais regardé plus en profondeur ton code pour essayer de trouver une faille .
Et juste une aute question crois tu qu'il serait possible de tout regrouper en un seul formulaire au lieu de trois ( nouvel entrée, sortie et entrée d'un produit existant ).
Enfin je sais j'abuse de ta sympathie, comment fait-on pour faire apparaître une liste déroulante dans un formulaire ( ca changerait tous le code dérrière ??? )
Excuse moi de pas t'avoir répondu avant, mais bon avec le week end c'était pas facile :)
Merci pour la partie calcul par contre ca marche pour la première ligne mais pas pour les autres lignes.
Il me marque "produit non trouvé".
Je vais regardé plus en profondeur ton code pour essayer de trouver une faille .
Et juste une aute question crois tu qu'il serait possible de tout regrouper en un seul formulaire au lieu de trois ( nouvel entrée, sortie et entrée d'un produit existant ).
Enfin je sais j'abuse de ta sympathie, comment fait-on pour faire apparaître une liste déroulante dans un formulaire ( ca changerait tous le code dérrière ??? )
Ok merci pour la correction,
Pour les deux formulaires, il suffirait donc à mon formulaire entrée rajouter les mêmes recherches que ma sortie et s'il le trouve additionner... je vais essayé et je te dirai si j'y arrive.
Pour la liste déroulante les informations recherchée serait toujours de type texte??
comme txtprofil.txt ou ca changerait?
Je te remercie encore ca avance vite grace à toi
Pour les deux formulaires, il suffirait donc à mon formulaire entrée rajouter les mêmes recherches que ma sortie et s'il le trouve additionner... je vais essayé et je te dirai si j'y arrive.
Pour la liste déroulante les informations recherchée serait toujours de type texte??
comme txtprofil.txt ou ca changerait?
Je te remercie encore ca avance vite grace à toi
génial j'ai réussi à gérer l'entrée ou l'ajout d'un nouveau profil...
reste plus que la liste et essayé de regrouper l'ensemble des deux formulaires en un seul avec comme variable ( "entrée " ou "sortie" ) en dernier dans une liste déroulante...je vais essayé mais je promet rien
je te met le code de ce que j'ai fait dis moi si tu penses qu'il y a un risque de beug.
With Worksheets("stock").Range("a5:a1000")
Set aentree = .Find(txtprofil.Text, LookIn:=xlValues)
End With
If aentree Is Nothing Then
Sheets("stock").Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtprofil.Text
Sheets("stock").Range("B65536").End(xlUp).Offset(1, 0).Value = Me.txtdimprofil.Text
Sheets("stock").Range("C65536").End(xlUp).Offset(1, 0).Value = Me.txtlong.Text
Sheets("stock").Range("D65536").End(xlUp).Offset(1, 0).Value = Me.txtquant.Text
Sheets("stock").Range("E65536").End(xlUp).Offset(1, 0).Value = Me.txttraitement.Text
Exit Sub
End If
With Worksheets("stock").Range("b5:b1000")
Set bentree = .Find(txtdimprofil.Text, LookIn:=xlValues)
End With
If bentree Is Nothing Then
Sheets("stock").Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtprofil.Text
Sheets("stock").Range("B65536").End(xlUp).Offset(1, 0).Value = Me.txtdimprofil.Text
Sheets("stock").Range("C65536").End(xlUp).Offset(1, 0).Value = Me.txtlong.Text
Sheets("stock").Range("D65536").End(xlUp).Offset(1, 0).Value = Me.txtquant.Text
Sheets("stock").Range("E65536").End(xlUp).Offset(1, 0).Value = Me.txttraitement.Text
Exit Sub
End If
With Worksheets("stock").Range("c5:c1000")
Set centree = .Find(txtlong.Text, LookIn:=xlValues)
End With
If centree Is Nothing Then
Sheets("stock").Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtprofil.Text
Sheets("stock").Range("B65536").End(xlUp).Offset(1, 0).Value = Me.txtdimprofil.Text
Sheets("stock").Range("C65536").End(xlUp).Offset(1, 0).Value = Me.txtlong.Text
Sheets("stock").Range("D65536").End(xlUp).Offset(1, 0).Value = Me.txtquant.Text
Sheets("stock").Range("E65536").End(xlUp).Offset(1, 0).Value = Me.txttraitement.Text
Exit Sub
End If
'**************** Vérification et mise à jour stock ****************
For i = 5 To 1000
If Cells(i, 1).Value = aentree And Cells(i, 2).Value = bentree And Cells(i, 3).Value = centree Then
Cells(i, 4).Value = Cells(i, 4).Value + Val(txtquant.Value)
MsgBox "Stock " & aentree & " " & bentree & " " & centree & " Mis à Jour"
frmMouvement.Hide
End If
Exit Sub
Next i
Unload Me
End Sub
reste plus que la liste et essayé de regrouper l'ensemble des deux formulaires en un seul avec comme variable ( "entrée " ou "sortie" ) en dernier dans une liste déroulante...je vais essayé mais je promet rien
je te met le code de ce que j'ai fait dis moi si tu penses qu'il y a un risque de beug.
With Worksheets("stock").Range("a5:a1000")
Set aentree = .Find(txtprofil.Text, LookIn:=xlValues)
End With
If aentree Is Nothing Then
Sheets("stock").Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtprofil.Text
Sheets("stock").Range("B65536").End(xlUp).Offset(1, 0).Value = Me.txtdimprofil.Text
Sheets("stock").Range("C65536").End(xlUp).Offset(1, 0).Value = Me.txtlong.Text
Sheets("stock").Range("D65536").End(xlUp).Offset(1, 0).Value = Me.txtquant.Text
Sheets("stock").Range("E65536").End(xlUp).Offset(1, 0).Value = Me.txttraitement.Text
Exit Sub
End If
With Worksheets("stock").Range("b5:b1000")
Set bentree = .Find(txtdimprofil.Text, LookIn:=xlValues)
End With
If bentree Is Nothing Then
Sheets("stock").Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtprofil.Text
Sheets("stock").Range("B65536").End(xlUp).Offset(1, 0).Value = Me.txtdimprofil.Text
Sheets("stock").Range("C65536").End(xlUp).Offset(1, 0).Value = Me.txtlong.Text
Sheets("stock").Range("D65536").End(xlUp).Offset(1, 0).Value = Me.txtquant.Text
Sheets("stock").Range("E65536").End(xlUp).Offset(1, 0).Value = Me.txttraitement.Text
Exit Sub
End If
With Worksheets("stock").Range("c5:c1000")
Set centree = .Find(txtlong.Text, LookIn:=xlValues)
End With
If centree Is Nothing Then
Sheets("stock").Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtprofil.Text
Sheets("stock").Range("B65536").End(xlUp).Offset(1, 0).Value = Me.txtdimprofil.Text
Sheets("stock").Range("C65536").End(xlUp).Offset(1, 0).Value = Me.txtlong.Text
Sheets("stock").Range("D65536").End(xlUp).Offset(1, 0).Value = Me.txtquant.Text
Sheets("stock").Range("E65536").End(xlUp).Offset(1, 0).Value = Me.txttraitement.Text
Exit Sub
End If
'**************** Vérification et mise à jour stock ****************
For i = 5 To 1000
If Cells(i, 1).Value = aentree And Cells(i, 2).Value = bentree And Cells(i, 3).Value = centree Then
Cells(i, 4).Value = Cells(i, 4).Value + Val(txtquant.Value)
MsgBox "Stock " & aentree & " " & bentree & " " & centree & " Mis à Jour"
frmMouvement.Hide
End If
Exit Sub
Next i
Unload Me
End Sub
Utilisateur anonyme
20 avril 2009 à 11:23
20 avril 2009 à 11:23
Pour la mise à jour du stock tu pourrais en profiter pour créer un profil qui n'existe pas
For i = 5 To 1000
if Cells(i,1)="" then
Cells(i, 1).Value = aentree
Cells(i, 2).Value = bentree
Cells(i, 3).Value = centree
Cells(i, 4).Value = Val(txtquant.Value)
exit sub
end if
If Cells(i, 1).Value = aentree And Cells(i, 2).Value = bentree And Cells(i, 3).Value = centree Then
Cells(i, 4).Value = Cells(i, 4).Value + Val(txtquant.Value)
MsgBox "Stock " & aentree & " " & bentree & " " & centree & " Mis à Jour"
frmMouvement.Hide
End If
Exit Sub
Next i
For i = 5 To 1000
if Cells(i,1)="" then
Cells(i, 1).Value = aentree
Cells(i, 2).Value = bentree
Cells(i, 3).Value = centree
Cells(i, 4).Value = Val(txtquant.Value)
exit sub
end if
If Cells(i, 1).Value = aentree And Cells(i, 2).Value = bentree And Cells(i, 3).Value = centree Then
Cells(i, 4).Value = Cells(i, 4).Value + Val(txtquant.Value)
MsgBox "Stock " & aentree & " " & bentree & " " & centree & " Mis à Jour"
frmMouvement.Hide
End If
Exit Sub
Next i
Oui c'est ce que j'ai fait mais dans la partie supérieur du code lorsqu'il cherche
S'il ne trouve pas une information sur les 3 ( profil, dimensions, longueur ) il rajoute une ligne entière;
par contre dans mon code je prend pas en compte le traitement.
La plupart du temps il n'y a rien mais lorsqu'il y quelques choses il faut que mes calcul s'effectue sur celui dont il y a un traitement ( si bien sur j'ai demandé de soustraire un profil traité de mon stock )
SInon j'ai regarder pour la liste je n'y arrive pas.
Je te renvois mon nouveau fichier un peu plus joli ^^
https://www.cjoint.com/?ewbEAqJ18o
S'il ne trouve pas une information sur les 3 ( profil, dimensions, longueur ) il rajoute une ligne entière;
par contre dans mon code je prend pas en compte le traitement.
La plupart du temps il n'y a rien mais lorsqu'il y quelques choses il faut que mes calcul s'effectue sur celui dont il y a un traitement ( si bien sur j'ai demandé de soustraire un profil traité de mon stock )
SInon j'ai regarder pour la liste je n'y arrive pas.
Je te renvois mon nouveau fichier un peu plus joli ^^
https://www.cjoint.com/?ewbEAqJ18o
Utilisateur anonyme
20 avril 2009 à 11:56
20 avril 2009 à 11:56
Ah oui! la présentation est nettement mieux!
Pour ta list (combobox) tu veux en faire quoi, la mettre où?
Pour ta list (combobox) tu veux en faire quoi, la mettre où?
En complétant un peu mon tableau j'ai remarqué qu'il y avait un beug:
En gros admettons que j'ai déjà rentré les cas suivant
PROFIL DIM PROFIL LONGUEUR
IPE 350 12000
HEA 100 6000
IPE 220 10000
et que je rentre un nouveau profil inexistant dans la liste : HEA 220 de 12000mm
hé bien il ne le rajoute pas puisque lorsqu'il cherche il trouve déjà le "HEA" sur une autre ligne le"220" et on trouve aussi sur une autre ligne le "12000"
Il ne crée ni de nouvelle ligne puisqu'il a trouvé toute les informations mais ne met pas non plus à jours le calcul en additionnant les quantité puisque qu'il faut que tout soit sur une même ligne!!!
Comment faire
En gros admettons que j'ai déjà rentré les cas suivant
PROFIL DIM PROFIL LONGUEUR
IPE 350 12000
HEA 100 6000
IPE 220 10000
et que je rentre un nouveau profil inexistant dans la liste : HEA 220 de 12000mm
hé bien il ne le rajoute pas puisque lorsqu'il cherche il trouve déjà le "HEA" sur une autre ligne le"220" et on trouve aussi sur une autre ligne le "12000"
Il ne crée ni de nouvelle ligne puisqu'il a trouvé toute les informations mais ne met pas non plus à jours le calcul en additionnant les quantité puisque qu'il faut que tout soit sur une même ligne!!!
Comment faire
17 avril 2009 à 14:03
[quote]'************* A quoi ca sert?
Profilconverti = Application.WorksheetFunction.Proper(Me.txtprofilsortie.Text)[/quote]
Ensuite je veux retrouver les informations (que je rentre dans mon formulaire ) dans mon feuillet excel je me trompe peut etre mais pour moi c'est bien cela que je cherche à faire
[quote]'With Worksheet("stock").Range("a5:a1000")
With Worksheets("stock").Range("a5:a1000")
'Set asortie = .Find("txtprofilsortie", LookIn:=xlValues)
'la on cherche le text =txtprofilsortie ca peut pas marcher
Set asortie = .Find(txtprofilsortie.Text, LookIn:=xlValues)
End With[/quote]
Enfin pour répondre à ta question sur les informations à faire apparaitre c'est pour faciliter la vie de l'utilisateur
Je souhaite "mais je ne sais pas faire", faire une liste déroulante pour le choix du profil (HEA, HEB, IPE, IPN, UPN, UPAF, UAP, Tube, Cornière, rond et carré. )
ensuite il existe tellement de dimension pour chaque profil que ca deviendrais trop long à faire dérouler c'est pourquoi j'ai séparer ( un peu faire comme tu cherche une voiture: tu cherche la marqe , puis le modèle puis le kliométrage ; c'est le même principe )
Mais bon si tu trouve une solution moins pratique mais qui fonctionne je suis preneur !!!
Je te remercie de t'occuper de mon cas,
Je continue de chercher aussi sur internet
Cordialement