Programmation

87fred Messages postés 40 Statut Membre -  
87fred Messages postés 40 Statut Membre -
Bonjour,
J'ai de nouveau un souci de programmation, je souhaite pouvoir retenir un valeur parmi plusieurs possibilités en imposant des condition.
En clair, je travail sur une base de donné, et je souhaite pouvoir récupérer la pièce la moins chère parmi les pièce de la même référence. Et j'ai plusieurs référence sur la même feuille excel, ce qui change pour les pièces qui on la même référence c'est le fournisseur et la marque de la pièce.
Voila une image de ma base de donnée pour mieux comprendre.
Je suis débutant sur VBA et j'aurai besoin d'aide pour créer mon programme.merci
A voir également:

14 réponses

Redonky
 
Désolé voilà la Bonne version de mon programme avec commentaire, que tu peu copier avec les commentaire en changeant les trucs souligné:D

les ' te permettent de mettre des commentaires

Par contre tu fera attention, j'ai fait une petite erreur n'ayant pas d'importance pour l'éxecution du problème, mais dans la première ligne ou je déclare les variables, j'ai déclaré "produit as string", alors que je n'utilise pas la variable produit, tu peut donc supprimer "produit as string," et rajouter Dim
Soit:

Sub Nomduprogramme()

'la variable ligne est un entier
Dim ligne As Integer

'mise à l'état initial des variables
ligne = "première ligne de la liste"
Prix = cell("colone des prix", ligne)

'Boucler jusqu'à ce que la cellule colonne des ref, ligne soit vide
Do Until IsEmpty(cell("colone ref article", ligne))

'si la cellule prix de l'article est moins élevé kle moins chère des prix on enregistre le prix et la ref de l'article
If cell("colone des prix", ligne) < Prix Then
Prix = cell("colone des prix", ligne)
ref = cell("colone ref article", ligne)

'sinon on ne fait rien et on referme la conditionnel
End if

'on rajoute 1 à la variable ligne pour descendre d'une ligne
ligne = ligne + 1

'On boucle (retour a do until)
Loop

'On affiche le résultat
MsgBox ("Le produit le moins chère est " & ref & ",il coute " & Prix)
End Sub
2
Redonky
 
Par contre si c'est les marques qui changent et pas les refs, à la place de "colonne ref article" tu mettra la "colonne marque article", je suppose que t'avais compris;)
1
Redonky
 
Salut

alors je vais essayer de te filer un corps de programme qui marcherais:

Sub Nom()
Produit As String, ligne As Integer
ligne = 0
Prix = 0
Do Until IsEmpty(cell("colone ref article", ligne))
If cell("colone des prix", ligne) < Prix Then
Prix = cell("colone des prix", ligne)
ref = cell("colone ref article", ligne)
ligne = ligne + 1
Loop
MsgBox ("Le produit le moins chère est " & ref & ",il coute " & Prix)
End Sub
0
87fred Messages postés 40 Statut Membre 1
 
ok merci pour le coup de pouce
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
redonky Messages postés 103 Statut Membre 23
 
de rien;)
oublit pas de mettre résolu si tout est ok sinon bienvenue les prochaine questions:p
0
87fred Messages postés 40 Statut Membre 1
 
j'ai modifier ton code pour qu'il s'adapte a ma demande mais sa ne marche que pour la premiere ligne, les autre ligne me plante excel.
voila mon code :

Sub PrixMini()

'la variable ligne est un entier
Dim ligne As Integer
ligne = 2

Do Until IsEmpty(Cells(ligne, 9))
If Cells(ligne, 9) = UserForm1.ComboRef Then

'mise à l'état initial des variables
Prix = Cells(ligne, 12)

'Boucler jusqu'à ce que la cellule colonne des ref, ligne soit vide
Do Until IsEmpty(Cells(ligne, 9))

'si la cellule prix de l'article est moins élevé ke le moins chère des prix on enregistre le prix et la ref de l'article
If Cells(ligne, 12) < Prix Then
Prix = Cells(ligne, 12)
ref = Cells(ligne, 9)
fournisseur = Cells(ligne, 2)
marque = Cells(ligne, 3)

'sinon on ne fait rien et on referme la conditionnel
End If

'on rajoute 1 à la variable ligne pour descendre d'une ligne
ligne = ligne + 1

'On boucle (retour a do until)
Loop

'On affiche le résultat
MsgBox ("Le produit le moins chère est " & ref & " de la marque" & marque & " disponible chez " & fournisseur & ",il coute " & Prix & " €")

Else
UserForm1.Hide
End If

Loop
End Sub
0
redonky Messages postés 103 Statut Membre 23
 
Comment ça ça ne marche que pour la première ligne?de la combobox?
0
87fred Messages postés 40 Statut Membre 1
 
le programme me trouve un prix mini, pour ma première ligne de combobox parmi tous mes prix sans tenir conte de ma référence, et pour les autre ligne ca plante.
0
redonky Messages postés 103 Statut Membre 23
 
tu peu exécuter avec F8 (pas a pas) et me dire quel ligne foire:D
0
87fred Messages postés 40 Statut Membre 1
 
en testant dans le vide avec F8 ca j'ai pas de problème
j'ai l'impression que comme ma référence et n'est pas sur ma "ligne" il c plus quoi faire
0
redonky Messages postés 103 Statut Membre 23
 
quel serait le pb là alors:s

parce que je ne vois pas bien là:s

ça devrais marcher:s

quel erreur t'indique t'il?
0
87fred Messages postés 40 Statut Membre 1
 
il m'indique pas d'erreur, mais excel et vba ne repondent plus
0
redonky Messages postés 103 Statut Membre 23
 
hey ba la:s

car même en cas d'erreur le programme ne devrais pas boucler car tu n'a pas un nombre infinit de ligne pleines:s

la je crois que l'on va avoir besoin d'aide extérieur:(
0
87fred Messages postés 40 Statut Membre 1
 
J'ai réussi a supprimer le problème de boucle infini, j'ai donc ce donc:
Dim ligne As Integer
ligne = 2

Do Until IsEmpty(Cells(ligne, 9))
If Cells(ligne, 9) = UserForm1.ComboRef Then

'mise à l'état initial des variables
Prix = Cells(ligne, 12)

'Boucler jusqu'à ce que la cellule colonne des ref, ligne soit vide
Do Until IsEmpty(Cells(ligne, 9))

'si la cellule prix de l'article est moins élevé ke le moins chère des prix on enregistre le prix et la ref de l'article
If Cells(ligne, 12) < Prix Then
PrixRevu = Cells(ligne, 12)
Fournisseur = Cells(ligne, 2)
Marque = Cells(ligne, 3)
Else
If Cells(ligne, 12) = Prix Then
PrixRevu = Cells(ligne, 12)
Fournisseur = Cells(ligne, 2)
Marque = Cells(ligne, 3)
End If

End If

Prix = PrixRevu
'on rajoute 1 à la variable ligne pour descendre d'une ligne
ligne = ligne + 1

'On boucle (retour a do until)
Loop

'On affiche le résultat
UserForm1.TextFournisseur = Fournisseur
UserForm1.TextMarque = Marque
UserForm1.TextPrix = PrixRevu
Else
ligne = ligne + 1
End If

Loop
End Sub

mais il il ne tien toujours pas compte de ma référence, sauf pour ma ligne de départ. c'est a dire qu'il recherce le prix mini a partir de la ligne de la référence imposant, il ne prend pas en compte celles d'avant.
0