Utilisation boucle while
Bonjour,
Je dois écrire un code ou j'ai besoin de 2 inputbox
- Un qui va demander le code postal
- Un qui va demander la réference du produit
Puis 2 tableaux serront présent sur excel avec 2 code postal différents. Il faut donc que je compare la valeur de mon inputbox avec la valeur du code postal de mon tableau et si la valeur correspond; ajouter la référence produit dans le tableau. Et ce dès que je clic sur un bouton "ajouter un produit"
J'ai essayé quelques morceaux de code en vain... Je pense devoir utiliser un IF pour comparer les 2 valeurs, ainsi que 1 while pour inserer les valeurs des références a la suite. J'ai décidé de reprendre mon code à 0 et je me permet de poser un message ici afin d'avoir quelques pistes pour mettre en place mon code...
Merci beaucoup.
Bonjour SLeuv et bienvenu, bonjour le forum,
Difficile de t'aider sans le fichier qui va bien. Te proposer un code pour après l'adapter à ton fichier est toujours une perte de temps inutile...
J'ai mis le fichier si cela peut vous aider a comprendre, et une simple indication m'aiderai... Surtout que j'ai beaucoup de mal avec les boucles while
Re,
Pas très clair tout ça... Tu parles de deux Inputboxes, il y en a trois ! Tu parles de deux tableaux il y en a 4, 2 par code postal !
• Peut-il y en avoir qu'un seul ? Plus de deux ?
• Faut-il remplir le premier puis le second pour chaque code postal ?
• Faut-il répartir au mieux les véhicules ?
L'idéal serait que ta demande corresponde au fichier proposé...
Je n'ai pas expliqué tous le sujet car je bloque uniquement pour la partie dites plus haut...
Sinon dans la globalité il faut entrer le code postal, et par la suite le poid ainsi que la référence. Le code postal nous permet de choisir dans quel tableau il faut aller (1,2 ou 3,4). Et par défaut la référence devra être entrer dans le 1er tableau correspondant au code postal. Hors à chaque fois qu'on insere une référence on additionne le poid et à partir d'un certain poid max (PTAC) on doit mettre les référence dans le 2ème tableau. Voila pourquoi on a 4 tableaux et 3 inputbox. En esperant être compréhensible
Re,
En pièce jointe ton fichier modifié (j'ai rajouté deux formules par tableau) avec le code ci-dessous :
Private Sub CommandButton1_Click() 'bouton "Ajouter un colis"
Dim N As Variant 'déclare la variable N (Numéro)
Dim CP As Variant 'déclare la variable CP (Code Postal)
Dim M As Variant 'déclare la variable M (Masse)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim PLV As Integer 'déclare la variable PLV (Première Ligne Vide)
Dim TEST As Boolean 'déclare la variable TEST
N = Application.InputBox("Veuillez indiquer le numéro du colis", "NUMÉRO", Type:=2) 'définit la boîte d'entrée N
If N = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
CP = Application.InputBox("Veuillez indiquer le code postal du colis", "CODE POSTAL", Type:=1) 'définit la boîte d'entrée CP
If CP = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
M = Application.InputBox("Veuillez indiquer le poids du colis", "POIDS", Type:=1) 'définit la boîte d'entrée M
If M = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
For COL = 3 To 12 Step 3 'boucle : sur toutes les colonnes COL de 3 à 12 par pas de 3
If CStr(Cells(2, COL).Value) = CP Then 'condition 1 : si la valeur de la cellule ligne 2 colonne COL est égale au code postal CP
PLV = Cells(Application.Rows.Count, COL).End(xlUp).Row + 1 'définit la première ligne vide PLV de la colonne COL
If CDbl(Cells(4, COL).Value) + CDbl(M) < Cells(3, COL) Then TEST = True 'si le poids total des colis plus le poids du colis n'excède pas le PTAC du véhicule, definit la variable TEST
If TEST = True Then 'condition 2 : si TEST est [Vrai]
Cells(PLV, COL - 1).Value = N 'renvoie le numéro N dans la cellule ligne PLV colonne COL - 1
Cells(PLV, COL).Value = M 'renvoie la masse M dans la cellule ligne PLV colonne COL
Exit For 'sort de la boucle
Else 'sinon (condition 2)
MsgBox "Le véhicule " & Cells(1, COL).Value & " est trop chargés pour recevoir ce Colis !" 'message
End If 'fin de la condition 2
Else 'sinon (condition 1)
MsgBox "Code Postal non trouvé !": Exit For 'message, sort de la boucle
End If 'fin de la condition 1
Next COL 'prochaoine colonne de la boucle
If TEST = False Then MsgBox "Colis non chargé !" 'si TEST est [Faux], message
End Sub
Private Sub CommandButton2_Click() 'bouton "Réinitialiser"
Range("B6:C11,E6:F11,H6:I11,K65:L11").ClearContents
Range("A1").Select '?
End Sub
Je vous remercie enormement, je vais regarder ce code et essayer de le refaire par la suite! Merci beaucoup!
Re,
Ooops, erreur dans la version 01 !
La version 02 corrigée :
Private Sub CommandButton1_Click() 'bouton "Ajouter un colis"
Dim N As Variant 'déclare la variable N (Numéro)
Dim CP As Variant 'déclare la variable CP (Code Postal)
Dim M As Variant 'déclare la variable M (Masse)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim PLV As Integer 'déclare la variable PLV (Première Ligne Vide)
Dim TEST1 As Boolean 'déclare la variable TEST1
Dim TEST2 As Boolean 'déclare la variable TEST2
N = Application.InputBox("Veuillez indiquer le numéro du colis", "NUMÉRO", Type:=2) 'définit la boîte d'entrée N
If N = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
CP = Application.InputBox("Veuillez indiquer le code postal du colis", "CODE POSTAL", Type:=1) 'définit la boîte d'entrée CP
If CP = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
M = Application.InputBox("Veuillez indiquer le poids du colis", "POIDS", Type:=1) 'définit la boîte d'entrée M
If M = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
For COL = 3 To 12 Step 3 'boucle : sur toutes les colonnes COL de 3 à 12 par pas de 3
If CStr(Cells(2, COL).Value) = CP Then 'condition 1 : si la valeur de la cellule ligne 2 colonne COL est égale au code postal CP
TEST1 = True 'définit la variable TEST1
PLV = Cells(Application.Rows.Count, COL).End(xlUp).Row + 1 'définit la première ligne vide PLV de la colonne COL
If CDbl(Cells(4, COL).Value) + CDbl(M) < Cells(3, COL) Then TEST2 = True 'si le poids total des colis plus le poids du colis n'excède pas le PTAC du véhicule, definit la variable TEST2
If TEST2 = True Then 'condition 2 : si TEST2 est [Vrai]
Cells(PLV, COL - 1).Value = N 'renvoie le numéro N dans la cellule ligne PLV colonne COL - 1
Cells(PLV, COL).Value = M 'renvoie la masse M dans la cellule ligne PLV colonne COL
Exit For 'sort de la boucle
Else 'sinon (condition 2)
MsgBox "Le véhicule " & Cells(1, COL).Value & " est trop chargés pour recevoir ce Colis !" 'message
End If 'fin de la condition 2
End If 'fin de la condition 1
Next COL 'prochaine colonne de la boucle
If TEST1 = False Then MsgBox "Code Postal non trouvé !" 'message
If TEST2 = False Then MsgBox "Colis non chargé !" 'si TEST est [Faux], message
End Sub
Private Sub CommandButton2_Click() 'bouton "Réinitialiser"
Range("B6:C11,E6:F11,H6:I11,K6:L11").ClearContents
Range("A1").Select '?
End Sub